Assembly 基本語法

2018-02-06 11:27 更新

匯編程序可以分為三個(gè)部分:

  • 數(shù)據(jù)段

  • bss段部分

  • 文字部分

Assembly 基本語法


數(shù)據(jù)段

用于聲明初始化數(shù)據(jù)或常量的數(shù)據(jù)段。在運(yùn)行時(shí),此數(shù)據(jù)不改變。在本節(jié)中可以聲明不同的常量值,文件名或緩沖區(qū)大小等。


聲明數(shù)據(jù)段的語法是:

section .data


bss段


BSS部分是用于聲明變量。聲明bss段段的語法是:

section .bss


文本段

文字部分用于保存實(shí)際的代碼。本節(jié)開頭必須的的聲明global_start,告訴內(nèi)核程序開始執(zhí)行。


聲明文本部分的語法是:

section .text
   global _start
_start:


注釋

匯編語言注釋以分號(hào)(;)。它可能包含任何可打印的字符,包括空白。它可以出現(xiàn)一行本身,如:

; This program displays a message on screen


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

add eax ,ebx    ; adds ebx to eax


Assembly匯編語言語句

匯編語言程序包括三個(gè)類型的語句:

  • 可執(zhí)行指令或指令

  • 匯編指令或偽操作


可執(zhí)行指令或簡(jiǎn)單指示告訴的處理器該怎么做。每個(gè)指令由操作碼(操作碼)可執(zhí)行指令生成的機(jī)器語言指令。


匯編指令或偽操作告訴匯編有關(guān)匯編過程的各個(gè)方面。這些都是非可執(zhí)行文件,并不會(huì)產(chǎn)生機(jī)器語言指令。


宏基本上是一個(gè)文本替換機(jī)制。


匯編語言語句的語法

匯編語言語句輸入每行一個(gè)語句。每個(gè)語句如下的格式如下:

[label]   mnemonic   [operands]   [;comment]


方括號(hào)中的字段是可選的。基本指令有兩部分組成,第一個(gè)是要執(zhí)行的指令(助記符)的名稱和所述第二命令的操作數(shù)或參數(shù)的。


以下是一些典型的匯編語言語句的例子:

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


Assembly Hello World程序

下面的匯編語言代碼顯示字符串 'Hello World'在屏幕上:

section	.text
    global _start   ;must be declared for linker (ld)
_start:	            ;tells linker entry w3cschool
    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  ;our dear string
len equ $ - msg              ;length of our dear string

上面的代碼編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:

Hello, world!


一個(gè)匯編程序的編譯和鏈接在NASM

請(qǐng)確保已設(shè)置NASM和LD的二進(jìn)制文件的路徑在PATH環(huán)境變量中?,F(xiàn)在上述程序的編譯和鏈接采取以下步驟:

  • 使用文本編輯器,輸入上面的代碼保存為hello.asm。

  • 請(qǐng)確保hello.asm文件保存在同一目錄 

  • 要匯編程序,請(qǐng)鍵入 nasm -f elf hello.asm

  • 如果有錯(cuò)誤將提示。否則hello.o程序?qū)?chuàng)建一個(gè)對(duì)象文件。

  • 要鏈接目標(biāo)文件,并創(chuàng)建一個(gè)可執(zhí)行文件名hello,請(qǐng)鍵入 ld -m elf_i386 -s -o hello hello.o

  • 通過輸入執(zhí)行程序 ./hello

如果所做的一切都是正確的,它會(huì)顯示 Hello, world!在屏幕上。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)