彙編 - 基本語法



一個彙編程式可以分為三個部分:

  • 資料段,

  • bss段,以及

  • 文字段。

資料

資料段用於宣告初始化資料或常量。這些資料在執行時不會改變。您可以在此部分宣告各種常數值、檔名或緩衝區大小等。

宣告資料段的語法如下:

section.data

bss

bss段用於宣告變數。宣告bss段的語法如下:

section.bss

文字

文字段用於存放實際程式碼。此段必須以宣告global _start開頭,這告訴核心程式執行從哪裡開始。

宣告文字段的語法如下:

section.text
   global _start
_start:

註釋

組合語言註釋以分號 (;) 開頭。它可以包含任何可列印字元,包括空格。它可以單獨出現在一行上,例如:

; This program displays a message on screen

或者,與指令在同一行上,例如:

add eax, ebx     ; adds ebx to eax

組合語言語句

組合語言程式由三種類型的語句組成:

  • 可執行指令或指令,
  • 彙編指令或偽操作,以及
  • 宏。

可執行指令或簡稱指令告訴處理器做什麼。每個指令都包含一個操作碼(操作碼)。每個可執行指令都會生成一條機器語言指令。

彙編指令偽操作告訴彙編器有關彙編過程的各個方面。這些指令不可執行,也不會生成機器語言指令。

基本上是一種文字替換機制。

組合語言語句的語法

組合語言語句一行輸入一條語句。每個語句都遵循以下格式:

[label]   mnemonic   [operands]   [;comment]

方括號中的欄位是可選的。一條基本指令有兩個部分,第一個是指令的名稱(或助記符),即將執行的指令,第二個是運算元或命令的引數。

以下是一些典型組合語言語句的示例:

INC COUNT        ; Increment the memory variable COUNT

MOV TOTAL, 48    ; Transfer the value 48 in the 
                 ; memory variable TOTAL
					  
ADD AH, BH       ; Add the content of the 
                 ; BH register into the AH register
					  
AND MASK1, 128   ; Perform AND operation on the 
                 ; variable MASK1 and 128
					  
ADD MARKS, 10    ; Add 10 to the variable MARKS
MOV AL, 10       ; Transfer the value 10 to the AL register

彙編中的“Hello World”程式

以下組合語言程式碼在螢幕上顯示字串“Hello World”:

section	.text
   global _start     ;must be declared for linker (ld)
	
_start:	            ;tells linker entry point
   mov	edx,len     ;message length
   mov	ecx,msg     ;message to write
   mov	ebx,1       ;file descriptor (stdout)
   mov	eax,4       ;system call number (sys_write)
   int	0x80        ;call kernel
	
   mov	eax,1       ;system call number (sys_exit)
   int	0x80        ;call kernel

section	.data
msg db 'Hello, world!', 0xa  ;string to be printed
len equ $ - msg     ;length of the string

編譯並執行上述程式碼後,將產生以下結果:

Hello, world!

在 NASM 中編譯和連結彙編程式

確保您已在 PATH 環境變數中設定了nasmld二進位制檔案的路徑。現在,請按照以下步驟編譯和連結上述程式:

  • 使用文字編輯器輸入上述程式碼,並將其儲存為 hello.asm。

  • 確保您位於儲存hello.asm的同一目錄中。

  • 要彙編程式,請鍵入nasm -f elf hello.asm

  • 如果存在任何錯誤,您將在此階段收到提示。否則,將建立程式的命名為hello.o的物件檔案。

  • 要連結物件檔案並建立名為 hello 的可執行檔案,請鍵入ld -m elf_i386 -s -o hello hello.o

  • 透過鍵入./hello執行程式

如果一切正確,它將在螢幕上顯示“Hello, world!”。

廣告

© . All rights reserved.