汇编 $ 字符化

Assembly $ character semnification

我有一个困难的考试(对我来说 :D )并且找不到 '$' 字符的含义。例如,我有下一个代码:

DATA    SEGMENT
vector  db    00h,10h,20h,30h,40h
        db    50h,60h,70h,80h,90h   
lv      equ   ($ - vector)/TYPE vector 

谁能告诉我lv的值是多少?

$ 包含当前指令所在的地址。

lv 的值将是 vector 数据中的项目数。表达式 ($ - vector) 计算从 vector 标签到代码中使用 $ 的位置的字节数,即声明 lv 的位置。

长度除以vector中使用的数据大小。如果你有十个字而不是字节,那么 lv 仍然是 10,因为它占用的 20 个字节将除以 2。

我很确定最后一部分:

lv equ ($ - vector)/TYPE vector

应该会得到向量数组中元素的数量。整个代码大致相当于C中的如下:

int vector[10] = {0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90};
int lv = sizeof(vector) / sizeof(vector[0]);

说明:在MASM中,$表示当前内存偏移量。 IE。您已将数组 vector 填充到内存中,内存偏移量将恰好位于它结束的位置。因此,$ - vector 将从当前偏移量中减去指向数组的指针,有效地为您提供数组的大小。

在 MASM 中,

The TYPE operator returns the size (in bytes) of each element in an array.

(引自 http://www.c-jump.com/CIS77/ASM/Instructions/lecture.html - 顺便说一下,这似乎是一个很好的 MASM 文档)。 IE。它相当于 C 的 sizeof(vector[0]);.