汇编 $ 字符化
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]);
.
我有一个困难的考试(对我来说 :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]);
.