![]() |
#2
obstratiker2011-06-20 23:32
|
程序如下,是将a段中的前8个字型数据逆序存储到b段中

assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10h
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
然后用debug跟踪发现循环在进行到第六次时,cs值改变a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10h
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
如下:
本来第六个执行了push [bx]后显示:
AX=1813 BX=000A CX=0003 DX=0000 SP=0004 BP=0000 SI=0000 DI=0000
DS=1813 ES=1803 SS=1815 CS=1816 IP=0015 NV UP EI PL NZ NA PE NC
1816:0015 83C302 ADD BX,+02
当t执行下一步时 变成了:
AX=1813 BX=0000 CX=0003 DX=0000 SP=0004 BP=0000 SI=0000 DI=0000
DS=1813 ES=1803 SS=1815 CS=0038 IP=0019 NV UP EI PL ZR NA PE NC
0038:0019 26 ES:
0038:001A AE SCASB
这是为什么?运行了几次都这样 不懂 希望有人指点我,谢谢!