主题:为何源代码中的数据段不是ds,而是ds+16?
完整代码是这样的。
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h
data ends
stack segment
dw 0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
================================================================
debug程序的时候,r命令显示:
AX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=13B5 ES=13B5 SS=13C5 CS=13C7 IP=0000 NV UP EI PL NZ NA PO NC
13C7:0000 B8C613 MOV AX,13C6
我以为DS=13B5,即data=13B5.
可是用u命令查看,发现:
-u
13C7:0000 B8C613 MOV AX,13C6
13C7:0003 8ED0 MOV SS,AX
13C7:0005 BC1000 MOV SP,0010
13C7:0008 B8C513 MOV AX,13C5
13C7:000B 8ED8 MOV DS,AX
13C7:000D FF360000 PUSH [0000]
13C7:0011 FF360200 PUSH [0002]
13C7:0015 8F060200 POP [0002]
13C7:0019 8F060000 POP [0000]
13C7:001D B8004C MOV AX,4C00
明显认为data= 13C5.
d命令查看,发现也确实把0123h,0456h放到了13C5段中。
为什么啊???为什么data是13c5???
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h
data ends
stack segment
dw 0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
================================================================
debug程序的时候,r命令显示:
AX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=13B5 ES=13B5 SS=13C5 CS=13C7 IP=0000 NV UP EI PL NZ NA PO NC
13C7:0000 B8C613 MOV AX,13C6
我以为DS=13B5,即data=13B5.
可是用u命令查看,发现:
-u
13C7:0000 B8C613 MOV AX,13C6
13C7:0003 8ED0 MOV SS,AX
13C7:0005 BC1000 MOV SP,0010
13C7:0008 B8C513 MOV AX,13C5
13C7:000B 8ED8 MOV DS,AX
13C7:000D FF360000 PUSH [0000]
13C7:0011 FF360200 PUSH [0002]
13C7:0015 8F060200 POP [0002]
13C7:0019 8F060000 POP [0000]
13C7:001D B8004C MOV AX,4C00
明显认为data= 13C5.
d命令查看,发现也确实把0123h,0456h放到了13C5段中。
为什么啊???为什么data是13c5???