我的考试很困难(对我来说:D)并且无法找到' $'字符。举个例子,我有下一个代码:
DATA SEGMENT
vector db 00h,10h,20h,30h,40h
db 50h,60h,70h,80h,90h
lv equ ($ - vector)/TYPE vector
有人能告诉我lv的价值是什么?
答案 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]);
。