无条件转移指令JMP $+2作用是什么?其转移地址是多少?(会采纳!)
不同的内核略有不同。
MCS51这样的复杂指令集系统,根据转移的范围不同需要的周期数也不同。比如LJMP需要3周期,SJMP只需要1个周期。
ARM这类的精简指令集通常只需要1个周期(ARM并没有JMP而是B、BX、BL)
每个周期完成的工作就更复杂了,执行一条指令需要取址、译码、执行。流水线级数不同完成的功能不同。BL、BX、B完成的功能也不同。从内部看不同内核版本总线不同,比如ARM是I-CODE与I-DATA分开。C51是公用总线,有没有MMU/MPU也不同。
除非限定内核否则没办法回答。
控制转移指令通过改变CS:IP来控制程序的执行流程。这类指令包括无条件转移指令、条件转移指令、循环指令、子程序调用和返回指令以及中断和中断返回指令。
⑴ 无条件转移
JMP 跳转
⑵ 条件转移
JZ/JNZ 结果为零/不为零则转移
JS/JNS 结果为负/为正则转移
JO/JNO 溢出/不溢出则转移
JP/JNP 奇偶位为1/为0则转移
JB/JNB 低于/不低于则转移
JBE/JNBE 低于等于/高于则转移
JL/JNL 小于/不小于则转移
JLE/JNLE 小于等于/大于则转移
JCXZ CX为零则转移
⑶ 循环指令
LOOP 循环
LOOPZ/LOOPE 为零/相等时循环
LOOPNZ/LOOPNE 不为零/不等时循环
⑷ 子程序调用与返回
CALL 调用
RET 返回
⑸ 中断及中断返回
INT 中断
INTO 溢出则中断
IRET 中断返回
程序中指令的执行顺序是由CS:IP来决定的,程序转移类指令可改变IP或CS、IP的内容,从而控制指令的执行顺序,实现指令转移、程序调用等功能。
1 无条件转移指令
JMP指令控制程序无条件地跳转到目的单元,使用JMP指令可有三种格式:
⑴ JMP SHORT label 短转移(short jump)
⑵ JMP NEAR PTR label 近转移(near jump)
● JMP label 直接转移(direct jump)
● JMP reg 寄存器间接转移(register indirect jump)
● JMP WORD PTR OPR 存储器间接转移(memory indirect jump)
⑶ JMP FAR PTR label 远转移(far jump)
短转移的目标地址(或称转向地址)相对于当前IP值的位移量在-128至+127字节之间,当前IP值是指JMP指令的下一条指令的地址(如图3.11所示)。对短转移JMP,机器指令的第一个字节为操作码EB,第二个字节为位移量00~FF,这是一个带符号的补码数。转向地址的计算方法为:(IP)当前+8位位移量。操作符SHORT指示汇编程序将JMP指令汇编成一个2字节指令。
⑴ JMP SHORT label 短转移(short jump)
执行操作:(IP) ← (IP)当前+8位位移量
短转移示意图
⑵ JMP NEAR PTR label 近转移(near jump)
近转移是JMP指令的缺省格式,可以写为"JMP label"。它可在当前代码段内转移,机器指令的操作码是E9,位移量是16位的带符号补码数。指令中的转向地址可以是直接寻址方式、寄存器寻址方式、寄存器间接方式和存储器寻址方式。
● JMP label 直接转移(direct jump)
执行操作:(IP) ← OFFSET label = (IP)当前+16位位移量
转移的目标地址在指令中可直接使用符号地址,由于位移量为16位,它的转移范围应是-32768至+32767,也就是说,近转移指令可以转移到段内的任一个位置。
● JMP reg 寄存器间接转移(register indirect jump)
执行操作:(IP) ← (reg)
转移的目标地址在寄存器中,例如指令"JMP BX"执行的结果,将BX的内容送给IP。
● JMP WORD PTR OPR 存储器间接转移(memory indirect jump)
执行操作:(IP) ← (PA+1,PA)
存储器的物理地址PA由指令中的寻址方式确定,JMP指令执行的结果,把PA单元的字内容送到IP寄存器中。例如"JMP WORD PTR [DI]",物理地址PA = (DS)×24+(DI),指令执行的结果是(IP)= (PA+1,PA)。
⑶ JMP FAR PTR label 远转移(far jump)
执行操作:(IP) ← label的段内偏移地址
(CS) ← label所在段的段地址
远转移实现的是段间的跳转,即从当前代码段跳转到另一个代码段中,这意味着指令执行后,不仅要改变IP的值,CS也会得到一个新的段地址。在汇编指令中,远转移的目标地址也可以使用除立即寻址方式外的任何寻址方式来表示。
2 条件转移指令(conditional jump)
条件转移指令是在满足了规定的条件后才控制程序转移的一类指令,8086的条件转移指令总结在表3.4中。
所有条件转移指令都是短转移指令,转移的目标地址必须在当前IP地址的-128至+127字节范围之内,因此条件转移指令是2字节指令。
计算转向地址的方法和无条件短转移指令是一样的,看例3.40的反汇编代码。
例3.40程序中的"JNZ AGAIN"汇编成"JNZ 000D",000D是标号AGAIN的地址,指令"JNZ 000D"的机器代码是75FA,75是操作码,FA是位移量。当CPU读取JNZ指令后,IP寄存器自动加2(JNZ的指令长度)指向了下一条指令(MOV),此时IP的当前值是0013。计算转向地址时,(IP)当前+位移量 = 0013+FA = 0013+FFFA = 000D,这正是AGAIN的偏移地址。实际上FA是-6的补码,8位的FA与16位的0013相加时,FA符号扩展成为FFFA,相加的加结果为000D。
表3.4 条件转移指令 分类指 令转 移 条 件说 明
(Ⅰ)JZ/JEZF=1为零/相等, 则转移
JNZ/JNEZF=0不为零/不相等, 则转移
JSSF=1为负, 则转移
JNSSF=0为正, 则转移
JOOF=1溢出, 则转移
JNOOF=0不溢出, 则转移
JPPF=1奇偶位为1, 则转移
JNPPF=0奇偶位为0, 则转移
JCCF=1进位位为1, 则转移
JNCCF=0进位位为0, 则转移
(Ⅱ)JB/JNAE/JCCF=1低于/不高于等于, 则转移
JNB/JAE/JNCCF=0不低于/高于等于, 则转移
JBE/JNA(CF ZF)=1低于等于/不高于, 则转移
JNBE/JA(CF ZF)=0不低于等于/高于, 则转移
(Ⅲ)JL/JNGE(SF OF)=1小于/不大于等于, 则转移
JNL/JGE(SF OF)=0不小于/大于等于, 则转移
JLE/JNG((SF OF) ZF)=1小于等于/不大于, 则转移
JNLE/JG((SF OF) ZF)=0不小于等于/大于, 则转移
(Ⅳ)JCXZ(CX)=0CX的内容为0, 则转移
注: (Ⅰ)根据条件码的值转移 (Ⅱ)比较两个无符号数,根据比较的结果转移
(Ⅲ)比较两个带符号数,根据比较的结果转移 (Ⅳ)根据CX寄存器的值转移
例
1050:0000 B86610 MOV AX,1040
1050:0003 8ED8 MOV DS,AX
1050:0005 B90500 MOV CX,0005
1050:0008 BB0000 MOV BX,0000
1050:000D 0207 AGAIN: ADD AL,[BX]
1050:000F 43 INC BX
1050:0010 49 DEC CX
1050:0011 75FA JNZ 000D
1050:0013 A20500 MOV [0005],AL
1050:0016 B44C MOV AH,4C
1050:0018 CD21 INT 21
例 假设程序进行两个带符号数的比较,并根据比较结果转移,其中(AL)=80H,(BL)=01,请指出下面 两组指令的转向地址。
⑴ CMP AL,BL ⑵ CMP AL,BL
JL XY JB XY
答:⑴ 转向目标地址XY;⑵不能实现转移。
执行CMP指令时,(AL)-(BL)=80-01=7F,条件码设置为:SF=0,OF=1,CF=0。执行JL指令时,测试转移条件:SFOF = 0 1 =1,说明满足(AL)<(BL)的转移条件,因此,(IP)←XY的偏移地址,程序即转移到XY单元执行新的指令。
JB指令的转移条件为CF=1,而CMP的执行结果使CF=0,所以不能引起转移。
$代表当前地址,所以JMP $+2就是转移到当前指令地址+2的地方
"JMP @A+DPTR"这条指令怎么用?
长跳转基址加变址间接转移指令,用此指令可实现散转,所以又叫散转指令。你可以给DPTR和A赋值,然后执行指令的时候,程序就跳转到A+DPTR的单元继续执行。称为散转指令,是因为A可以赋值,比较灵活,可以根据A的条件转到相应的程序处执行,比较灵活。 这个对刚学的人不推荐使用哈 ...
汇编语言中,无条件转移指令JMP,其中的JMP NEAR LABEL和JMP FAR LABEL还...
JMP NEAR LABEL --- 段内直接转移 JMP FAR LABEL --- 段间直接转移 JMP LABEL ---短距离(往前128字节、往后127字节)内直接转移
汇编中的术语
je:若相等,则转 jnz:若不相等或不等于0,则转 jmp:无条件转移 call:调用子程序 条件转移指令(Transfer Conditionally)条件转移指令是一组极其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段。微机的指令系统提供了丰富的条件转移...
51单片机短转移指令是什么?
SJMP指令:短跳转指令,用于将程序跳转到相对偏移量的16位地址,指令格式为“SJMP rel”,其中rel表示跳转目标的相对偏移量。AJMP指令:相对跳转指令,用于将程序跳转到相对偏移量的11位地址,指令格式为“AJMP rel”,其中rel表示跳转目标的相对偏移量。JMP指令:无条件跳转指令,用于将程序跳转到指定的16...
无条件转移指令和有条件转移指令有什么异同
无条件转移指令就是想跳就跳转--->jmp 有条件转移指令就是要经过同意或达到要求才能跳 汇编命令里J开头的!~!都是这个意思除了jmp
ARM指令集中的跳转与汇编语言中的跳转有什么区别
ARM指令集的跳转指令就是汇编指令。ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:B 跳转指令 BL 带返回的跳转指令 BLX 带返回和状态切换的。控制转移指令:用来控制程序的执行流程。汇编语言中的跳转 控制转移指令类型 指 令 说 明 无条件转移指令 JMP...
ARM指令集中的跳转与汇编语言中的跳转有什么区别
ARM指令集的跳转指令就是汇编指令。ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:B 跳转指令 BL 带返回的跳转指令 BLX 带返回和状态切换的。控制转移指令:用来控制程序的执行流程。汇编语言中的跳转 控制转移指令类型 指 令 说 明 无条件转移指令 JMP...
汇编语言指令大全,要详细的!!!
逻辑指令: AND、OR、XOR、NOT和TEST进行位逻辑运算,SHL、SAL、SHR、SAR、ROL、ROR等实现移位操作。串处理指令: MOVS、CMPS用于字符串传输和比较,SCAS用于串扫描,LODS和STOS则用于数据在内存中的加载和存储。控制转移: JMP实现无条件转移,条件转移如JZ、JS、JNS等,还有循环指令LOOP和子程序调用CALL、...
读书笔记 单片机原理3.5 控制转移和位操作指令
短距离穿梭(SJMP)<\/:在±126~+129的范围内,只需两次加1操作,rel值与当前地址相加,便能轻盈地跳跃到目标地址。灵活变址(JMP @A+DPTR)<\/:单字节指令,通过累加器A和DPTR的协同工作,动态生成目标地址,体现数据指针的强大功能。条件转移的精确判断A的零值判别(JZ\/JNZ)<\/:基于累加器A的值,...
条件转移指令如何实现段间转移?
<4> 段间间接转移指令:JMP OPRD其中的OPRD为存储器双字操作数.段间间接转 移只能通过存储器操作数来实现.例如:指令JMP DWORD PTR[BX],其操作数是一个双字类型的存储器操作数, 它指向数据段DS,段内偏移为(BX).从这个DS:BX开始的前两个字节中,存放 了目标地址的段内偏移值,后两个字节...
巫费尤尼: 这是8086汇编 $代表当前地址,所以JMP $+2就是转移到当前指令地址+2的地方
汉阳区15712059523: 请问西门子PLC无条件跳转jmp指令的意义? - ?
巫费尤尼: 1.一般都会在JMP前加一个限制条件,当条件成立时,才会去执行jmp指令,通常用在需要做某些判断的时候,比如,当某个值大于五十时,就不执行JMP后面的指令,这当然是有意义的.就像工业现场,比如当某个设备的温度值大于五十度,我们就JMP,因为可能JMP后面的指令会让温度继续上升,引发故障.2.有无条件跳转指令的使用,完全是看个人喜好,方便程度上其实差不多,就是多提供一个方式而已,很多PLC指令都几乎没有用处的,不用纠结这个.3.例子在1里头说了.
汉阳区15712059523: 汇编指令 jmp cx jcxz $+2 分别表示什么意思? - ?
巫费尤尼: cx中存放一个相对地址,jmp cx就是跳到以下一条指令的开始加上cx中的值的位置处,jcxz $+2 如果cx为0,就跳过下一条指令.
汉阳区15712059523: 汇编指令JMP是什么意思? - ?
巫费尤尼: 含义 无条件的转移到指令指定的地址去执行从该地址开始的命令.指令必须指定转移的目标地址(或称转向地址). JMP指令不影响条件码. 计算机汇编语言中的一种跳转指令.当需要分支程序时,散转程序有时可以帮我们实现.使用指令...
汉阳区15712059523: 汇编里的无条件转移指令转移的是什么内容 - ?
巫费尤尼: 汇编里的“无条件转移”指的是强制让程序从内存的某地址开始运行.无条件转移指令只是一条让程序运行的路径发生改变的汇编命令.转移的是程序运行的地址.
汉阳区15712059523: 微机原理jmp指令应用 - ?
巫费尤尼: JMP 是无条件转移指令,例如以下程序段中,JMP FINISH 指令的功能是转移到标号FINISH处,执行INT 3指令.…… START: MOV AX, SEG DATA MOV DS, AX LEA SI, DATA MOV AL, [SI]MOV DL, [SI+1] CMP DL, AL JA MAX2 MAX1: MOV MAX, AL JMP FINISH MAX2: MOV MAX, DL FINISH: INT 3 ……
汉阳区15712059523: 转移指令的主要作用 是什么? ?
巫费尤尼: 转移指令是指不按程序的语句流程执行的指令,如跳转指令,call指令、jmp指令等.这类指令包括无条件转移指令,条件转换指令,测试CX/ECX值为0转移指令,通过它们可以实现程序的分支转移.转移指令可以使用与转移地址有关的寻址方式形成转向地址,具体适用性视不同指令而有所区别.
汉阳区15712059523: 单片机汇编语言中无条件转移指令有哪些? - ?
巫费尤尼: 绝对转移指令:ajmp 相对转移指令:sjmp 长转移指令:ljmp 当然最重要的还是间接转移指令jmp了.
汉阳区15712059523: 跳转指令与对应的跳转目的地址应在什么逻辑块内 - ?
巫费尤尼: 无条件转移指令JMP 格式: JMP OPRD 功能: JMP指令将无条件地控制程序转移到目的地址去执行.当目的地址仍在同一个代码段内,称为段内转移;当目标地址不在同一个代码段内,则称为段间转移.这两种情况都将产生不同的指令代码,以便能正确地生成目的
汉阳区15712059523: 汇编指令 jmp cx jcxz $+2 分别表示什么意思??
巫费尤尼: jmp cx表示程序转移到以cx的值为偏移地址的位置执行 jcxz $+2表示如果cx=0程序转移到当前地址+2的位置执行,否则,顺序执行下一条指令