6.4例题中的问题
ASSUME CS:CODE,DS:DATA,SS:STACKDATA SEGMENT
DW 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H
DATA ENDS
STACK SEGMENT
DW 0,0,0,0,0,0,0,0,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,20H
MOV BX,0
MOV CX,8
S:PUSH
ADD BX,2
LOOP S
MOV BX,0
MOV CX,8
S0: POP
ADD BX,2
LOOP S0
MOV AX,4C00H
INT 21H
CODE ENDS
END START程序中栈段定义了16个字型数据,SP为20H,DEBGU(是单步不跳过循环)单步调试时不用P命令,可以全部通过
我把16个字型数据改成8个字型数据,SP改为10H,用DEBUG单步调试,到最后几个循环时,DEBUG错误退出,无法进行,但是如果用P命令跳过循环,一切正常,结果也正确,请高手指教下,这个问题纠结了一晚上了,实在搞不懂原因,就包括小甲鱼讲到这个例题时,电脑所输入的也是定义8个字的栈段,SP为16.代码是原题。 我刚才已试过,是你如你所说;书中说的:“程序中栈段定义16个字型数据,SP为20H”是正确的。
显而易见,其栈段定义少了,以后要定义多一些才对。
至于栈段为什么要定义多一些的原因,我也不太清楚;同时也奉劝你不要在这个小问题上过度的纠结了,你已经把此题的答案做出来了,就不要再把大量的时间花费于此了,以后还有更多更难得题目等着你呢!
《孙子兵法》第二篇中有一句话叫:“兵闻拙速,未睹巧之久也。”
凡干大事者,不可因小失大;如果太在意小,则完成不了大业!
已经不下第三次看到有人问这个问题了……
debug中的t命令
书上说是用了单步中断的原理
1.取得中断码
2.tf if入栈
3.cs ip入栈
4.响应中断
原因和debug的T命令有关。
页:
[1]