assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0234h,0345h,0456h,0567h,0678h,0789h,0888h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
mov bx,0
mov cx,8
lp1:
push ds:[bx] ;这个程序有问题
add bx,2
loop lp1
mov bx,0
mov cx,8
lp2:
pop ds:[bx]
add bx,2
loop lp2
mov ax,4c00h
int 21h
code ends
end start
这个程序汇编后,用debug名字执行,会看出有问题。
DS=0BD3 ES=0BC3 SS=0BD4 CS=0BD5 IP=0015 NV UP EI PL NZ NA PO NC
0BD5:0015 83C302 ADD BX,+02
-t
AX=0BD3 BX=000A CX=0004 DX=0000 SP=0006 BP=0000 SI=0000 DI=0000
DS=0BD3 ES=0BC3 SS=0BD4 CS=0BD5 IP=0018 NV UP EI PL NZ NA PE NC
0BD5:0018 E2F9 LOOP 0013
-t
AX=0BD3 BX=000A CX=0003 DX=0000 SP=0006 BP=0000 SI=0000 DI=0000
DS=0BD3 ES=0BC3 SS=0BD4 CS=0BD5 IP=0013 NV UP EI PL NZ NA PE NC
0BD5:0013 FF37 PUSH [BX] DS:000A=0678
-t
AX=0BD3 BX=000A CX=0003 DX=0000 SP=0004 BP=0000 SI=0000 DI=0000
DS=0BD3 ES=0BC3 SS=0BD4 CS=0BD5 IP=0015 NV UP EI PL NZ NA PE NC
0BD5:0015 83C302 ADD BX,+02
-t
AX=0BD3 BX=000A CX=0003 DX=0000 SP=0004 BP=0000 SI=0000 DI=0000
DS=0BD3 ES=0BC3 SS=0BD4 CS=00B4 IP=0017 NV UP DI PL NZ NA PE CY
00B4:0017 0000 ADD [BX+SI],AL DS:000A=4B
还在循环次数中的时候,最后两步,CS的值为什么会变了?造成程序运行错误?
我是哪儿有问题?怎么检查不出来?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!