汇编语言中,数组名字的本质

来源:百度知道 编辑:UC知道 时间:2024/09/14 10:26:02
假设数据段的定义如下:
data segment
ary dw 3,2,1
n dw ($-ary)/2
data ends

在代码段中有某段指令
code segment
……
mov ax,ary
……
code ends

通过调试可以发现,数据段中的ary应该是等于0的,即数组ary的起始有效地址(因为用“当前有效地址”$减去ary的“起始有效地址”的一半表示数组ary中的元素个数)。而在代码段中的ary却变成了ary的第一个元素值3并传给ax。

请问,变量ary的本质到底是数组的起始有效地址还是数组的第一个元素值呢?

多数情况下标号代表的是以标号处为起始地址的值,在这种情况下,得到该标号的偏移地址需要用offset伪指令,这种情况大部分出现在非转移指令里
比如 mov ax,ary/add ax,ary 等等
但在转移指令中例外,比如jmp指令,jmp后面接着的标号很明显应该是个地址吧?

还有就是你说的变量定义中的标号
你可以这样想,如果在定义变量的过程中标号代表值的话,想想这样会怎样?
ary1 dw 1234H
ary2 dw ary1
定义成两个一样的变量了吧?这个基本是没有意义的
或者这样,这里的ary如果也是代表值的话:
ary1 dw 1234H
ary2 dw ary1/2
可能你会说这个ary1/2代表ary1这个变量的一半,但既然是变量,那么它就一定是变化的,所以在源码中用伪指令对其【值】进行计算是毫无意义的,对变量的计算应该交给程序
【所以在定义变量时候标号默认代表偏移地址】