当前位置: 代码迷 >> 汇编语言 >> 汇编关于call指令的有关问题
  详细解决方案

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

热度:5600   发布时间:2013-02-26 00:00:00.0
汇编关于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寄存器的值。
  相关解决方案