3.4.4 控制转移类指令[共3页]
控制转移类指令(17条)
C3
2 2 uF
C1 U1
1nF 19 X TA L1 P 0 .0 /A D 0 P 0 .1 /A D 1 P 0 .2 /A D 2 P 0 .3 /A D 3 P 0 .4 /A D 4 P 0 .5 /A D 5 P 0 .6 /A D 6 P 0 .7 /A D 7 P 2 .0 /A 8 P 2 .1 /A 9 P 2 .2 /A 10 P 2 .3 /A 11 P 2 .4 /A 12 P 2 .5 /A 13 P 2 .6 /A 14 P 2 .7 /A 15 P 3 .0 /R X D P 3 .1 /TX D P 3 .2 /IN T0 P 3 .3 /IN T1 P 3 .4 /T0 P 3 .5 /T1 P 3 .6/W R P 3 .7 /R D 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
控制转移类指令(17条 3.4.4 控制转移类指令(17条) 1. 无条件转移 (4 条)
无条件转移指令是当程序执行到该指令时, 无条件转移指令是当程序执行到该指令时,程序无条 件的转移到指令所提供的地址处执行。 件的转移到指令所提供的地址处执行。无条件转移指 令有长转移、短转移、相对转移和间接转移4条指令。 令有长转移、短转移、相对转移和间接转移4条指令。 AJMP LJMP SJMP JMP addr11 addr16 rel @A+DPTR
补:指令系统的寻址方式
相对寻址 设指令SJMP 54H的机器码 的机器码80H 54H存放在 存放在2000H处,当 设指令 的机器码 存放在 处 执行到该指令时,先从2000H和2001H单元取出指令,PC自动 单元取出指令, 自动 执行到该指令时,先从 和 单元取出指令 变为2002H;再把 的内容与操作数 的内容与操作数54H相加,形成目标地址 相加, 变为 ;再把PC的内容与操作数 相加 2056H,再送回 ,使得程序跳转到 单元继续执行。 ,再送回PC,使得程序跳转到2056H单元继续执行。 单元继续执行
控制转移指令
;行号偏移量机器码程序
1 0000 CODE SEGMENT
2 ASSUME CS:CODE
3 0000 0405 PROG_S:ADD AL, 05H
4 0002 90 NOP
5 0003 EBFB JMP SHORT PROG_S
段内间接转移指令
这类指令转向的16位有效地址存放在一个16位寄存器或字存储单元中
用寄存器间接寻址的段内转移指令,要转向的有效地址存放在寄存器中,执行的操作是寄存器的内容送到IP中
例
JMP BX
若该指令执行前BX=4500H,则指令执行时,将当前IP修改成4500H,程序转到段内偏移地址为4500H处执行
返回地址的IP入栈
由于存放CALL指令的内存首地址为CS:IP=2000:1050H,该指令占3个字节,所以返回地址为2000:1053H,即IP=1053H.于是1053H被推入堆栈
根据当前IP值和位移量DISP计算出新的IP值,作为子程序的入口地址,即:
IP=IP+DISP=1053H+1234H=2287H
中断:INT—中断、INTO—溢出中断、IRET—中断返回
1、无条件转移和过程调用指令
1)JMP无条件转移指令
指令格式:JMP目的
指令功能:使程序无条件转移到指令中指定的目的地址去执行。
这类指令又分为两种类型:
第一种类型:段内转移或近(NEAR)转移,转移指令目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。
JMP DWORD PTR[SI+0125H]
设指令执行前,CS=1200H,IP=05H,DS=2500H,SI=1300H,内存单元(26425H)=4500H,(26427H)=32F0H.而指令中的位移量DISP=0125H,其中高位部分为DISP_H=01H,低位部分DISP_L=25H
控制转移类指令
语音信号及单片机处理
C= 0? N
C= 1? N
Y 跳 转 到 loop1 执 行 下 一 条 指 令
(a) JCC的 执 行 过 程
Y 跳 转 到 loop1 执 行 下 一 条 指 令
(b) JCS的 执 行 过 程
图5.5 指令JCC和JCS的执行过程
第15页
2021年12月12日星期日
…
例5 用JCC指令。 R1=0x0020 R1+=1 JCC loop1 R1=0x00FF
第12页
2021年12月12日星期日
例4 用JNGE指令。 R1=-2 R2=3 CMP R1,R2 JNGE loop1 R2=0x00FF
//赋初值, 分别为有符号数
//比较R1和R2的大小 //R1小于R2(S=1)时跳转到loop1
…
loop1: R1=0x0000
第13页
2021年12月12日星期日
loop1: R1=0x0000
//赋初值 //如果C=0跳转到loop1
第16页
2021年12月12日星期日
…
例6 用JCS指令。 R1=0x0002 R1-=1 JCS loop1 R1=0x00FF
loop1: R1=0x0000
//赋初值 //如果C=1跳转到loop1
第17页
2021年1Байду номын сангаас月12日星期日
3. 其它跳转指令 判C跳转指令JCC 和JCS: JCC loop1 JCS loop1 JCC是以C=0作为判断的标准,决定程序的跳转;JCS 是以 C=1作为判断的标准,决定程序的跳转。 这两条指令的执行过程如图3.5所示。
第14页
2021年12月12日星期日
控制转移类指令
控制转移类指令✧用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.✧控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变说明✧只有中断返回指令(IRET)改变控制标志位✧许多转移指令受状态标志位的影响1.无条件转移指令(JMP 操作数;程序转向label标号指定的地址)◆寻址方式:直接寻址方式转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式◆目标地址范围✓段内(注意转移范围是+ -,即前后都可以转移!当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负)✡段内转移——近转移(near)⏹转移范围用二个字节表达,在当前代码段64KB范围内转移(±32KB范围)⏹不需要更改CS段地址,只要改变IP偏移地址,由16位带符号数给出。
✡段内转移——短转移(short)⏹转移范围用一个字节表达,在当前代码段256B范围内转移(-128~+127范围),只改变IP的值,由8位带符号数给出。
✓段间段间转移——远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址。
段间间接转移指令中,目的地址存放在连续4个存储单元字节中,低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。
注:实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、near ptr或far ptr强制.✌思考:如果转移超过16BIT,怎么办?答:变成段间转移。
JMP 1234H 这个指令对否?JMP 12345678H呢?2、条件转移指令(Jcclable;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行)注意:1.Jcc本身不是一条指令,它是条件转移指令的统称。
控制传送指令包括四种.ppt
助记符 转移条件 助记符 转移条件
JZ/JE JS JO
JP/JPE JC
ZF=1 SF=1 OF=1 PF=1 CF=1
JNZ/JNE JNS JNO
• 根据两个无符号数比较结果转移
JB(JNAE、JC)/JNB(JAE、JNC),JBE(JNA) /JNBE(JA)
• 比较两个带符号数,并根据比较结果转移
JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)
• 测试CX的值为零转移
JCXZ
2、 过程(子程序)调用指令
如果有一些程序段在不同地方反复出现,可以将这些程序 段设计成为过程(子程序)供调用。过程结束,返回调用处。
格式:JMP SHORT OPR
OPR—在汇编语言中使用符号地址
在机器语言中存放8位位移量D8
位移量D8 = 符号地址的偏移地址 – 当前IP的值
执行操作:(IP)←(IP)当前+D8 SHORT 短属性标号
8位位移量D8的范围在(-128 ~ 127)之间,占有一个字节。
该指令共占有两个字节。
EB(操作码)
+127
... ... ... ... JMP SHORT next ... ... ..JMP SHORT TAGER …… TAGER:
标号与控制转移指令在 同一段中,后引用的标号可 以不用SHORT,前引用的 标号必须使用SHORT。
段内直接近转移:
指令在内存中是顺序存放的,分控制和非控制转移指令。 8086/8088 中CS和IP的变化规则: reset复位后,( CS ) = FFFFH,( IP ) = 0
故8088从内存FFFF:0000H处取第一条指令执行, 第一条 指令在内存的ROM区。 非控制转移指令
控制转移类指令ppt课件(全)
(4)CJNE @Ri,#data,rel 该指令功能:若(( Ri ))≥ data,(CY)=0; 若(( Ri ))<data ,CY=1; 若(( Ri ))≠ data,则PC←(PC)+rel,转移; 若(( Ri ))=data,则程序顺序执行.
例:如果(A) ≠ 00H,转移到CX1;如果(R1) ≠ 10H, 转移到CX2;如果(A) ≠(60H),转移到CX3。程序段 如下:
(2)指令长短不一样。LJMP是3字节指令;AJMP、 SJMP是2字节指令;JMP是1字节指令。
(3)指令机器码构成不同。AJMP、LJMP、JMP后跟 的是绝对地址,而SJMP后跟的是相对地址。
(4)地址特点不同。LJMP、AJMP、SJMP的转移目标 地址是固定的,程序执行过程中不变;JMP的转移目 标地址随程序的执行是动态变化的。
1. 长跳转指令 LJMP (3字节) LJMP addr16 ; PC addr16
•执行该指令时, 将目标语句的16位地址addr16装入 PC, 程序无条件转向指定的目标语句执行。 •由于长跳转指令提供的是16位地址,对应64KB的程 序存储器地址空间,所以可跳转到64KB程序存储器 地址空间的任何地方。 •实际应用中长跳转汇编指令写作“LJMP 目标语句 标号”的形式,如“LJMP LOOP”。
• 指令对A、DPTR和标志位均无影响。
注意:以上四条指令结果均不影响程序状态 字寄存器 PSW 。
5.LJMP、AJMP、SJMP、JMP四条无条件转移指令的 区别:
(1)转移范围不一样。LJMP、JMP转移范围是64KB; AJMP转移范围是与当前PC值同一个2KB区间;SJMP 转移范围是相对当前PC值的-128B~+127B范围内。
7--控制转移类指令
例1:
0000H 0002H 0004H 0006H ┇
例2:
EB B0 B3 B1
04 01 02 03
jmp mov mov next:
short next al, 1 bl, 2 mov cl, 3 ┇
0000H B0 0002H B3 0004H B1 0006H EB 0008H B2 ┇
操作: 如果不满足测试条件cc,则该指令不作任何操作。 如果满足测试条件cc,则 (IP)←(IP)+ 8位位移量 其中的8位位移量由机器指令代码提供,其大小由汇编程序按下式计 算得出。 位移量 = 目标地址 - 当前IP值(Jcc指令的下一条指令的地址) 说明: (1)测试条件不同,指令助记符也各不相同,具体见下表所示。
(一)无条件转移指令
(1)段内转移 在同一代码段的范围内进行的转移称为段内转移。此时,CPU只需要修 改IP寄存器的内容。 1)段内直接短转移 格式: JMP SHORT 标号 ;标号表示转移目标地址。 功能: 无条件地转移到由标号所指定的转移目标地址处。 操作: (IP)←(IP)+ 8位位移量 ;8位位移量由汇编程序按照下式计 算得出,并存放在机器指令代码中。 8位位移量 = 转移目标地址 - 当前IP值(JMP指令的下一条指令的地址) 说明: ① 8位位移量是带符号数,因此跳转的范围为( -128 --- +127 )。 ② 指令中的转移目标地址用相对于当前IP所指向指令的相对位移量来 表示,因此属于相对转移。
01 02 03 F8 04
next:
mov mov mov jmp mov
al, 1 bl, 2 cl, 3 short next dl, 4 ┇
2)段内直接近转移
3.3.4控制程序转移类指令
(SP) +1 →SP (PC7~0) →(SP) (SP)+1→(SP) (PC15~8) →(SP) Addr15~0 →(PC)
*指令的操作数是相对地址,rel是一个带符号的偏移字节数,其范
围为-128~+127(00H~7FH对应表示0~+127,80H~FFH对应表 示-128~-1),负数表示反向转移,正数表示正向转移。
*该指令为二字节,执行时先将PC内容加2,再加相对地址,就得到
目 (-2)
问执行后PC值的变化?
PC=2000H+2+07H
例:执行: SJMP 0FAH
SJMP 0EH
ROM内容如下:
当前 (PC)=1FFEH
ROM
1FFAH 1FFBH
80H 0EH
目的地址=1FFEH+02H+0FAH =1FFEH+2H+FFFAH =1FFEH+2-6
PC
1FFEH 1FFFH 200AH
80H 0FAH
=1FFAH
目的地址=1FFAH+02H+0EH
=200AH
§3.3 89C51单片机的指令系统
3.3.4 控制程序转移类指令
<3> 相对转移指令
*在用汇编语言编写程序时,rel经常采用转移目的地址的标号
表示,由汇编程序在汇编过程中自动计算偏移地址,并且填
指令的第二个字节中的相对偏移量。相对偏移量为一个带
符号的8位数,偏移范围为-128~+127字节。
*本指令不改变累加器A内容和影响任何标志位。
§3.3 89C51单片机的指令系统
3.3.4 控制程序转移类指令
控制转移指令
2.条件转移指令 条件转移指令 A判零转移指令(2字节) 判零转移指令( 字节 字节) 判零转移指令 • JZ rel (A)=0,转移;(PC)+2+rel PC ) ,转移; ) (A)≠0,则顺序执行 ) ,则顺序执行;(PC)+2 PC 。 • JNZ rel (A)≠0,转移;(PC)+2+rel PC ) ,转移; ) (A)=0,则顺序执行 ) ,则顺序执行;(PC)+2 PC
变址寻址转移指令: 字节) 变址寻址转移指令: (1字节) 字节 JMP @A+DPTR 根据A中数值的不同 中数值的不同,转向不同的子 根据 中数值的不同 转向不同的子 程序入口. 程序入口
(A)+(DPTR) PC
的值( ),转向相应的处理 例:根据A的值(0~3),转向相应的处理 根据 的值 ), 程序。( 。(LJMP指令 字节) 指令3字节 程序。( 指令 字节) MOV R1,A , RL A ;(A) ;( )*2 ADD A,R1 ;(A) , ;( )*3 MOV DPTR,#TABLE , JMP @A+DPTR TABLE: LJMP LOOP0;转0处理程序 : ; 处理程序 LJMP LOOP1 ; 转1处理程序 处理程序 LJMP LOOP2 ;转2处理程序 处理程序 LJMP LOOP3 ;转3处理程序 处理程序
短转移指令: 字节) 短转移指令: (2字节) 字节 SJMP rel (PC)+2+rel (PC) rel: 8位带符号数补码 位带符号数补码 转移范围: 转移范围 -128(-80H)~+127(7FH)(256B) ( ) ( ) 当前地址(PC)=2000H 例:当前地址 当前地址 执行 SJMP 56H 结果:目标地址 目标地址(PC)=2058H 结果 目标地址
转移指令及位操作指令
C。 MOV P1.0,C ;将C中的状态送到P1.0 ;引脚上去。
2 位变量修改指令(4条)
位清0指令 : CLR C CLR bit 例:CLR P1.0 ;即使P1.0变为0 位置1指令: SETB C SETB bit 例:SETB P1.0 ;使P.0变为1 位取反指令: CPL C CPL bit
MOV A, M1 CJNE A, M2,LOOP LOOP: JNC LOOP1 MOV A,M2 LOOP1:MOV MAX,A
例2:已知外部RAM以2000H开始有一个数 据缓冲区,该缓冲区中数据以回车符 (ASCII码为0DH)为结束标志,试编一 程序把正数送入片内RAM以30H为起始地 址的正数区,把负数送入片内RAM以50H 为起始地址的负数区。(假设输入数据不 超过32个)
控制转移指令
无条件转移指令:
单击此处添加正文,文字是您思想的提炼,为了演示发布的良好效果,请言简意赅地阐述您的观点。您的内容已经简明扼要,字 字珠玑,但信息却千丝万缕、错综复杂,需要用更多的文字来表述;但请您尽可能提炼思想的精髓,否则容易造成观者的阅读压 力,适得其反。正如我们都希望改变世界,希望给别人带去光明,但更多时候我们只需要播下一颗种子,自然有微风吹拂,雨露 滋养。恰如其分地表达观点,往往事半功倍。当您的内容到达这个限度时,或许已经不纯粹作用于演示,极大可能运用于阅读领 域;无论是传播观点、知识分享还是汇报工作,内容的详尽固然重要,但请一定注意信息框架的清晰,这样才能使内容层次分明, 页面简洁易读。如果您的内容确实非常重要又难以精简,也请使用分段处理,对内容进行简单的梳理和提炼,这样会使逻辑框架 相对清晰。
添加标题
控制转移指令
试着汇编下列源程序,如某条通过或无法通过汇编, ① 试着汇编下列源程序,如某条通过或无法通过汇编,根 据汇编信息窗口的提示,请逐条说明具体理由: 据汇编信息窗口的提示,请逐条说明具体理由: ORG 1000H LJMP 1900H AJMP 1900H AJMP 1100H SJMP 1100H SJMP $ END 实训要点: 实训要点: 1、观察每条指令在ROM中的存放地址。 、观察每条指令在 中的存放地址。 中的存放地址 2、计算目的地址和当前PC指针之间的距离。 、计算目的地址和当前 指针之间的距离。 指针之间的距离 3、比较三种指令之间的差异。 、比较三种指令之间的差异。
MOV DPTR,#TAB MOV A,COUT RL A JMP @A+DPTR ORG 1000H
TAB:
AJMP ZERO AJMP ONE
2、条件转移 、
反复单步执行下列程序段,结合A的内容 观察JNZ L1的 的内容, ①反复单步执行下列程序段,结合 的内容,观察 的 执行情况,并看该指令的下一条指令执行后, 窗口 窗口P1值的变 执行情况,并看该指令的下一条指令执行后,I/O窗口 值的变 化情况,说明该程序的功能。 化情况,说明该程序的功能。 START: L0: MOV A,#0 , CPL A JNZ L1 MOV P1,#00h SJMP L2 L1: L2: MOV P1,#0FFh SJMP L0 End
ROM地址 ROM地址 目的地址 是否出范围
例如:ORG 1000H AJMP 1900H 当前地址=1000H 当前PC=1002H(AJMP是2字节指令) 目的地址=1900H 1、高5位地址比较法 当前PC高5位=00010B 目的地址高5位=00011B
结论:不一致,因此跳转出范围。 2、范围比较法 当前PC的跳转的2K范围为 PC高5位+地址低11位(0~7FFH) 最小地址=00010 00000000000B=1000H 最大地址=00010 11111111111B=17FFH
控制转移类指令PPT课件
控制转移类指令
微机原理
JMP —— 无条件转移指令
• 段间直接远转移
JMP FAR LABEL ; LABEL 为 CS目的:IP目的
• 段间间接远转移
JMP DWORD [BX] ; CS目的:IP目的 在地址 [BX] 中
注:段间转移方式 —— CS变、IP变
当前CS=210×01H6 21000H
控制转移类指令
微机原理
JXX指令与状态标志位 —— ZF、CF
•与ZF有关的条件转移指令
JE/JZ —— 两数相等/两数相减不为零(ZF = 0) JNE/JNZ —— 两数有等/两数相减为零(ZF = 1)
•与CF有关的条件转移指令
JAE/JNB —— 高于或等于/不低于(CF = 0) JNC —— 无进位/无借位(CF = 0) JB/JNAE —— 低于/不高于也不等于(CF = 1) JC —— 有进位/有借位(CF = 1)
微机原理
代码段1
当前IP =1500H
JMP 0C 02 00 65
转移目标的偏移地址 转移目标的段地址
新CS=6500H
×16 65000H
代码段2
新IP = 020CH
转移至此
…
控制转移类指令
微机原理
段内间接转移与段间间接远转移讨论
• JMP [BX] ;指令错误,未确定[BX]中的数据类型
段内直接短转移 —— rel8
JMP SHOR LABEL
错误的 rel8
注:rel8 < 80H
正确的 rel8
IP目的 ← IP当前 + rel8 LABEL IP目的 ← IP源 + rel8 + 2
控制转移类指令
13
(2)RET imm16指令
带立即数的返回指令,中的16位立即数称为弹出值,RET指令 在完成返回操作后,还须作SP←SP+imm16,即删除栈中 imm16个字节的内容。
例:下列程序段表示由于在RET指令中规定了弹出值,使控制 从子程序返回后栈顶位置恢复到正常状态。
;主程序 MOV AX,N1 PUSH AX MOV AX,N2 PUSH AX CALL PROG_A MOV SUM,AX
例: JMP EBX
;段内转移,EIP=EBX
JMP FWORD PTR [EBX]
;段间转移,目标地址为[EBX]指向的48位虚拟地址,
;CS=其中的高16位,EIP=其中的低32位
2009年6月2日星期二
4
在64位模式下,指令指针为RIP。JMP指令的执行分为相对转移和绝对 转移两种情况:
若为相对转移,则用RIP寄存器与机器码中的位移量字段相加的和 修改RIP值,此时位移量字段不能超过32位,并将其符号扩展为 64位再相加;
指令格式:RET 或 RETimm16 用以返回到调用这个子程序的断点处,作为子程
序或过程的最后一条指令,。 若是段内返回,则把栈顶的一个字弹出至IP,
恢复调用时断点处的偏移地址; 若为段间返回,则除了弹出IP外,还要从当
前栈顶继续弹出一个字到CS,恢复断点处的 段地址。
2009年6月2日星期二
CALL WORD PTR [BX] ;EA在字存储单元中
2009年6月2日星期二
10
⑶段间直接调用(CALL FAR PTR DST)
操作:PUSH CS
;CS入栈
PUSH IP
;IP入栈
(IP)←偏移地址 ;IP由指令中的偏移地址取代
控制转移类指令和位操作指令
控制转移类指令和位操作指令(一).控制转移类指令计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。
控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。
控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。
下面我们将分类介绍。
1.无条件转移指令(4条)LJMP add16 ;add16→PC,无条件跳转到add16地址,可在64KB范围内转移,称为长转移指令AJMP add11 ;add11→PC,无条件转向add11地址,在2KB范围内转移SJMP rel ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号数,范围-128~127,即可向后跳转128,向前可跳转127JMP @A+DPTR ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容相加后形成的新地址例执行指令LJMP 9100H不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。
例程序2000H MOV R0 , #10H ;10H→PC2002H SJMP 03H ;PC+2+rel=2002H+2+03H=2007H→PC┇┇2006H ┇2007H ┇从说明中可见,执行SJMP 03H 指令后,马上跳转到2007H地址执行程序。
2.条件转移指令(8条)条件转移指令是根据某种特定条件转移的指令。
条件满足时转移,条件不满足时则顺序执行下面的指令。
JZ rel ;A=0转向PC+2+rel→PC,A≠0顺序执行JNZ rel ;A≠转向PC+2+rel→PC ,A=0顺序执行CJNE A, direct, rel ;A≠ (direct)转向PC+3+rel→PC且当A>(direct),Cy=0;当A<(direct),Cy=1;否则A=(direct),PC+3→PC即顺序执行CJNE A, #data, rel ;A data P转向PC+3+rel→PC且当A >data,Cy=0;当A <data,Cy=1,;A=data,PC+3→PC顺序执行CJNZ Rn, #data, rel ;Rn≠data转向PC+3+rel→PC;且当Rn>data,Cy=0,当Rn<data,Cy=1;Rn=data,PC+3→PC顺序执行CJNE @Ri,#data, rel ;(Ri) ≠data ,PC+3+rel→PC;且当(Ri)>data ,Cy=0,当(Ri)<data,Cy=1;(Ri)=data, PC+3→PC顺序执行DJNZ Rn, rel ;Rn-1→Rn ,Rn ≠0转向PC+2+rel→PC;Rn=0,PC+2→PC顺序执行DJNZ direct, rel ;(direct)-1→(direct),(direct) ≠0转向 PC+2+rel→PC;(direct)=0 ,PC+2→PC顺序执行注意:1)CJNE类指令借用进位标志Cy作为比较结果的标志位。
控制转移类指令PPT课件
微机原理
高于与大于、低于与小于
• 两无符号数比较称 —— 高于、低于 与标志位CF有关 JA/JNBE、 JAE/JNB、 JB/JNAE、 JBE/JNA Above、Below、Not、Equal
• 两有符号数比较称 —— 大于、小于 与标志位OF,SF有关 JG/JNLE、 JGE/JNL 、 JL/JNGE、 JLE/JNG Greater、Less、Not、Equal
条件转移指令的执行流程
微机原理
条件满足 ?
Y,转移
N
顺序执行下一条指令
目标处执行
控制转移类指令
微机原理
有条件转移指令的英文符号
• Zero ——目的操作数减源操作数为0(ZF = 0) • Equal ——目的操作数等于源操作数(ZF = 0) • Above —— 目的操作数高于源操作数(CF = 0) • Below ——目的操作数低于源操作数(CF = 1) • Greater ——目的操作数大于源操作数(OF ⊕ SF = 0) • Less ——目的操作数小于源操作数(OF ⊕ SF = 1) • Carry —— 两无符号运算后有进位(CF = 1) • Overflow ——两有符号运算后有溢出(OF = 1) • Sign —— 两有符号运算后有符号(SF = 1) • Parity —— 奇偶位为偶(PF = 1) • Not —— 不是
控制转移类指令
微机原理
JXX指令与状态标志位 —— ZF、CF
•与ZF有关的条件转移指令
JE/JZ —— 两数相等/两数相减不为零(ZF = 0) JNE/JNZ —— 两数有等/两数相减为零(ZF = 1)
•与CF有关的条件转移指令
JAE/JNB —— 高于或等于/不低于(CF = 0) JNC —— 无进位/无借位(CF = 0) JB/JNAE —— 低于/不高于也不等于(CF = 1) JC —— 有进位/有借位(CF = 1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
50
ORL
A,direct ;(A)∨(direct)→A
ORL
A,#data ;(A)∨ #data→A
ORL A,@R i;(A)∨((R i))→A,i=0,1
ORL
direct,A ;(direct)∨(A)→direct
ORL direct,#data ;(direct)∨#data→direct
这组指令的功能是在所指定的变量之间执行以位为基础的“逻辑或”操作,结果存到目的变量寄存器或存储器中。
操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址方式。
【例3-10】(P1)=05H,(A)=33H,执行指令
ORL P1,A
运算式为
结果为 (P1)=37H。
10.逻辑异或指令
XRL A, R n;(A)⊕(R n)→A,n=0~7
XRL A,direct ;(A)⊕(direct)→A
XRL A,@ R i;(A)⊕((R i))→A,i=0,1
XRL A,#data ;(A)⊕#data→A
XRL direct,A ;(direct)⊕(A)→direct
XRL direct,#data ;(direct)⊕#data→direct
这组指令的功能是在所指定的变量之间执行以位为基础的“逻辑异或”操作,结果存到目的变量寄存器或存储器中。
操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址方式。
【例3-11】(A)=90H,(R3)=73H,执行指令
XRL A,R3
运算式为
结果为 (A)=E3H。
3.4.4 控制转移类指令
1.长转移指令
LJMP addr16
这条指令执行时,把转移的目的地址,即指令的第二和第三字节分别装入PC指针的高位和低位字节中,无条件地转向addr16指定的目的地址。
目的地址可以是64KB程序存储器地址空间的任何位置。
2.相对转移指令
SJMP rel
这是无条件转移指令,其中rel为相对偏移量,是一单字节的带符号8位二进制补码数,因此它所能实现的程序转移是双向的。
rel如为正,则向地址增大的方向转移;rel如为负,则向地00000101
00110011
00110111
∨)
11100011
10010000
01110011
⊕)。