首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

汇编关于call指令的有关问题

2012-09-28 
汇编关于call指令的问题Assembly codeassume cs:codestack segmentdw 8 dup (0)stack endscode segmentsta

汇编关于call指令的问题

Assembly code
assume cs:codestack segment    dw 8 dup (0)stack endscode segmentstart:    mov ax,stack        mov ss,ax        mov sp,16        mov ds,ax        mov ax,0        call word ptr ds:[0eh]        inc ax        inc ax        inc ax        mov ax,4c00h        int 21hcode endsend start

为什么我debug时,用t命令到call 指令那句,之后,跳转的地址不是预想的,ax结果也不对,而我用g命令直接跳到mov ax,4c00h那句,ax的结果就是对的

[解决办法]
因为debug是使用CPU的自陷(TRAP)功能实现T命令,每执行一条指令后,就进入INT 1h处理,这需要占用当前栈6个字节(FLAGS、IP、CS),虽然debug的INT 1处理过程恢复了程序的寄存器值,但是写到栈空间的内容还在,所以call,ds:[0eh]的值本来应该是0,或者上一次执行call压栈的IP值,但是使用T命令,这地方就被INT 1h用于保存现场了,成了flags寄存器的值。

热点排行