鱼C论坛

 找回密码
 立即注册
查看: 2797|回复: 18

debug下的诡异情况, 有图

[复制链接]
发表于 2014-1-24 01:51:42 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 五号智能 于 2014-1-24 01:56 编辑

在做王爽汇编时出现的诡异情况,不知道是什么原因原代码如下:
assume cs:code
assume cs:code
        code segment
                        dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987
                        dw 0,0,0,0,0,0,0,0
        stf:        mov ax,cs
                        mov ss,ax
                        mov sp,32h
                        mov bx,0
                        mov cx,8
                s:        push cs:[bx]
                        add bx,2h
                        loop s
                        
                        mov cx,8
                        mov bx,0
                t:        pop cs:[bx]        
                        add bx,2
                        loop t
                        int 21h
                        code ends
end stf

编译后,在debug下出现了如此情况
请看图1.2.3的变化
1.jpg

2.jpg


3.jpg 在最后一张里,刚执行了两个t,指令就跳到第四行了,第三行mov sp,0032被跳过了,而且BX指令后面的值很诡异,不是上面代码写的0,运行之后,BX被赋值为076a了;现在是大半夜了,出现这诡异的情况让我毛骨悚然呐.见鬼了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-24 11:49:27 | 显示全部楼层
我用系统自带debug 测试OK啊 怀疑是dosbox出问题或者楼主使用时操作有误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-24 11:51:19 | 显示全部楼层
那啥 我是直接把 mov ax,cs.....用a打到debug的 可能是我搞错了2 表见怪啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-24 12:34:17 | 显示全部楼层
:mad:还没学到这里。呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-24 16:05:40 | 显示全部楼层
本帖最后由 tk2003 于 2014-1-24 17:02 编辑

1.在最后一张里,刚执行了两个t,指令就跳到第四行了,第三行mov sp,0032被跳过了
请看王爽书本第73页,写的很清楚,这条指令紧跟上一个指令执行了!
赋值问题倒是没搞清楚,运行看看去

第2:BX的值出现问题,个人分析是这样的:
你的cs段是哪里开始的呢?其实不是stf:标号表明的,而是你的dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987,因为它紧跟在code段下,所以它应该先执行,你用D命令查看,076a:0 从0开始就是你定义的数值,PS:DW段最后一个你没用16进制,所以DEBUG看到的是转换后的16进制,
程序走走走,走到第一条,而这一条其实不是cs段的开头076a:0,而是076a:0020,因为前面2段给你定义了数值,mov ax,cs 执行了,ax=076a,第二条,mov ss,ax,也执行了,ss=076a,这2条没问题,但是下一条mov bx,0无法执行,因为这一段的机器码不是这个指令,所以就乱了
具体你可以T命令一步步走,每走一步就用D查看076a:0 2f,就会发现在mov sp,32h执行后发现机器指令突然变化了,导致mov bx,076a,为什么我也不知道!而且好像也不能这么写mov sp,32h,最好用BP,不用SP
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-25 03:54:31 | 显示全部楼层

请看第二张图和第一张图的cs:IP
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-25 04:11:22 | 显示全部楼层
我怀疑应该是dosbox和debug的版本问题.

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-30 16:28:47 | 显示全部楼层
cs 能定义数据吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-30 18:04:33 | 显示全部楼层
这个程序我也自己编写了 和你现了相同的情况  是不是栈段 和数据段重复的原应啊   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-1 23:45:56 | 显示全部楼层
支持小甲鱼,赞点鱼币回来下载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-1 23:46:28 | 显示全部楼层
支持小甲鱼,赞点鱼币回来下载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-8 12:47:55 | 显示全部楼层
支持小甲鱼,赞点鱼币回来下载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-8 12:50:53 | 显示全部楼层
我编写了许多程序调试的时候都是这种情况  可能是在执行 mov ss,ax的时候 SP就自动指向栈定了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-8 17:15:51 | 显示全部楼层
还没学到这里,先看看大家怎么解决的~~:sweat:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-9 19:55:19 | 显示全部楼层
路过看看= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-13 14:20:09 | 显示全部楼层
我来学习一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-20 19:56:10 | 显示全部楼层
我知道你错哪里了,你应该把sp=20h(sp指向栈底)因为,10h表示10进制的32,而不是sp=32h,  32h表示十进制的50。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-20 19:57:22 | 显示全部楼层
我知道你错哪里了,你应该把sp=20h(sp指向栈底)因为,20h表示10进制的32,而不是sp=32h,  32h表示十进制的50。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-20 20:01:37 | 显示全部楼层
还有在补充一下,你再int 21h的前面没有使mov ax, 4c00h这个语句,这样的话,程序是不会正常结束的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-24 18:13:23 | 显示全部楼层
20h=32    10h=16,王爽的书上,写的很详细了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-29 09:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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