,汇编语言,弟5章 实验4编译后单步执行出现错误,CS:0000 IP:0077 OP:F0 37 05 19 02选择“关闭”

编译的程序在debug种用r差看 寄存器 情况,发现CS=0b6b ,
如果不执行该程序,用debug差看,CS=0b11
这问题怎么解决,没法往下学习了~~

这个问题我这是第三次看到了。这个又是王爽的那本汇编语言里的例子吧。
当用T命令调试的时候,实际上触发了单步中断,而单步中断的时候,也会往栈里存东西,比如CS、IP、标志位之类的。程序的压栈操作,把单步中断保存的CS或IP覆盖掉了,所以使用T命令之后,就无法正确返回。
解决办法:把栈的大小设大点;不要手动设置栈段、SP等,让编译器自己设置。
你这道题,首先
mov ax,2000h
mov ss,ax
这就不安全。段地址应该让编译器自己来设置。
不过问题不在这里,问题出在栈的大小太小了。
你把add sp, 4
这句话改大点就行了,比如add sp, 256
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-14
把代码贴出来。。。
不然 教不了追问

这是代码:(用的是NOTEPAD++写的)
assume cs:codesg
codesg 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
codesg ends
end

追答

你要实现什么功能?数据交换?

追问

应该是第4章,实验3的题
编程,编译,连接,跟踪
新手,你懂的

追答

你把4 改成6 看看 如果还不行 我也没办法了。。。 我这边没有调试器。。

相似回答