汇编中的偏移地址和段地址取值


在Masm中,表示存储单元的有标号和变量,形式相同,前者有冒号,后者没有。伪指令offset和seg大部分教程中都表示取标号或变量的偏移地址和段地址,但稍有细微的区别:

假设有汇编代码如下:

 1 datasg segment
 2     dataName dw 1234h
 3 datasg ends
 4 codesg segment
 5     start:
 6     mov ax,start
 7     mov ax,offset start
 8     mov ax,seg start
 9     mov ax,dataName
10     mov ax,offset dataName
11     mov ax,seg dataName
12     mov ax,datasg
13     mov ax,offset datasg
14     mov ax,seg datasg
15 codesg ends
16 end start

其中6、7行效果是相同的,取偏移地址;第8行是取start所在位置的段地址。

其中9行是取dataName的值,10行是取dataName的偏移地址,11行是取dataName的段地址。

其中12和14行效果是相同,取段地址;13行是取该段的长度。