Zero_One 发表于 2012-2-6 23:27:23

6.4例题中的问题

ASSUME CS:CODE,DS:DATA,SS:STACK

DATA 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.代码是原题。

没个正样 发表于 2012-2-7 07:14:00

我刚才已试过,是你如你所说;书中说的:“程序中栈段定义16个字型数据,SP为20H”是正确的。
显而易见,其栈段定义少了,以后要定义多一些才对。
至于栈段为什么要定义多一些的原因,我也不太清楚;同时也奉劝你不要在这个小问题上过度的纠结了,你已经把此题的答案做出来了,就不要再把大量的时间花费于此了,以后还有更多更难得题目等着你呢!

《孙子兵法》第二篇中有一句话叫:“兵闻拙速,未睹巧之久也。”
凡干大事者,不可因小失大;如果太在意小,则完成不了大业!

Seely 发表于 2012-2-7 09:47:13

已经不下第三次看到有人问这个问题了……

debug中的t命令

书上说是用了单步中断的原理

1.取得中断码
2.tf if入栈
3.cs ip入栈
4.响应中断

原因和debug的T命令有关。
页: [1]
查看完整版本: 6.4例题中的问题