nasm汇编语言中的$是什么?

时间:2013-07-27 16:53:21

标签: assembly nasm

这是我的装配级代码......

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中的$是多少?有人请说明使用的$符号......

1 个答案:

答案 0 :(得分:4)

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

size equ $-msg

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

来自documentation

  

NASM支持表达式中的两个特殊标记,允许计算涉及当前装配位置:$$$标记。 $计算包含表达式的行开头的程序集位置;所以你可以使用JMP $编写一个无限循环。 $$评估到当前部分的开头;所以你可以使用($-$$)来判断你所在的部分有多远。