鱼C论坛

 找回密码
 立即注册
查看: 3620|回复: 4

程序6.3的一些疑问

[复制链接]
发表于 2011-4-26 09:19:24 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 loop 于 2011-4-27 03:29 编辑

hello guys,
今天看到王爽汇编程序6.3,我debug了一遍,中间出现了一点小小的问题,百思不得其解,不知道各位是否有知道的。
程序如下:assume cs:codesg //程序的作用是将8个数据入栈
          codesg segment
          dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
          dw 0, 0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0
            mov ax, cs
            mov ss, ax
            mov sp, 30h       -->当执行这句的时候原本数据都为0 的栈内,无缘无故多了几个数据
            mov bx, 0
            mov cx, 8
        s:  push cs:[bx]
            add bx, 2
            loop s

141D:0032 8ED0          MOV     SS,AX
-d 141d:0 2f
141D:0000  23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09  
141D:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  
141D:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ->未执行 mov sp, 30h
-t

AX=141D  BX=0000  CX=0058  DX=0000  SP=0030  BP=0000  SI=0000  DI=0000
DS=140D  ES=140D  SS=141D  CS=141D  IP=0037   NV UP EI PL NZ NA PO NC
141D:0037 BB0000        MOV     BX,0000
-d 141d:0 2f
141D:0000  23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09  
141D:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  
141D:0020  00 00 00 00 00 00 1D 14-00 00 37 00 1D 14 15 0E   ->执行 mov sp, 30h后,多出这些数据
继续执行push 0123H后
-d 141d:0 2f
141D:0000  23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09  
141D:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  
141D:0020  00 00 00 00 1D 14-00 00 37 00 1D 14 15 0E 23 01 -->0123H入栈后,多余的数据都同时向前移动
在朋友机器上调试也会出现这种问题,只是多余的那些数据稍稍变了一下
如果改为mov sp, 20h;在push的过程中这些数据就会占领cs:0~cs:f 中的数据,有危险。
问题:这几个数据是从何而来,它们的作用又是什么呢?
希望知道的童鞋能不吝赐教~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-26 09:29:47 | 显示全部楼层
注意你用的是CS段地址而不是重新定义,当你执行MOV BX,0000的时候CS:IP会执行相关机器码。不知道这样说你是否懂.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-26 10:01:42 | 显示全部楼层
回复 yilan1314 的帖子

有点迷糊~  呵呵~
不过 mov sp,30h之后那些数据就出现了
这时候mov bx,0还没有执行
而且在不同的机器上,显示的数据也不同
应该不是某段代码的16进制表示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-26 10:31:07 | 显示全部楼层
DEBUG等调试工具产生的数据,无视就好
因为调试用到中断,中断的调用与返回就像CALL一样,需要压栈取栈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-26 19:01:57 | 显示全部楼层
回复 winddyj 的帖子

触发断点需要调用中断,中断的调用过程需要使用栈空间……
这个解释应该很靠谱, 先谢谢了:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-18 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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