鱼C论坛

 找回密码
 立即注册
查看: 2890|回复: 5

[汇编作业] 王爽《汇编语言》 ,实验3有点问题不清楚

[复制链接]
发表于 2013-9-10 16:46:31 | 显示全部楼层 |阅读模式

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

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

x
首先是汇编代码,很简单的一段:
assume cs:abc
abc segment
    mov ax,2000h
    mov ss,ax
    mov sp,0
    add sp,4
    pop ax
    pop bx
    push ax
    push bx
    pop ax
    pop bx
    mov ax,4c00h
    int 21h
abc ends
end

然后编译连接都没有问题,接下来用debug单步跟踪的时候,执行完第一个pop ax的时候,发现 cs:ip的地址被改了,接下来本应该执行pop bx的,却被指向了另外一段奇怪的代码。如图:
未命名.jpg

从开始执行 mov ax,2000  mov ss,ax   add sp,+04   pop ax 都是正常的。
pop ax之后,cs的地址变成了0000,ip的地址变成了0014。请问这是怎么回事呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-10 22:35:28 | 显示全部楼层
你的代码我调试了一下,  就像你到说的那步被T出来了,我个人考虑B到14 是8字  POP是出栈的意思IP自动加2   也就是IP+16+2      我也是才学的,说的可能不对,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-11 11:33:47 | 显示全部楼层
个人觉得是栈那里出老问题  我也是才学   你的栈太小老  存东西存满老  sp大一点就不会有这种情况  int 3是一个断点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-12 22:13:41 | 显示全部楼层
你没把栈的概念弄清楚 应该先push 入栈再pop出栈 sp是指向栈顶的 定义sp=4 该栈空间为 2000:0 3 四个字节的内存空间
pop执行是先输出栈 然后sp自动执行sp=sp+2 此时sp指向 2000:6 下方溢出 debug遇到未知错误 程序意外结束      不一定准确 参考一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-12 22:55:10 | 显示全部楼层
是栈的问题  因为 sp出事值为4  pop ax  之后就为0  栈实际上已经空了 再执行出栈会出现错误
于是调用3号中断处理。  你把sp设置的大一点就会避免这种情况!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-30 20:20:26 | 显示全部楼层
1. 本机调试未出现该问题。
2. 看不出该问题原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 08:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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