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
(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课件(全)
(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_控制转移类指令
还可用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就是偶数;否则,为奇数
控制转移类指令
时,计算前应加上FF,即rel=FF90H(带符号扩展)
( 3)形成转移目标地址,
PC=PC+rel=2002+FF90H
=1F92H,向2000H前转移
解 6: (1)产生当前PC,PC=PC+2=2002H (2)形成转移目标地址,
PC=PC+rel=2002+FFFEH=2000H,
程序在原地踏步。 常写为:SJMP $; $表示0FEH
第3章 MCS-51指令系统
实训3 指令的应用 3.1 简介
3.2 寻址方式
3.3 指令系统
本章小结
习题3
⒌ 循环移位指令(4条)
① 循环左移:RL A 不影响标志位 ② 带Cy循环左移:RLC 影响Cy,P
A
③ 循环右移:RR A 不影响标志位 ④ 带Cy循环右移:RRC 影响Cy,P A
二进制数的特点:左移一位增大一倍,右移一 位减少一半。 在汇编语言程序中,通常用带CY(CY=0)循环 左移实现乘2操作,通常用带CY(CY=0)循环右移 实现除以2操作。
例3 某已知数存在R4中,试将其乘以2存在R3 中,除以2存在R2中。
编程如下:
CLR C MOV RLC MOV CLR MOV RRC A MOV R2,A A,R4 A R3,A C A,R4
3.3.5 控制转移类指令 控制转移类指令的本质是改变程序计数器PC的内容, 从而改变程序的执行方向。控制转移类指令分为:无条 件转移指令、条件转移指令及调用和返回指令。
四、控制转移类指令
长转移指令(1 条):LJMP 无条件转 移指令 绝对转移指令(1 条):AJMP 相对转移指令(1 条):SJMP 间接寻址的无条件转移指令(1 条):JMP 控制转移 类指令 累加器 A 判 0 指令(2 条):JZ、JNZ 条件转移 比较转移指令(4 条):CJNE 减 1 非零转移指令(2 条):DJNZ 长调用指令(1 条):LCALL 调用和返 回指令 绝对调用指令(1 条):ACALL 返回指令(2 条):RET、RETI 空操作指令(1 条):NOP
3.5 控制转移和位操作指令(8)
2、条件转移指令 条件转移就是程序转移是有条件的。执行条件转移指 令时,如指令中规定的条件满足,则进行程序转移,否则 程序顺序执行。条件转移有如下指令: (1)累加器判零转移指令:JZ rel和 JNZ rel指令 这两条指令都是二字节指令,是有条件的相对转移指令, 以rel为偏移量。 (2)数值比较条件转移指令 数值比较条件转移指令把两个操作数进行比较,比较 结果作为条件来控制程序转移。共有四条指令: CJNE A,#data,rel;累加器内容与立即数不等转移 CJNE A,direct,rn ,#data,rel ;寄存器内容与立即数不等转移 CJNE @Ri,#data,rel ;内部RAM前128单元内容与立 即数不等转移。
汇编语言程序中,为等待中断或程序结束,常使程 序“原地踏步” ,对此可使用SJMP指令完成:HERE: SJMP HERE 或 HERE:SJMP $指令机器码为 80FEH。在汇编语言中,以“$”代表PC的当前值。 执行指令:L00P:SJMP L00P1,如果L00P的标 号值为0100H(即SJMP这条指令的机器码存于0100H 和0101H两个单元之中),标号L00P1值为0123H,即 跳转的目标地址为0123H,则指令的第二个字节(相对 偏移量)应为:rel=0123H一0102H=21H 。 (4)基址加变址寻址转移(变址转移)指令: JMP @A+DPTR ; (PC)←(A)+(DPTR) 这是一条一字节转移指令,转移的目的地址=(A) +(DPTR)。指令以DPTR内容为基址,而以A的内容 作变址。只要把DPTR的值固定,而给A赋以不同的值, 即可实现程序的多分支转移。键盘译码程序就是本指令 的一个典型应用。 (如P113例3.30)
2、位置位、复位指令 SETB C ; (Cy)←l SETB bit ; (bit)←1 CLR C ; (Cy)←0 CLR bit ; (bit)←0 3、位运算指令 ANL C,bit ; (Cy)←(Cy)∧(bit) ANL C,/ bit ; (Cy)←(Cy)∧/( bit ) ORL C,bit ; (Cy)←(Cy)∨(bit) ORL C,/ bit ; (Cy)←(Cy)∨/( bit ) CPL C ; (Cy)←/(Cy) CPL bit ; (bit)←/(bit)(P120例3.37) 4、位控制转移指令 位控制转移指令就是以位的状态作为实现程序转移的 判断条件。
控制转移类指令
MOV A,R7
RL A ;键值2倍,AJMP指令为双字节指令
MOV DPTR,#KEYG
JMP @A+DPTR
•••
KEYG: AJMP KEY0
KEYG+2: AJMP KEY1
•••
KEYG+30: AJMP KEY15
2.条件转移指令
条件转移指令是当满足给定条件时,程序转移到 目标地址去执行;条件不满足则顺序执行下一条 指令
用在中断服务程序的末尾 RETI与RET指令区别: RETI在返回的同
时同时释放中断逻辑
CJNE @Ri,#data,rel;
(PC)←(PC)+3 若data<((Ri)),(PC)←(PC)+rel且Cy←0; 若data>((Ri)),(PC)←(PC)+rel且Cy←1; 若data=((Ri)),顺序执行且Cy←0
例: MOV A, #40H
MOV R0,#10H
DJNZ direct,rel ;
(PC)←(PC)+3,(direct)←(direct)-1 当(diect)≠0时,(PC)←(PC)+rel; 当(direct)=0时,程序顺序执行。
注:操作数的内容先减1再判零,不等于0时转移
3.子程序调用
本指令完成两项操作:①把PC当前值压入堆栈;② 把子程序入口地址送PC。
⑴长调用指令 LCALL addr16 ;
(PC)←(PC)+3
(SP)←(SP)+1,((SP))←(PC)7~0;
(SP)←(SP)+1,((SP))←(PC)15~8;Biblioteka PC15~0←addr16
2.3.5控制转移指令
例:某温度控制系 统,采集的温度值 (Ta)放在累加器A 中,在内部RAM54H单 元存放温度下限值 (T54),在55H单元 存放温度上限值 (T55)。若Ta>T55, 程序转向JW(降温 处理程序);若 Ta<T54,则程序转向 SW(升温处理程序); 若T55≥Ta≥T54,则 程序转向FH(返回 主程序)。
在指令中提供了子程序入口地址的低11位,这 11位地址的a7~a0在指令的第二字节中,a10~a8 则占据第一字节的高3位。 为了实现子程序调用,该指令共完成两项操作: 断点保护 断点保护是通过自动方式的堆栈操作来实现的, 即把PC值自动送堆栈保存起来,待子程序返回时再送 回该PC值。 构造目的地址 目的地址的构造是在PC当前值的基础上以指令提 供的11位地址取代PC的低11位,而PC的高5位不变。
二、条件转移指令
条件所谓条件转移就是指程序转移是有条件的。 执行条件转移指令时,如指令中规定的条件满足, 则进行程序转移,否则程序顺序执行。 1、累加器判零转移指令
JZ rel ; 若(A)=0,则PC←(PC)+2+rel
若(A)≠0,则PC←(PC) +2 JNZ rel ; 若(A)≠0,则PC←(PC)+2+rel 若(A)=0,则PC←(PC)+2 这两条指令都是二字节指令,是有条件的相对转
(2) 长调用指令
LCALL addr16
给 出。指令执行后,断点进栈保存,调用addr16地址 的子程序。因此本指令的操作内容可表出为: PC←(PC)+3 SP←(SP)+1,(SP)←(PC)7-0 SP←(SP)+1,(SP)←(PC)15-8 PC15~0←addr16 本指令是三字节指令,调用地址在指令中直接
riscv 常用指令
riscv 常用指令RISC-V是一种基于精简指令集计算机(Reduced Instruction Set Computer)架构的开源指令集架构(ISA)。
它是由加州大学伯克利分校开发的,旨在为各种应用提供一个通用的、开放的指令集架构标准。
RISC-V指令集架构具有可扩展性、灵活性和可移植性等优点,因此在各种领域得到了广泛应用。
下面将介绍RISC-V常用指令,包括数据传输指令、算术指令、逻辑指令、控制转移指令和访存指令。
1. 数据传输指令数据传输指令用于在寄存器之间传输数据。
其中,LOAD指令用于将数据从内存加载到寄存器中,STORE指令用于将寄存器中的数据存储到内存中。
例如,LW指令将32位数据加载到寄存器中,SW 指令将32位数据存储到内存中。
2. 算术指令算术指令用于执行加法、减法、乘法和除法等算术运算。
ADD指令用于将两个寄存器中的数据相加,SUB指令用于将一个寄存器中的数据减去另一个寄存器中的数据,MUL指令用于将两个寄存器中的数据相乘,DIV指令用于将一个寄存器中的数据除以另一个寄存器中的数据。
3. 逻辑指令逻辑指令用于执行与、或、非和异或等逻辑运算。
AND指令用于对两个寄存器中的数据进行与运算,OR指令用于对两个寄存器中的数据进行或运算,NOT指令用于对一个寄存器中的数据进行非运算,XOR指令用于对两个寄存器中的数据进行异或运算。
4. 控制转移指令控制转移指令用于实现程序的跳转和分支。
其中,JUMP指令用于无条件跳转到指定地址,BRANCH指令用于根据条件跳转到指定地址。
例如,J指令将程序跳转到指定的地址,BEQ指令将在两个寄存器中的数据相等时跳转到指定地址,BNE指令将在两个寄存器中的数据不相等时跳转到指定地址。
5. 访存指令访存指令用于实现对内存的读写操作。
其中,LOAD指令用于将内存中的数据加载到寄存器中,STORE指令用于将寄存器中的数据存储到内存中。
例如,LBU指令将8位无符号数据加载到寄存器中,SB指令将8位数据存储到内存中。
控制转移指令
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 结果 目标地址
MCS-51单片机的指令集(分类)
子程序返回
1
24
RETI
中断返回
1
24
AJMP addr11
绝对短转移
2
24
LJMP addr16
长转移
3
24
SJMP rel
相对转移
2
24
JMP @A+DPTR
相对于DPTR的间接转移
1
24
JZ rel
累加器为零转移
2
24
JNZ rel
累加器非零转移
2
24
CJNE A,direct,rel
累加器与直接地址单元比较,不等则转移
2
12
MOV direct,Rn
寄存器内容送入直接地址单元
2
24
MOV direct,direct
直接地址单元中的数据送入直接地址单元
3
24
MOV direct,@Ri
间接RAM中的数据送入直接地址单元
2
24
MOV direct,#data8
8位立即数送入直接地址单元
3
24
MOV @Ri,A
累加器内容送入间接RAM单元
DEC @Ri
间接RAM内容减1
1
12
MUL A,B
A乘以B
1
48
DIV A,B
A除以B
1
48
DA A
累加器进行十进制转换
1
12
3、逻辑操作类指令
助记符
功能说明
字节数
振荡周期
ANL A,Rn
累加器与寄存器相“与”
1
12
ANL A,direct
累加器与直接地址单元相“与”
C51控制转移类指令及位操作指令
采用助记符有:AJMP、LJMP、SJMP、JZ、 JNZ、CJNE、DJNZ、ACALL、LCALL、RET、 RETI、NOP等13种。
2
整理课件
条件转移指令
条件转移指令仅仅在满足指令中规定的条件(如累 加器内容是否为零,两个操作数是否相等) 时才执行无 条件转移,否则程序顺序执行。
•所调用的子程序的首地址必须与ACALL后面指令的 第一个字节在同一个2 KB区域内。
19
整理课件
例 : 设 ( SP ) = 60H , ( PC ) = 0123H , 子 程 序 SUBRTN的首地址为0456H。 执行指令为ACALL SUBRTN 执行结果为(PC)+2=0123H+2=0125H→(PC), 将(PC)=0125H压入堆栈:25H压入(SP)+1=61H, 01H压入(SP)十l=62H,此时(SP)=62H。 addr11 PC10–0 , PC=0456H
若(操作数1) >(操作数2),清进位标志(CY)。 若(操作数1) <(操作数2),则置位进位标志(CY)。 • 值相等,程序继续执行。 程序转移的范围是从(PC)+3为起始的+127~一128B 的单元地址。
6
整理课件
例:温度控制程序
某温度控制系统,A中存温度采样值Ta,(20H)=温度下限 值T20,(30H)=温度上限值T30。若Ta>T30,程序转降温JW, 若Ta<T20,程序转升温SW,若T30≥Ta≥T20程序转FH返回主程 序。
;5个方波,10个状态
LOP:
CPL P1.7
;P1.7状态变反
35控制转移指令
保存其它指令移入CF的值
2
例题
1、以下指令序列,请问实现了什么功能?
MOV AL,08H ;08H → AL
SAL AL,1
;AL算术左移一位,AL=10H,
;相当于AL×2
MOV BL,AL MOV CL,2 SAL AL,CL
3.6 控制转移类指令
1、无条件转移指令 2、条件转移指令 3、循环控制指令 4、调用和返回指令
5
用于实现分支转移、循环控制、过程调用等
常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET 一般了解: INT n/IRET INTO LOOPZ / LOOPNZ
控制转移类指令通过改变IP(和CS) 值,实现程序执行顺序的改变
next:
lea si , X
lea di , Y mov ax , [si] sub ax , [di] jns next neg ax ;neg是求补指令:0-ax mov result , ax
BCD码:二进制编码的十进制数
BCD码是十进制数,而运算器对数据做加减运 算时,都是按二进制运算规则进行处理的(四位 二进制相加逢十六进一),而实际上是两个十进 制数相加,应该逢十进一.因此采用BCD码后,在 两数相加的和小于或等于9时,十进制运算的结 果是正确的;当大于9时,结果不正确,必须加6修 正后才能得出正确的结果.
12
相对寻址方式
Jcc指令的操作数label是一个标号
条件转移指令的目的地址必须在现行的代码段内 一个8位位移量,表示Jcc指令后的那条指令的偏移 地址,到目标指令的偏移地址的地址位移 8位位移量是相对于当前IP的,且距当前IP地址- 128~+127个单元的范围之内,属于段内短距离转 移
控制转移指令
试着汇编下列源程序,如某条通过或无法通过汇编, ① 试着汇编下列源程序,如某条通过或无法通过汇编,根 据汇编信息窗口的提示,请逐条说明具体理由: 据汇编信息窗口的提示,请逐条说明具体理由: 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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)相比
较,其值不相等就跳转;相等则不跳转,继续往 下走。