直接來看一段**
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
一臉懵逼對嗎,別著急。
首先,我們先來看這段**的開頭
section .text
golbal _start
_start:
這是什麼玩意兒呢?其實就相當於咱們平時用的main
函式,是程式的入口
然後,**第11行的section .data
,是乙個用來宣告常量的語法,你可以在這行**的下方宣告常量。
上面的**就宣告了乙個msg
常量和乙個len
常量。
而宣告變數又該使用什麼語法呢?用section .bss
,用法與section .data
一樣。
接下來,你可以看到中間的一大段**,後面都接著乙個以分號;
開始的語句,這其實是彙編語法的注釋。
**的第四行,有一句mov edx, len
mov
是資料傳送指令,那這行**的意思是將len
這個資料,傳送到edx暫存器
。
也可以這樣用:mov total 48
,意思是將48賦值給total
這個變數。
與它類似的有add ah, bh
意思是將bh暫存器的內容
加到ah暫存器
上。
ATT 彙編語法
在研華的pc104上使用看門狗要使用彙編。使用彙編來修改cmos裡面的引數。也就是內聯彙編。linux下gcc只支援att彙編。所以這兒有必要將att語法學習學習。以後需要的時候翻出來溫習溫習。1,運算元的長度 運算元的長度用加在指令後的符號表示 b byte,8 bit w word,16 bit...
Linux 彙編語法格式
絕大多數 linux 程式設計師以前只接觸過 dos windows 下的組合語言,這些彙編 都是 intel 風格的。但在 unix 和linux 系統中,更多採用的還是 at t 格式,兩者在語法格式上有著很大的不同 在 at t 彙編格式中,暫存器名要加上 作為字首 而在 intel 彙編格式...
AT T彙編語法格式
1.暫存器的引用要在暫存器前加 如mov eax,ebx 2.運算元排列是左源右目的,如上例表示把值從eax暫存器mov到ebx暫存器 3.常數 立即數前面要加 如mov 4,ebx 4.對於變數加 表示取位址。如mov value,ebx表示傳值給ebx,而mov value,ebx表示傳位址給e...