36 控制转移类指令

合集下载

转移指令及位操作指令

转移指令及位操作指令

7
• 例:利用子程序调用编写令20H-2AH, 30H-3EH,40H-4FH 三个区域清零的程 序
可编辑版
8
ORG 1000H
MOV SP,#70H
MOV R0,#20H
MOV R2,#0BH
ACALL ZERO
MOV R0,#30H
MOV R2,#0FH
ACALL ZERO
MOV R0,#40H
• 1、已知某单片机监控程序始址为A080H, 问用什么办法是单片机开机后自动执行 监控程序
• 2、已知MA=0500H,问8051单片机执行 如下指令

MOV SP ,#70H
• MA:LCALL 8192H
• 堆栈中数据如何变化,PC中内容是什么
可编辑版
11
• 3、已知外部RAM中以3000H为始址的数 据块以零为结束标志,试编程将之传送 到以30H为始址的内部RAM区
LCALL 标号 ;标号表示子程序首地址 ACALL 标号 来调用子程序。
可编辑版
5
(2)返回指令 (2条)
子程序执行完后必须回到主程序,如何返
回呢?只要执行一条返回指令就可以了。
RET
;子程序返回指令
RETI
;中断子程序返回指令
两者不能互换使用。
可编辑版
6
4. 空操作指令(1条)
NOP
可编辑版
可编辑版
17
(2)判位直接寻址位转移指令 JB bit,rel JNB bit,rel JBC bit,rel 第一条指令:如果指定的(bit)=1,则转移,否 则顺序执行,第二条指令功能相反。
同样理解:JB bit,标号 第三条指令是如果指定的(bit)=1,则转移, 并把该位清0,否则顺序执行。

控制转移类指令.ppt

控制转移类指令.ppt
无条件地转移到其他代码段内标号所指定的目标地址处。 操作: 如果标号为其它代码段内定义的标号,则
(IP)←标号的偏移地址 (CS)←标号的段地址 如果标号为本代码段内定义的标号,则该指令同JMP NEAR PTR lable。 说明: ① 也可直接使用数值表达式来给出目标地址,这时可省略FAR属性说明。 JMP 2000H:0100H ② 机器指令代码直接提供了转向地址的段地址和偏移地址,属于直接转 移方式。 ③ 使用绝对地址来表示转移目标地址,因此属于绝对转移。
(2)条件转移指令分为以下四类。
① 单标志位测试转移指令 通过测试单个标志位的状态来决定是否转移的指令。 例:
ADD AX,BX JC LAB1 ;如果 CF = 1,转至 LAB1
CMP CX,DX JE LAB2 ;如果 ZF = 1,转至 LAB2
② 无符号数比较转移指令
该类指令将参与比较的两个数据看作是无符号数,并根据比较运算后 标志位CF和ZF的状态来判断它们之间的大小关系,从而决定是否转移。 例:
说明:
① 8位位移量是带符号数,因此跳转的范围为( -128 --- +127 )。
② 指令中的转移目标地址用相对于当前IP所指向指令的相对位移量来 表示,因此属于相对转移。
例1:
0000H EB 04 0002H B0 01 0004H B3 02 0006H B1 03

例2:
0000H B0 01 0002H B3 02 0004H B1 03 0006H EB F8 0008H B2 04
JBE/JNA 标 CF=1或ZF=1 号
JG/JNLE 标 SF⊕OF=0且

ZF=0
带符号数 比较转移
JGE/JNL 号

控制转移指令

控制转移指令
下面是一个含有无条件转移指令的简单程序的列表文件,它是由汇编语言源程序翻译后产生的。即:
;行号偏移量机器码程序
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

程序控制指令

程序控制指令

中断 溢出时中断
INT 中断类型 INTO
中断返回
IRET 5
1.转移指令
➢转移指令的实质: 改变IP(或者CS和IP)的内容。
➢对标志位flags的影响: 所有转移指令不会影响标志位flags。
➢分类: 分为无条件转移和条件转移两种。
2020/2/17
6
(1) 无条件转移指令 - JMP
本指令无条件转移到指定的目标地址, 以执行 从该地址开始的程序段。根据设置CS、IP的方法 ,JMP指令可实现短\近\远距离跳转, 指令分成4 种情况。
由于是段内转移,故转移后CS内容保持不变
2020/2/17
8
无条件段内转移
• 直接转移: JMP Lable
近地址标号

• 转移目标地址:
位移量
JMP Lable




段基地址CS不变;
CS : IP=Label
偏移地址IP=当前IP+位移量(16位)

2020/2/17
9
②段内间接转移
转移的目标地址由寄存器或存储单元的 内容给出。
例中的DWORD PTR表示转移地址是一个 双字。
2020/2/17
15
无条件段间转移
• 间接转移: JMP DWORD PTR[BX]
2020/2/17
CS : IP
[BX]
IP CS

JMP

指令码

XXH XXH XXH XXH

代 码 段 1
代 码 段 2
数 据 段
16
JMP DWORD PTR [SI]的机器码
2020/2/17

串操作、控制转移指令

串操作、控制转移指令

•STOS指令不影响标志位。
机械工程学院
14
微机与接口技术
例, 将字符“#”装入以AREA为首地址的100个字节中 LEA MOV MOV CLD REP HLT DI, AREA CX, 100 AL, ‘ #’ STOSB
机械工程学院
15
微机与接口技术 例,设有一长度为100的数据块,首地址为BLOCK,把其中的正数放 到首地址为PLUS_DATA的缓冲区,负数放到首地址为MINUS_DATA 的缓冲区 START: LEA SI, BLOCK LEA DI, PLUS_DATA LEA BX, MINUS_DATA MOV CX, 100 CLD LODSB TEST AL, 80H JNZ MIUS ;ZF=0,负数 STOSB ;ZF=1,正数 JMP AGAIN XCHG BX, DI STOSB XCHG BX, DI DEC CX JNZ GOON HLT
机械工程学院
17
GOON:
OK: DONE:
微机与接口技术
串操作指令一览表
指令 重复前缀 REP REPE/ REPNE REPE/ REPNE 操作数 目标,源 源,目标 目标 源 目标 地址指针 寄存器 ES:DI,DS:SI DS:SI ,ES:DI 6个状态 标志 ES:DI DS:SI ES:DI 不影响 不影响 影响的 标志位 不影响
机械工程学院
6
微机与接口技术
例,将数据段中首地址为BUFFER1的200个字节传送到附 加段首地址为BUFFER2的内存区中。可以用以下两种形式 实现:
法1: LEA LEA MOV CLD MOVS DEC JNZ HLT SI, BUFFER1 DI, BUFFER2 CX, 200 BYTE PTR[DI],[SI] CX AGAIN 法2: LEA LEA MOV CLD REP HLT

控制转移类指令

控制转移类指令

控制转移类指令✧用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.✧控制转移类指令通过改变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课件(全)

控制转移类指令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范围内。

微机原理6_控制转移类指令

微机原理6_控制转移类指令

还可用SAR、ROR和RCR指令
;将AX的最低位D0移进CF
jnc even
;标志CF=0,即D0=0:AX内是偶数,程序转移
add ax,1
;标志CF=1,即D0=1:AX内的奇数,加1
even: shr ax,1
;AX←AX÷2
第2章:例题2.22解答3 用JNS指令实现
mov bx,ax
ror bx,1
done: ……
第2章:例2.24 偶校验
;对DL寄存器中8位数据进行偶校验 ;校验位存入CF标志
2:将最低位用移位指令移至进位标志,判断进位标志是0, AX就是偶数;否则,为奇数
3:将最低位用移位指令移至最高位(符号位),判断符号 标志是0,AX就是偶数;否则,为奇数
第2章:例题2.22解答1 用JZ指令实现
test ax,01h
;测试AX的最低位D0(不用AND指令,以免改变AX)
jz even
第2章:无条件转移指令JMP(jump)
JMP label
;段内转移、相对寻址
;IP←IP+位移量
演示
JMP r16/m16
;段内转移、间接寻址
;IP←r16/m16
演示 演示
JMP far ptr label ;段间转移、直接寻址
;IP←偏移地址,CS←段地址
演示
JMP far ptr mem ;段间转移,间接寻址
第2章:例题2.22
题目:将AX中存放的无符号数除以2,如果是奇 数则加1后除以2 问题:如何判断AX中的数据是奇数还是偶数? 解答:判断AX最低位是“0”(偶数),还是“1” (奇数)。可以用位操作类指令
1:用逻辑与指令将除最低位外的其他位变成0,保留最低位 不变。判断这个数据是0,AX就是偶数;否则,为奇数
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《单片机原理与应用》教学课件
源程序: ORG 0000H ;程序开始
START: MOV P0 , #00H
;P0输出00H,LED全亮
MOV P0 , #0FFH ;P0输出FFH,LED全灭 SJMP START END ;循环 ;结束
《单片机原理与应用》教学课件
源程序:
ORG 0000H START: MOV P0 , #00H ;程序开始 ;P0输出00H,LED全亮
LJMP
之和所指向的64K程序范围内跳转
《单片机原理及应用》教学课件
2、条件转移:JZ,JNZ,CJNE,DJNZ——8条 JZ rel JNZ rel ——根据Acc的内容是否为0决定是否跳转 DJNZ direct,rel DJNZ Rn, rel ——将direct(或Rn)里的内容减 1,结果不等
DE3: DE4:
《单片机原理与应用》教学课件
四、按键控制LED发光二极管亮灭编程
分析: 取P3端口的数据给P0端口。
《单片机原理与应用》教学课件
源程序: ORG 0000H ;程序开始
START: MOV P3 , #0FFH ;端口输入,先输出高电平
MOV P0 , P3 SJMP START END ;读取P3端口数据给P0端口 ; 循环 ;结束
《单片机原理及应用》教学课件
二、主要指令重点分析
(1)SJMP无条件转移指令
控制程序执行的方向,使程序从一个位置转到另一个 位置去执行。 指令形式:SJMP 指令标号
指令功能:指令标号用于标记指令的位置 。 执行本指令,程序将转到指令标
号对应的位置去执行。
注意:执行本指令不需要条件约束,一经执 行即会发生程序转移。
控制转移类指令
《单片机原理与应Βιβλιοθήκη 》教学课件一、指令介绍此类指令改变程序的执行顺序——改变当前PC值 无条件转移: (LJMP,AJMP,SJMP,JMP——4条) 条件转移(判断跳转): (JZ,JNZ,CJNE,DJNZ——8条) 子程序调用及返回: (LCALL,ACALL,RET,RETI——4条) 空操作: (NOP——1条) “耗时”一个机器周期。 do nothing!
《单片机原理与应用》教学课件
例如: ORG 0000H ;程序开始
MOV
DE1: DE2: MOV
R7 , #200
R6 , #200
;(R7)=200
;(R6)=200 ;(R6)-1不为0跳转至DE2 ;(R7)-1不为0跳转至DE1 ;结束
DJNZ R6 , DE2 DJNZ R7 , DE1 END
本段程序实现延时。
《单片机原理与应用》教学课件
例如: ORG START: MOV MOV MOV 0000H A ,#20H ;程序开始 ;(A)=20H
P1,#0FFH ;(P1)=FFH A ,P1 ;(A)=(P1),
SJMP START
END
;跳转至START位置
;结束
程序无限循环执行。
《单片机原理与应用》教学课件
《单片机原理与应用》教学课件
例如: ORG 0000H ;程序开始
MOV STR: MOV DJNZ MOV NOP END
R2 , #6 A , #20H ;(A)=20H R2 , STR ;(R2)-1不为0跳转至STR A , #0ABH ;(A)=ABH
;结束
《单片机原理与应用》教学课件
《单片机原理及应用》教学课件
1、无条件转移:LJMP,AJMP,SJMP,JMP——4条
addr16 长跳转指令 ——可在64K范围内跳转 AJMP addr11 绝对跳转指令 ——可在指令所在的2K范围内跳转 SJMP rel 相对跳转指令 ——可在当前PC-128与+127范围内跳转 JMP @A+DPTR 间接长跳转指令 ——可在以DPTR为基址 + A为偏移量
《单片机原理及应用》教学课件
3、子程序调用及返回: (LCALL,ACALL,RET,RETI——4条)
LCALL addr16 子程序长调用指令 ——可在64K范围内调用子程序 ACALL addr11 子程序绝对调用指令 ——可在指令所在的2K范围内调用子程序
RET 子程序返回指令 ——子程序结束并返回调用的下一条指令 RETI 中断服务子程序返回指令 ——中断结束/返回被打断处的下一条指令
《单片机原理与应用》教学课件
(3)NOP 空操作指令
指令功能:不执行任何操作,具有执行时间,
通常用来实现延时功能。
例如: ORG NOP NOP 0000H ;程序开始
NOP
END ;结束
《单片机原理与应用》教学课件
三、LED发光二极管闪烁编程
单片机P0端口引脚接 LED发光二极管电路。 P0.0 — P0.7接D1—D7 输出高电平 — LED灭 输出低电平 — LED亮 编程: 控制LED发光二极 管全亮全灭闪烁。
(2)DJNZ Rn条件转移指令
控制程序执行的方向,使程序从一个地方转到 另一个地方去执行。 指令形式:DJNZ Rn,指令标号
指令功能:Rn指工作寄存器R0-R7。
指令标号用于标记指令的位置 。
(Rn)=(Rn)-1;判断Rn中的数据是否 为零;若(Rn)≠0程序将转到指令标 号对应的位置去执行,若(Rn)=0将 顺序向下执行。 注意:执行本指令控制程序转移是有前提条件 的,条件满足才发生程序转移。
DE1: DE2:
MOV R7,#200 ;(R7)=200 MOV R6,#200 ;(R6)=200 DJNZ R6,DE2 ;(R6)=(R6)-1,(R6)≠0跳转至DE2 DJNZ R7,DE1 ;(R7)=(R7)-1,(R7)≠0跳转至DE1 MOV P0 , #0FFH ;P0输出FFH,LED全灭 MOV R7,#200 ;(R7)=200 MOV R6,#200 ;(R6)=200 DJNZ R6,DE4 ;(R6)=(R6)-1,(R6)≠0跳转至DE2 DJNZ R7,DE3 ;(R7)=(R7)-1,(R7)≠0跳转至DE1 SJMP START END ;循环 ;结束
于0就跳转;等于0则不跳转继续往下走。
《单片机原理及应用》教学课件
CJNE A, #data, rel CJNE A, direct,rel CJNE @Ri,#data, rel CJNE Rn, #data, rel ——将A(或@Ri,或Rn)与#data(或direct)相比
较,其值不相等就跳转;相等则不跳转,继续往 下走。
相关文档
最新文档