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

vik*_*cks 4 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
Run Code Online (Sandbox Code Playgroud)

输出:

root@bt:~/Arena# nasm -f elf a.asm -o a.o
root@bt:~/Arena# ld -o out a.o
root@bt:~/Arena# ./out 
KingKong
Run Code Online (Sandbox Code Playgroud)

行中的$是多少size equ $-mesg。有人请解释一下所用$符号...

Car*_*rum 5

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

size equ $-msg
Run Code Online (Sandbox Code Playgroud)

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

文档中

NASM在表达式中支持两个特殊标记,允许计算涉及当前程序集的位置:$$$标记。$求值到包含表达式的行的开头处的汇编位置;因此您可以使用编写无限循环JMP $$$计算到当前部分的开头;因此您可以使用来告诉您该部分有多远($-$$)