鱼C论坛

 找回密码
 立即注册
查看: 3223|回复: 6

在代码段中使用栈的例题问题

[复制链接]
发表于 2011-7-14 16:55:10 | 显示全部楼层 |阅读模式

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

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

x
老师你好:

                在代码段中使用栈这一课的开始例子中如下:
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0
start:  mov ax,cs
        mov ss,ax
        mov sp,32
        mov bx,0
        mov cx,8
   s:   push cs:[bx]
        add bx,2
        loop s
        mov bx,0
        mov cx,8
    s0: pop cs:[bx]
       add bx,2
       loop s0
       mov ax,4c00h
       int 21h
       code ends
       end start
我在debug中单步执行到push循环的第四次时,有时是第五次,代码段定义的dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h,这8个数用-D命令查看时,后面的几个数总是被替换成别的数了,导致后面的push没有把正确的数压栈,不知道为什么。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-14 17:39:35 | 显示全部楼层
虽然数字变了 但是仍然可以正确压栈的

正确入栈

正确入栈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-14 18:23:34 | 显示全部楼层
但是我的在压栈的时候后面的数就变了,我是一个t一个t的执行的8次数就变了,你的是直接执行了P不知道有什么区别,再有就是为什么原来的数会变呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-14 18:56:45 | 显示全部楼层
1.jpg 是因为执行mov ss,ax mov sp,32这两句后栈出现了变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-14 18:58:36 | 显示全部楼层
多出了数据,数据压栈的时候数据也前移了。这个程序不会得到想要的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-14 19:09:47 | 显示全部楼层
在Debug中:
1、中断调试时(比如:用 t 命令单步调试),会把一些“有用”的数据先行保存起来(压栈);
2、等你再执行下一个命令前,再把这些“有用”的数据取出来(出栈)然后再执行你输入的命令;
3、不断重复(1、2)的步骤,或者结束程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-14 20:57:38 | 显示全部楼层
似乎有些懂了,请看一下“dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
”这是原数据,“dw 0,0,0,0,0,0,0,0”这是建立的栈的地方,我在单步执行压栈循环的时候,比如执行完第四个循环的时候,假设栈数据是这样的“0,0,0,0,0abc,0789,0456,0123”(正常状态),这个时候恰巧系统有要保存的数据入栈,就把栈第五个数据位置(本来是0的)变成了系统数据“0,0,0,AAAA,0abc,0789,0456,0123”,随着单步执行,系统数据也不断的压站出站,最终导致了,栈顶指针都延伸到了我的原数据“0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
”所在的位置,所以看到的现象是我的原数据后部分有些数据都改变了,0123h,0456h,0789h,0abch,0defh,0fedh,142ch,fefeh,是这样的吗,望高手赐教,还有就是p指令就不会产生系统的压站出站数据吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 00:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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