Inv*_*ion 32 x86 assembly intel-syntax
例如,如果我们编写一个简单的hello world类型程序,.data部分可能包含以下内容:
section .data
msg db 'Enter something: '
len equ $ - msg
Run Code Online (Sandbox Code Playgroud)
这个例子中的$代表什么,为什么$ - msg等于字符串的长度?
Ale*_*nze 24
它表示"这里"的地址.在这里"here"是msg字符串结尾之后的字节.任何汇编文档都会描述这一点.阅读文档.
Wil*_*ung 14
在这种情况下,$表示根据汇编程序的当前地址.$ - msg是汇编程序的当前地址减去msg的地址,这将是字符串的长度.
$ 用于引用当前地址,$$ 用于引用汇编中当前节的起始地址。
例子:
section .text
Mov A,0x0000
Mov B,0x0000
Mov C,0x0000
Run Code Online (Sandbox Code Playgroud)
对于第三行,$ 指的是该行本身的地址,而 $$ 指的是第一行的地址(我们的部分开始的地方)。这个约定对我在 nasm 来说很有效。
来源:nasm.us
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的作用是将给定的标签名称定义为其(唯一)操作数的值。此定义是绝对的,以后不能更改。因此,例如
Run Code Online (Sandbox Code Playgroud)message db 'hello, world' msglen equ $-message定义msglen为常数12
| 归档时间: |
|
| 查看次数: |
39094 次 |
| 最近记录: |