第16章 直接定位表
16.1 描述了单元长度的标号
我们常用offset来获取标号的内存地址。
offset a,reg a,前者是获取a的偏移地址,后者是获取a的段地址。
将它们放在相关寄存器当中,进行数据转移等有关操作。
现在,我们有了另一种写法:
assume cs:code
code segment
a db 1,2,3,4,5,6,7,8
b dw 0
start: mov si,0
mov cx,0
s: mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
code ends
end start
这样,我们的标号就相当于数组名,然后之后就是后面的元素,a[si]
,这种写法是你应该要明确的。
而标号b描述的地址是 code:8,和从这个地址开始,以后的内存单元都是字单元。
mov b,2
相当于 mov word ptr cs:[8],2
,都是进行字操作的。
下面的指令则会引起编译错误:
mov al,b
16.2 在其他段中使用数据标号
一般来说,我们不在代码段中定义数据,而是将数据定义到其他段中。在其他段中,我们也可以使用数据标号来描述存储数据的单元的地址和长度。
<