Download presentation
Presentation is loading. Please wait.
Published byAgus Budiaman Modified 5年之前
1
第4章 80C51系列指令系统 教学目的:熟悉80C51系列单片机的寻址方式及 每一种寻址方式对应的寻址空间;掌 握每一条指令功能。
教学难点:1.数据传送类指令中对不同的存储空 间 应采用的传送指令及寻址方式。 2 .间接寻址方式
2
4.1 指令系统简介 1. 汇编指令格式 助记符 目的操作数,源操作数;(注释) 例如:MOV A, #40H ;把40H送累加器A
4.1 指令系统简介 1. 汇编指令格式 助记符 目的操作数,源操作数;(注释) 例如:MOV A, #40H ;把40H送累加器A 2.指令代码格式 指令代码在程序存储器中存放的数据形式。 例如上条指令的指令代码为:74H.40H,其中74H为操作码,表达了指令的操作功能,40H为操作数。 根据代码长度,80C51单片机的指令有单字节、双字节和三字节指令。 按照指令执行速度又可分为单周期、双周期和四周期指令。 80C51在基本时钟为12MHz时,单周期指令执行速度为1MIPS。
3
4. 2 寻址方式 指令系统的寻址方式 规定了操作数的访问方式。80C51指令系统有寄存器寻址、直接寻址、间接寻址、立即寻址、基址变址寻址和相对寻址等七种寻址方式。 汇编指令中的符号约定 Rn (n=0~7)--当前选中的8个工作寄存器R0~R7 ,它在片内数据存储器中的地址由PSW中RSl、RS0确定; Ri (i=0或1) --当前选中的用于间接寻址的工作寄存器R0、R1 ,它在片内数据存储器中的地址由RS0、RS1 确定 ; direct -- 8位直接地址,可以是片内RAM单元地址或SFR地 址; #data8 -- 8位常数 ; #datal 位常数 ;
4
addrl6 -- 16位目的地址 ,寻址空间 64K字节程序存储器;
rel -- 补码形式的8位地址偏移量,用于相对转移指令中 bit -- 位地址,片内RAM或SFR的可寻址位的位地址; @ -- 间接寻址寄存器的前缀; / 位操作数的取反操作前缀。 以下符号仅出现在指令注释或功能说明中。 X --片内RAM的直接地址(包含位地址)或寄存器。 (X) --在直接寻址方式中,表示直接地址X中的内容;在间接寻址方式中,表示由间址寄存器X指出的地址单元。 ((X)) --在间接寻址方式中,表示由间址寄存器X指出的地址单元中的内容。 --指令操作流程,将箭头左边内容送入箭头右边的单元内。
5
1. 立即数寻址方式 立即数(指令中的常数)直接参与指令操作。立即数前必须加“#”标记。指令中的立即数有8位立即数#data8和16位立即数#data16。 例1 MOV A, #3AH ;立即数3AH送累加器A 图4-1 MOV A,#3AH执行示意图
6
2. 直接寻址方式 在这种寻址方式中,操作数项给出的是参加运算的操作数的地址。可寻址空间有特殊功能寄存器、内部数据存储器以及位地址。其中特殊功能寄存器和位地址空间只能用直接寻址方式来访问。 例1 MOV A, 3AH ;把A的内容送3AH单元。 例2 MOV P1,#10H ;将立即数10H送P1口。 注意:例2 中的目的操作数P1是直接寻址方式,这里用符号P1代替了直接地址90H。
7
图 MOV A, 3AH执行示意图
8
3.寄存器寻址方式 寄存器寻址是对选定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR和进位CY中的数进行操作。
例1. MOV A,R2 ;将当前工作寄存器的内容 送累加器A。(指令代码为1字节EA〕 注意R2在片内RAM的位置,它由RS0、RS1决定。如PSW中RS1、RS0的值分别为1、0,则现在的R2属于第二组工作寄存器,那么它的地址为12H。现已知12H中存放着数值4AH,则执行该指令后,4AH就被送到A累加器中。
9
图 MOV A,R2执行示意图
10
4. 寄存器间接寻址方式 在这种寻址方式中,操作数所指定的寄存器中存放的不是操作数本身,而是操作数的地址。这种寻址方式用于访问片内数据存储器或片外数据存储器。 例1 MOV R0,#50H MOV 例2 MOV DPTR,#2760H MOVX @DPTR, A
11
图 MOV
12
5.变址寻址(基址寄存器+变址寄存器的间接寻址)
变址寻址方式中使用DPTR或PC作基址寄存器,累加器A作变址寄存器 。 采用变址寻址的指令只有三条: MOVC MOVC 前两条用于程序存储器的查表操作,后一条用于程序的分支散转。
13
例 1 现假设MOVC
14
图4-4 MOVC A,@A+DPTR执行示意图
15
6. 相对寻址方式 相对寻址是将程序转移到相对地址的转移指令。
是将程序计数器PC中的当前内容(转移指令的下一条指令地址)与转移指令第二字节所给出的偏移量相加,其结果作为跳转指令的转移地址。偏移量为带符号的数,其范围为+127~-128 。程序设计中,相对地址可以用指令标号或直接地址偏移量数值,但要注意,相对转移地址的偏移量不得超过+127~-128 。 例1 JC 03H ;若进位C=0,则程序顺序执行, 即不跳转,PC= PC+2 ;若进位C= 1,则以PC 中的当前内容为基地址, 加上偏移量03H 后所得到的结果为该 转移指令的目的地址 。
16
图4-5 JC 03H指令执行示意图
17
7. 位寻址方式 位寻址空间:片内RAM的位寻址区(20H~ 2FH单元的128位)和SFR中的可位寻址的位单元。
位累加器:在进行位操作时,借助于进位位C作为操作累加器 。 位地址与字节直接寻址中的字节地址形式完全一样,主要由操作码来区分,使用时需予以注意。 例1 SETB 3DH ;将片内RAM位地址3DH即27H 单元的第5位置“1”。 例2 ANL C, 3DH ;将3DH的位状态与进位位C 相与, 结果保留在C中。
18
操作数寻址方式与寻址空间 寻址方式 寻 址 空 间 寄存器寻址 工作寄存器R0R7、A、B、CY、DPTR 直接寻址
寻 址 空 间 寄存器寻址 工作寄存器R0R7、A、B、CY、DPTR 直接寻址 片内RAM和特殊功能寄存器SFR 间接寻址 片内RAM , 片外RAM 位寻址 片内RAM的位寻址区和SFR中的可位寻址的位单元 立即数寻址 程序存储器 基址变址寻址 @A+DPTR) 相对寻址 在程序存储器256字节范围内转移
19
4.3 指令系统分类介绍 4. 3. 1 数据传送类指令(共24条) 1 .传送类指令分类 程序存储器查表指令MOVC(共2条)
4.3 指令系统分类介绍 数据传送类指令(共24条) 1 .传送类指令分类 程序存储器查表指令MOVC(共2条) MOVC MOVC 片外数据存储器数据传送指令MOVX(共4条) MOVX @DPTR, A MOVX MOVX @Ri, A MOVX 由于在80C51指令系统中,没有专门对外设的输入/输出指令, 因此80C51单片机只能用这四条指令与外部设备交换数据。后2条指令使用不方便,很少使用.
20
片内数据RAM与存储器间的传送指令(共18条)
MOV A, Rn MOV Rn,A MOV direct1,direct2 MOV A,#data8 MOV DPTR,#data16 PUSH direct POP direct
21
片内存储器可以以直接寻址的方式将数据从一个单元送到另一个单元;片内存储器的任一单元可以与工作寄存器或间址寄存器指定的地址单元间相互传送数据,但是,工作寄存器之间不能直接传送数据,也不能通过间址寄存器与片内存储器传送数据;立即数可以送到以寄存器间接寻址、直接寻址的方式的片内存储器的任一单元或工作寄存器;堆栈操作只能采用直接寻址方式。
22
传送类指令一般不影响标志位,只有堆栈操作可以直接修改程序状态字PSW。另外,传送目的操作数为ACC的指令将影响奇偶标志P 。
数据交换类指令(共5条) 全交换:XCH A, Rn ;8位物理空间的数据彼此交换 XCH XCH A,direct 半交换:XCHD ; 8位物理空间中的低4位数据 ; 彼此交换 自交换: SWAP A ;自身高4位与低4位数据彼此交换 传送类指令一般不影响标志位,只有堆栈操作可以直接修改程序状态字PSW。另外,传送目的操作数为ACC的指令将影响奇偶标志P 。
23
2. 传送指令应用举例 例1 A=5BH,R1=10H,R2=20H,R3=30H,(30H〕=4FH,执行指令:
2. 传送指令应用举例 例1 A=5BH,R1=10H,R2=20H,R3=30H,(30H〕=4FH,执行指令: MOV R1,A ;A送R1 MOV R2,30H ;(30H)送R2 MOV R3,#83H;83H送R3 执行后,R1=5BH,R2=4FH,R3=83H
24
例2 已知片内RAM50H单元中存放数值为AAH,设堆栈指针为30H,把此数值压入堆栈,然后再弹出到40H单元中。
MOV SP,#30H ;30H SP PUSH 50H ;(SP)+1 SP, (50H) 31H POP 40H ;(31H) 40H, (SP)-1 SP
25
例3 已知当前PC值为2010H,请用两种方法将程序存储器20F0H中的常数送入累加器A中。
解:方法一、使用查表指令 MOVC MOV A, #0DDH MOVC 方法二、使用查表指令 MOVC MOV DPTR,#20F0H CLR A MOVC
26
算术运算类指令(共23条) 1..算术运算类指令分类 算术运算类指令主要是对8位无符号数据进行算术操作,其中包括加(ADD)、带进位加(ADDC)、带借位减法(SUBB)、乘(MUL)、除(DIV)、加1(INC)、减1(DEC) 指令;借助溢出标志,可对有符号数进行补码运算;借助进位标志,可进行多精度加、减运算;也可以对压缩BCD数进行加法运算。
27
ADD A, Rn ADD A, direct ADD ADD A, #data8 MUL AB DIV AB INC A INC direct INC DPTR DA A
28
算术运算操作对PSW中标志位的影响 指令 PSW中的标志位 C OV AC ADD ∨ ADDC SUBB MUL - DIV
29
2.算术运算指令应用举例 例1 已知A=DBH,R4=73H,CY=1,执行指令“SUBB A,R4”则结果如下:
A=67H,CY=0,OV=1
30
4. 3. 3 逻辑运算类指令(共25条) 这些指令执行时一般不影响程序状态字寄存器PSW,仅当目的操作数为ACC时对奇偶标志位有影响。
逻辑运算类指令(共25条) 逻辑运算类指令主要用于对两个操作数按位进行逻辑操作,操作结果送到A 累加器或直接寻址单元,若直接地址为I/O端口,则为“读-改-写”操作。这类指令执行的操作主要有“与”(ANL)、“或”(ORL)、“异或”(XRL)以及累加器自身的循环移位、取反(CPL)、清除(CLR) 等。 这些指令执行时一般不影响程序状态字寄存器PSW,仅当目的操作数为ACC时对奇偶标志位有影响。
31
1.逻辑“与”指令 ANL A, Rn ANL A, #data ANL A, direct ANL ANL direct, A ANL direct, #data
32
CLR A CPL A RLC A ;带进位位的循环左移 RL A ;循环左移
33
2.逻辑运算指令举例 例1 已知A=1AH, R0=45H,(45H)=39H,执行指令ORL A,@R0,则操作如下:
+) 0 0 l l (39H) (3BH) 结果:A=3BH, R0=45H,(45H)=39H,P=1
34
4. 3. 4 转移操作类指令(共17条) 跳转: LJMP addr16 ; addrl6 PC 调用和返回:
转移操作类指令(共17条) 这类指令的功能主要是控制程序从原顺序执行地址转移到其它指令地址上。 包括跳转、调用、散转、返回及空操作等操作。 1. 转移操作类指令分类 跳转: LJMP addr16 ; addrl6 PC AJMP addr11 ;PC+2 PC,addr11 PC.10 PC.0 SJMP rel ;PC+2+rel PC , rel是带符号的8位偏 移量 调用和返回: LCALL addr16 ;PC+3 PC,SP+1 SP, PC.7~PC.0 (SP),SP+1 SP, PC.15~PC.8 (SP),addr16 PC
35
ACALL addr11 ;PC+2 PC,SP+1 SP,
PC.7~PC.0 (SP),SP+1 SP, PC.15~PC.8 (SP), addr11 PC.10~PC.0 RET ;(SP)PC.15~PC.8,SP -1 SP, (SP)PC.7~PC.0,SP - 1 SP RETI ;除具有RET指令的功能外,还能将优 先级状态触发器清除。 散转: ;A+DPTRPC ,根据A中数值的不同, 程序实现不同的分支转移 空操作:NOP
36
条件转移 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 DJNZ Rn,re ;Rn-1Rn,Rn ≠0:PC+2+rel PC Rn=0:PC+2 PC DJNZ direct,rel ;(direct)-1 (direct), (direct)≠0 :PC+3+rel PC (direct)=0 : PC+3 PC
37
CJNE A,direct,rel ;A =(direct):PC+3 PC,0 C
A>(direct):PC+3+relPC,0 C A<(direct):PC+3+re1 PC,1 C CJNE A,#data,rel ;A=data:PC+3 PC,0 C A>data:PC+3+rel PC,0 C A<data: PC+3+rel PC,1 C CJNE Rn,#data,rel ;Rn=data :PC+3 PC,0 C Rn>data :PC+3+rel PC,0 C Rn<data :PC+3+rel PC,1 C ;(Ri)=data:PC+3 PC,0 C (Ri)>data :PC+3+rel PC,0 C (Ri)<data:PC+3+rel PC,1 C
38
2.转移指令应用举例 例1、根据R7的内容,转向各个操作程序。 R7=0, 转入OPR0 R7=1, 转入OPR1 … …
… … R7=n, 转入OPRn
39
解:JUMP1: MOV DPTR,#JPTAB1 ;跳转表首地址送数据指针
MOV A,R ;R72 A(修正变址值) ADD A,R7 JNC NOAD ;判有否进位 INC DPH ;有进位则加到高字节地址 NOAD: JMP @A+DPTR ;转向形成的散转地址入口 JPTAB1:AJMP OPR ;直接转移地址表 AJMP OPR1 … AJMP OPRn
40
例2 某子程序SUB1入口地址是340BH,调用指令LCALL SUB1 地址为2042H,该段程序调用过程中PC及SP的变化如下:
地址 指令 注释 2040H MOV SP,#20H ;设置堆栈指针 ,20HSP 2042H LCALL SUB1 ;调用子程序,2045HPC,21HSP, 45H(21H), HSP,20H(22H), 340BHPC 340BH SUB1: MOV A,R0 3412H RET ;(22H)PCH,(21H)PCL,此时PC=2045H, SP=20H
41
例3、根据A中数值,置相应的标志位。 当 #dataL ≤ A≤#dataH,标志位F0清零;否则F0置1。
解: ORG 2000H ST: CLR F0 CJNE A, #dataH, HCNT RET HCNT:JC LC SF0: SETB F0 LC: CJNE A, #dataL, LCNT LCNT:JC SF0
42
4. 3. 5 位操作类指令(共17条) 包括位变量传送、逻辑运算、控制程序转移等指令。在进行位操作时,位累加器C为进位标志CY。
位操作类指令(共17条) 包括位变量传送、逻辑运算、控制程序转移等指令。在进行位操作时,位累加器C为进位标志CY。 在汇编语言中位地址的表达方式有如下几种: (l)直接(位)地址方式:如D4H; (2)点操作符号方式:如PSW.4,(D0H).4; (3)位名称方式:如RS1; (4)用户定义名方式:如用伪指令bit 定义下式: SUB.REG bit RS1 经定义后,指令中可以用SUB.REG代替RS1。 上面4种方式都可表达PSW(D0H)中第4位,它的位地址是D4H,名称为RS1,用户定义为SUB.REG。
43
1. 位操作指令分类 位数据传送指令: MOV C,bit ;bit C
MOV bit,C ;C bit,对端口操作时,是“读-改-写”指令。 位逻辑运算指令 ANL C,bit ;C bit C ANL C,/bit ;C /bit C ORL C,bit ;C bit C ORL C,/bit ;C /bit C 位修正指令 CLR C ;0 C CLR bit ;0 bit CPL C ;/C C CPL bit ;/bit bit SETB C ;1 C SETB bit ;1 bit 当直接位地址为端口中某一位时,具有“读-改-写”功能 。
44
判位转移指令 JC rel ; C=1:PC+2+rel PC C=0:PC+2 PC JNC rel ; C=0:PC+2+re1 PC C=1:PC+2 PC JB bit,rel ; bit=1:PC+3+rel PC bit=0:PC+3 PC JNB bit rel ; bit=0 :PC+3+rel PC bit=1 :PC+3 PC JBC bit,rel ; bit=1:PC+3+rel PC,0 bit bit=0:PC+3 PC
45
2. 位操作指令举例 例1 把Pl.3状态传送到Pl.7。按题意编写指令如下: MOV C,P ;P1.3 C MOV P1.7,C ;C P1.7 例2 已知位0AH=1,CY=1。 执行指令ANL C,0AH ; C • 0AH C,C为1 执行指令ORL C,/0AH ; C + C, C为1
46
例3 比较片内RAM 40H、50H中的两个无符号数大小,若40H中的数小则把片内 RAM中的40H位置1,若50H中的数小则把50H位置1;若相等则把20H位置1,然后返 回。
47
地址 机器码 源程序 E MOV A,40H B CJNE A,50H,L1 ;两数不等则转Ll D SETB 20H ;两数相等,置20H RET L1: JC L ;若C为“1”,则(40H) 中数小,转L2 200A D SETB 50H ;(50H)数小则50H位置1 200C RET 200D D L2: SETB 40H ;(40H)数小,则40H位置1 200F RET
48
例3、根据A中数值,置相应的标志位。 当 #dataL ≤ A≤#dataH,标志位F0清零;否则F0置1。 解: ORG 2000H ST: CLR F0 CJNE A, #dataH, HCNT RET HCNT:JC LC SF0: SETB F0 LC: CJNE A, #dataL, LCNT LCNT:JC SF0
Similar presentations