4

这是我的汇编级代码...

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

输出:

root@bt:~/Arena# nasm -f elf a.asm -o a.o
root@bt:~/Arena# ld -o out a.o
root@bt:~/Arena# ./out 
KingKong

行中的 $ 是什么size equ $-mesg。有人请解释一下使用的$符号...

4

1 回答 1

5

$指示汇编程序的“当前位置”。在这种情况下,它用于存储mesg字符串的长度。

size equ $-msg

说“制作一个标签size并将其设置为等于当前位置减去mesg标签的位置”。由于“当前位置”在字符串“KingKong\n”的末尾之后,size因此设置为该长度(9 个字符)。

文档中:

NASM 支持表达式中的两个特殊标记,允许计算涉及当前装配位置:$$$标记。$计算到包含表达式的行首的装配位置;因此您可以使用JMP $. $$计算到当前部分的开头;因此,您可以使用($-$$).

于 2013-07-27T16:54:45.287 回答