注册 登录
编程论坛 汇编论坛

汇编前辈进啊,小弟有一个关于指令转移问题

维天 发布于 2008-11-04 21:55, 1602 次点击
在十六位汇编中,jmp和call都在什么时候用啊,有什么区别吗!
8 回复
#2
ONEPROBLEM2008-11-04 22:39
个人认为,jmp指令和call指令,还是有许多相似之处的.
区别在于:
jmp是无条件转移指令,而且不预先保存当前的CS和IP,直接跳转至标号处往下执行;
而call虽然也是转移指令,但在转移前,都会保存当前的CS和IP,它正好和ret指令的配合,实现对子程序的调用.
#3
zklhp2008-11-05 08:44
[bo][un]ONEPROBLEM[/un] 在 2008-11-4 22:39 的发言:[/bo]

个人认为,jmp指令和call指令,还是有许多相似之处的.
区别在于:
jmp是无条件转移指令,而且不预先保存当前的CS和IP,直接跳转至标号处往下执行;
而call虽然也是转移指令,但在转移前,都会保存当前的CS和IP,它正好和re ...


若是一去不复返 就用jmp

在386以后的cpu里 jmp不会涉及特权级改变……
#4
cnhanxiao2008-11-06 01:47
[bo]考试:下面的一段程序,最后执行的指令是(从106开始执行)?[/bo]

xxxx:0106 0E            PUSH    CS
xxxx:0107 B80D01        MOV     AX,010D
xxxx:010A 50            PUSH    AX
xxxx:010B EB13          JMP     0120
xxxx:010D E8FD00        CAll    0200

xxxx:0120 E82D00        CALL    0150

xxxx:0150 EB2E          JMP     0180

xxxx:0180 58            POP     AX
xxxx:0181 C3            RET

[[it] 本帖最后由 cnhanxiao 于 2008-11-9 12:20 编辑 [/it]]
#5
维天2008-11-06 06:03
谢谢前辈给解答,我明白啦…哈哈…
#6
维天2008-11-06 06:05
我认为应该执行到pop ax处!
#7
ONEPROBLEM2008-11-06 07:24
呵呵~~这道题有意思.
只要留意栈的变化,是不难找出答案的.
停在CALL 0200 指令上.
#8
cnhanxiao2008-11-06 08:11
7楼大版主正解:)

我这段程序写的不理想,应该再使劲绕点圈子。。。
#9
zklhp2008-11-06 08:38
xxxx:010D E8FD00        CAll    0200

cnhanxiao大哥真是厉害呀……
1