例如,如果我们编写一个简单的hello world类型程序,.data部分可能包含以下内容:
section .data
msg db 'Enter something: '
len equ $ - msg
此示例中的$表示什么,为什么$ - msg
等于字符串的长度?
答案 0 :(得分:24)
表示“此处”的地址。在这里“here”是msg
字符串结尾之后的字节。任何汇编文档都会描述这一点。阅读文档。
答案 1 :(得分:13)
在这种情况下,$表示根据汇编程序的当前地址。 $ - msg是汇编程序的当前地址减去msg的地址,这将是字符串的长度。
答案 2 :(得分:4)
NASM文档
http://www.nasm.us/doc/nasmdoc3.html#section-3.5
NASM在表达式中支持两个特殊标记,允许计算涉及当前的程序集位置:$和$$标记。 $计算包含表达式的行开头的程序集位置;所以你可以使用JMP $。编码无限循环。
http://www.nasm.us/doc/nasmdoc3.html#section-3.2.4
EQU定义给定常数值的符号:当使用EQU时,源代码行必须包含标签。 EQU的作用是将给定的标签名称定义为其(仅)操作数的值。这个定义是绝对的,以后不能改变。所以,例如,
message db 'hello, world' msglen equ $-message
将msglen定义为常数12
答案 3 :(得分:0)
$用于表示当前地址,$$用于表示汇编中当前部分的起始地址。
示例:
section .text
Mov A,0x0000
Mov B,0x0000
Mov C,0x0000
表示第3行$表示行本身的地址,而$$表示第1行(本节开始的地址)的地址。 这个约定适用于我。
源:nasm.us