大会$ character semnification

时间:2015-01-31 10:41:16

标签: assembly masm

我的考试很困难(对我来说:D)并且无法找到' $'字符。举个例子,我有下一个代码:

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

有人能告诉我lv的价值是什么?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分: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中,$表示当前的内存偏移量。即你把数组vector塞进了内存,内存偏移量就在它结束的地方。因此,$ - vector将从当前偏移量中减去指向数组的指针,从而有效地为您提供数组的大小。

在MASM中,

  

TYPE运算符返回数组中每个元素的大小(以字节为单位)。

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