这是我的装配级代码......
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
中的$是多少?有人请说明使用的$
符号......
答案 0 :(得分:4)
$
表示汇编程序的“当前位置”。在这种情况下,它用于存储mesg
字符串的长度。
size equ $-msg
表示“制作标签size
并将其设置为等于当前位置减去mesg
标签的位置”。由于“当前位置”是字符串“KingKong \ n”末尾的一个,因此size
设置为该长度(9个字符)。
NASM支持表达式中的两个特殊标记,允许计算涉及当前装配位置:
$
和$$
标记。$
计算包含表达式的行开头的程序集位置;所以你可以使用JMP $
编写一个无限循环。$$
评估到当前部分的开头;所以你可以使用($-$$)
来判断你所在的部分有多远。