2013-07-27 189 views
3

這是我的彙編級代碼...

section .text 
global _start 
_start mov eax, 4 
     mov ebx, 1 
     mov ecx, mesg 
     mov edx, size 
     int 0x80 
exit: mov eax, 1 
     int 0x80 
section .data 
mesg db  'KingKong',0xa 
size equ  $-mesg 

輸出:

[email protected]:~/Arena# nasm -f elf a.asm -o a.o 
[email protected]:~/Arena# ld -o out a.o 
[email protected]:~/Arena# ./out 
KingKong 

什麼是行size equ $-mesg的$。有人請說明有關使用的$符號...

回答

3

$指示彙編程序的「當前位置」。在這種情況下,它用於存儲mesg字符串的長度。

size equ $-msg 

說「做一個標籤size並設置它等於當前位置減去mesg標籤的位置」。由於'當前位置'是字符串「KingKong \ n」的末尾之後的一個,所以size被設置爲該長度(9個字符)。

documentation

NASM支持在表達式兩個特殊的令牌,從而允許計算涉及當前組裝位置:所述$$$令牌。 $評估爲包含表達式的行的開頭的裝配位置;所以你可以使用JMP $來編碼一個無限循環。 $$評估到當前部分的開始;所以你可以通過使用($-$$)來確定你所在的部分有多遠。

+0

謝謝...再次幫助我! – vikkyhacks