45

例如,如果我们正在编写一个简单的 hello world 类型程序,.data 部分可能包含如下内容:

section .data

msg     db      'Enter something: '
len     equ     $ - msg

这个例子中的 $ 代表什么,为什么$ - msg等于字符串的长度?

4

3 回答 3

24

在这种情况下,$ 表示根据汇编程序的当前地址。$ - msg 是汇编程序的当前地址减去 msg 的地址,即字符串的长度。

于 2012-04-28T06:35:48.150 回答
7

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

于 2015-10-04T18:23:20.247 回答
3

$ 用于引用当前地址,$$ 用于引用汇编中当前节的开始地址。

例子:

section .text
  Mov A,0x0000
  Mov B,0x0000
  Mov C,0x0000

对于第 3 行,$ 指的是行本身的地址,而 $$ 指的是第一行的地址(我们的部分开始的地方)。这个约定在 nasm 中对我有用。

来源:nasm.us

于 2013-04-09T23:45:26.633 回答