lyoal 发表于 2012-11-20 22:33:05

CALL命令在这段代码中如何执行

按鱼C讲的call命令是将当前IP压入栈,再跳到标号处执行。请看书中测试点10.2中,AX的值应该是4吧?可DEBUG的结果是6.请教大牛如何解释。assume cs:code

code segment
start:         mov ax,0
                call s
                inc ax
                s:pop ax
               
                mov ax,4c00h
                int 21h
                code ends
        end start

s0512 发表于 2012-11-20 23:01:16


(上机验证从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;
谢谢

lyoal 发表于 2012-11-20 23:40:31

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入栈的。这一点把我搞糊涂了,转不弯儿了。呵呵

谢谢你!

ACC 发表于 2012-11-21 00:14:03

lyoal 发表于 2012-11-20 23:40 static/image/common/back.gif
为什么书中说是将前指令,这里说的当前指令不就call s 这条指令吗。按执行结果来看,应该是当前指令的下一 ...

指令寄存器总是指向下一条要执行的指令

s0512 发表于 2012-11-21 07:48:31

lyoal 发表于 2012-11-20 23:40 static/image/common/back.gif
为什么书中说是将前指令,这里说的当前指令不就call s 这条指令吗。按执行结果来看,应该是当前指令的下一 ...

ACC同学说的对!CS:IP总是指向下一条指令

lyoal 发表于 2012-11-21 12:35:41

s0512 发表于 2012-11-21 07:48 static/image/common/back.gif
ACC同学说的对!CS:IP总是指向下一条指令

哦,我想起来了,在计算机基础试题有这么一道选择题,就是说指令缓冲器中存放是下一条要执行的指令。
页: [1]
查看完整版本: CALL命令在这段代码中如何执行