|
1鱼币
assume ds:data, ss:stack, cs:code
data segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 16
mov bx, 0
mov cx, 8
s1: push [bx]
add bx, 2
loop s1
mov bx, 0
mov cx, 8
s2: pop [bx]
add bx, 2
loop s2
mov ax, 4c00H
int 21H
code ends
end start
上面是程序
debug调试显示如下:
AX=0B8D BX=0008 CX=0004 DX=0000 SP=0008 BP=0000 SI=0000 DI=0000
DS=0B8C ES=0B7C SS=0B8D CS=0B8E IP=0013 NV UP EI PL NZ NA PO NC
0B8E:0013 FF37 PUSH [BX] DS:0008=0DEF
-t
AX=0B8D BX=0008 CX=0004 DX=0000 SP=0006 BP=0000 SI=0000 DI=0000
DS=0B8C ES=0B7C SS=0B8D CS=0B8E IP=0015 NV UP EI PL NZ NA PO NC
0B8E:0015 83C302 ADD BX,+02
-t
AX=0B8D BX=000A CX=0004 DX=0000 SP=0006 BP=0000 SI=0000 DI=0000
DS=0B8C ES=0B7C SS=0B8D CS=0B8E IP=0018 NV UP EI PL NZ NA PE NC
0B8E:0018 E2F9 LOOP 0013
-t
AX=0B8D BX=000A CX=0003 DX=0000 SP=0006 BP=0000 SI=0000 DI=0000
DS=0B8C ES=0B7C SS=0B8D CS=0B8E IP=0013 NV UP EI PL NZ NA PE NC
0B8E:0013 FF37 PUSH [BX] DS:000A=0FED
-t
AX=0B8D BX=000A CX=0003 DX=0000 SP=0004 BP=0000 SI=0000 DI=0000
DS=0B8C ES=0B7C SS=0B8D CS=0B8E IP=0015 NV UP EI PL NZ NA PE NC
0B8E:0015 83C302 ADD BX,+02
-t
E:\huibian>
最后一个-t单步运行后直接退出了,各位大侠能否帮帮小弟,找出原因呢
|
最佳答案
查看完整内容
这题把堆栈设计得刚好自己程序够用,一点都没多余。这种做法很不好。
LZ线考虑下为什么你按t命令的时候程序会暂停执行?一定是debug里运行了一个内部的小程序对不对?这个小程序也要使用堆栈啊。所以当你的堆栈容量很小的时候执行t命令的小程序使用堆栈的时候就溢出了。
|