先看下面的代码
assume cs:code
data segment
a:
db 16 dup(0)
data ends
code segment
db 16 dup(0)
start: mov ax,start ;下面一行有 offset !!!
mov ax,offset start
s: mov ax,s
mov ax,a
mov ax,4c00h
int 21h
code ends
end start
我的机器上Debug反汇编,代码如下
0D08:0010 B81000 MOV AX,0010
0D08:0013 B81000 MOV AX,0010 ;有无offset编译后机器码一样
0D08:0016 B81600 MOV AX,0016
0D08:0019 B80000 MOV AX,0000
0D08:001C B8004C MOV AX,4C00
0D08:001F CD21 INT 21
很显然 "标号:" 代表了标号相对于该段首的偏移地址
而offset也是取标号的偏移地址
那么这2者到底还有什么区别呢? |