鱼C论坛

 找回密码
 立即注册
查看: 2593|回复: 2

6.4例题中的问题

[复制链接]
发表于 2012-2-6 23:27:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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 [BX]
            ADD BX,2
                LOOP S
                
                MOV BX,0
                MOV CX,8
        S0: POP [BX]
            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.代码是原题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-7 07:14:00 | 显示全部楼层
我刚才已试过,是你如你所说;书中说的:“程序中栈段定义16个字型数据,SP为20H”是正确的。
显而易见,其栈段定义少了,以后要定义多一些才对。
至于栈段为什么要定义多一些的原因,我也不太清楚;同时也奉劝你不要在这个小问题上过度的纠结了,你已经把此题的答案做出来了,就不要再把大量的时间花费于此了,以后还有更多更难得题目等着你呢!

《孙子兵法》第二篇中有一句话叫:“兵闻拙速,未睹巧之久也。”
凡干大事者,不可因小失大;如果太在意小,则完成不了大业!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-7 09:47:13 | 显示全部楼层
已经不下第三次看到有人问这个问题了……

debug中的t命令

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

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


原因和debug的T命令有关。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 18:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表