CALL命令在这段代码中如何执行
按鱼C讲的call命令是将当前IP压入栈,再跳到标号处执行。请看书中测试点10.2中,AX的值应该是4吧?可DEBUG的结果是6.请教大牛如何解释。assume cs:codecode segment
start: mov ax,0
call s
inc ax
s:pop ax
mov ax,4c00h
int 21h
code ends
end start
(上机验证从1000:0开始写入代码),左面给出了内存地址。
1000:0mov ax,0;ax=0
1000:3call s ;压下一条指令偏移地址进栈(相当于PUSH 6,jmp s),执行标号S处理代码
1000:6 inc ax ;跳过(未执行)
1000:7 pop ax ;刚才压进栈的偏移6弹入AX, AX=6;
谢谢
s0512 发表于 2012-11-20 23:01 static/image/common/back.gif
(上机验证从1000:0开始写入代码),左面给出了内存地址。
1000:0mov ax,0;ax=0
1000:3call s ...
为什么书中说是将前指令,这里说的当前指令不就call s 这条指令吗。按执行结果来看,应该是当前指令的下一条指令的IP入栈的。这一点把我搞糊涂了,转不弯儿了。呵呵
谢谢你! lyoal 发表于 2012-11-20 23:40 static/image/common/back.gif
为什么书中说是将前指令,这里说的当前指令不就call s 这条指令吗。按执行结果来看,应该是当前指令的下一 ...
指令寄存器总是指向下一条要执行的指令 lyoal 发表于 2012-11-20 23:40 static/image/common/back.gif
为什么书中说是将前指令,这里说的当前指令不就call s 这条指令吗。按执行结果来看,应该是当前指令的下一 ...
ACC同学说的对!CS:IP总是指向下一条指令 s0512 发表于 2012-11-21 07:48 static/image/common/back.gif
ACC同学说的对!CS:IP总是指向下一条指令
哦,我想起来了,在计算机基础试题有这么一道选择题,就是说指令缓冲器中存放是下一条要执行的指令。
页:
[1]