建材秒知道
登录
建材号 > 水泵 > 正文

微机原理与汇编语言中的指令JMP、CALL的区别

冷酷的小笼包
聪明的滑板
2022-12-23 13:07:56

微机原理与汇编语言中的指令JMP、CALL的区别

最佳答案
贤惠的台灯
如意的蜻蜓
2026-01-25 03:08:48

汇编语言中,JMP是无条件转移指令,CALL是子程序调用指令。

指令JMP、CALL的区别在于,JMP指令控制程序直接跳转到目标地址执行程序,程序总是顺序执行,指令本身无堆栈操作过程。CALL指令跳转到指定目标地址执行子程序,执行完子程序后,会返回CALL指令的下一条指令处执行程序,执行CALL指令有堆栈操作过程。

举例如下:

JMP NEAR NEXT跳转到NEXT执行程序

......

NEXT: 目标地址,程序将从这里向下执行

......

CALL NEXT调用从地址NEXT开始的子程序

NOP 子程序结束后返回到这里,然后向下继续执行程序

......

NEXT: 子程序目标地址,程序将从这里向下执行

RET 子程序返回指令,子程序执行到此结束,返回CALL指令的下一条指令处

最新回答
调皮的书包
开放的朋友
2026-01-25 03:08:48

LCALL是调用子程序,当子程序执行完后就返回到LCALL指令下一条指令继续执行程序,而子程序是可以多次调用,也可以在任何位置调用。这是从哪里走的,还要返回哪里的。

而JMP是无条件转移指令,转移到某执行程序后就不再返到回原处,是一去不回返的。

如意的钥匙
简单的万宝路
2026-01-25 03:08:48

1、字节不同

SJMP 如果跳转到的标号地址距离当前PC所指的地址小于256字节,用SJMP。

AJMP 如果跳转到的标号地址距离当前PC所指的地址小于2K字节,用AJMP。

LJMP 如果跳转到的标号地址距离当前PC所指的地址小于64K字节,用LJMP。

ACALL是调用的子程序入口地址距离当前PC所指地址需介于0~2K,LCALL是0~64K。  

2、跳转的范围不一样。

AJMP 的范围是11位地址,也就是2K的空间内,占用存储空间2个字节,执行周期24个时钟周。

LJMP 的范围是16位地址,也就是64K的空间内,占用存储空间3个字节,执行周期24个时钟周期。

SJMP 的范围是8位地址,也就是256BIT的空间内,占用存储空间2个字节,执行周期24个时钟周期。

JMP一般配合DPTR使用,存储空间1个字节,执行周期24个时钟周期。一般用于多分枝选择的时候使用,比如按键处理。

ACALL,LCALL和以上说明类似,是调用指令,ACALL占用存储空间2个字节,执行周期24个时钟周期。LCALL占用存储空间3个字节,执行周期24个时钟周期。

扩展资料:

①短程转移(直接短转移)

指令格式:JMP SHORT OPRD

语法格式: JMP 地址标号 ;(IP)←(IP)+8位位移量

指令功能:OPRD为转移地址的标号,指令中的SHORT规定了OPRD为有符号的8位二进制数,OPRD为转移地址的偏移量。该指令将程序执行的顺序转移到由(IP)+OPRD形成的新的程序执行的目标地址,从而实现程序的转移。

转移的目标地址OPRD在指令中可以直接使用标号地址,但要求转移的目标地址的范围只能在JMP指令所处地址的-128~+127字节范围之内,如超出该范围,汇编时出错。

② 近程转移(段内直接转移)

指令格式:JMP NEAR PTR OPRD

语法格式: JMP 地址标号 ;(IP)←(IP)+16位位移量

指令功能:与短程转移的功能和要求相同,不同之处是近程转移的OPRD为有符号的16位二进制数,指令将程序执行的顺序转移到由(IP)+OPRD形成的新的程序执行的目标地址。

转移的目标地址的范围只能在JMP指令所处地址的-32768~+32767字节范围之内,如超出该范围,汇编时出错。使用该指令时NEAR可省略

③段间直接转移(远程转移)

指令格式:JMP FAR PTR OPRD

语法格式: JMP 地址标号 ;(IP)←新的偏移地址, ;(CS)←新的代码段地址

指令功能:指令中用FAR PTR规定了该指令为段间的转移,OPRD为目的地址的标号,目的地址与JMP指令所在地址不在同一段内。执行该指令时要修改CS和IP的内容,将OPRD所在段的段地址送CS中,OPRD的段内偏移地址送IP中。

④ 段内间接转移

指令格式:JMP WORD PTR OPRD

语法格式:JMP reg16/mem ;(IP)←新的偏移地址

指令功能:与短程转移的功能和要求相同,不同之处是段内间接转移的OPRD 可以是除立即数外的任何寄存或存储器寻址方式,转移的目标地址由OPRD的内容确定。

⑤ 段间间接转移

指令格式:JMP DWORD PTR OPRD

语法格式:JMP mem32

指令功能:指令中用DWORD PTR规定了该指令为段间间接转移,OPRD只能是存储器寻址方式。执行该指令时将寻址到的内存单元的第一个字送入IP中,第二个字送入CS中。

参考资料来源:百度百科-JMP (软件)

参考资料来源:百度百科-SJMP

参考资料来源:百度百科-ljmp

参考资料来源:百度百科-AJMP

尊敬的豆芽
雪白的爆米花
2026-01-25 03:08:48

一、程序执行顺序不同

1、LCALL:LCALL是调用子程序,当子程序执行完后就返回到LCALL指令下一条指令继续执行程序

2、JMP:JMP是无条件转移指令,转移到某执行程序后就不再返到回原处,是一去不回返的。

二、程序处理方式不同

1、LCALL:指令在进行流程跳转前会保存返回地址,以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转时,只保存EIP;如果是段间跳转,还保存CS。

2、JMP:进行执行流程的跳转,不会保存返回地址。

三、程序执行过程不同

1、LCALL:执行LCALL命令时,将当前的 IP 或 CS和IP 压入栈中,之后转移到紧跟的标号行地址执行程序。

2、JMP:JMP指令控制程序直接跳转到目标地址执行程序,程序总是顺序执行,指令本身无堆栈操作过程。

鳗鱼寒风
标致的哑铃
2026-01-25 03:08:48
SJMP

如果跳转到的标号地址距离当前PC所指的地址小于256字节,用SJMP

AJMP

如果跳转到的标号地址距离当前PC所指的地址小于2K字节,用AJMP

LJMP

如果跳转到的标号地址距离当前PC所指的地址小于64K字节,用LJMP

ACALL是你调用的子程序入口地址距离当前PC所指地址需介于0~2K,LCALL是0~64K。