单片机及接口技术:第2章51系列单片机的指令系统

上传人:cn****1 文档编号:569488753 上传时间:2024-07-29 格式:PPT 页数:75 大小:626KB
返回 下载 相关 举报
单片机及接口技术:第2章51系列单片机的指令系统_第1页
第1页 / 共75页
单片机及接口技术:第2章51系列单片机的指令系统_第2页
第2页 / 共75页
单片机及接口技术:第2章51系列单片机的指令系统_第3页
第3页 / 共75页
单片机及接口技术:第2章51系列单片机的指令系统_第4页
第4页 / 共75页
单片机及接口技术:第2章51系列单片机的指令系统_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《单片机及接口技术:第2章51系列单片机的指令系统》由会员分享,可在线阅读,更多相关《单片机及接口技术:第2章51系列单片机的指令系统(75页珍藏版)》请在金锄头文库上搜索。

1、单片微型计算机与接口技术单片微型计算机与接口技术( (第第4 4版版) ) 第第2 2章章 5151系列单片机的指令系统系列单片机的指令系统 2.12.1寻址方式寻址方式2.22.2数据传送与交换指令数据传送与交换指令2.32.3算术运算和逻辑运算指令算术运算和逻辑运算指令2.42.4控制转移指令控制转移指令2.52.5位操作指令位操作指令学习内容学习内容 5151单片机指令可分为单片机指令可分为6 6个个类型类型, ,其特点:其特点:(1 1)指令执行时间快)指令执行时间快(2 2)指令短)指令短(3 3)具有丰富的)具有丰富的位操作位操作类指令类指令指令的格式:指令的格式: LOOP: L

2、OOP: MOV A, R0 MOV A, R0 ; ;将将R0R0的内容送的内容送A A 标号标号 操作符操作符 目的操作数目的操作数, , 源操作数源操作数 ;注释注释 注:括号的内容不是必须的注:括号的内容不是必须的 符号的约定意义:符号的约定意义: RnRn:当前工作寄存器组中的当前工作寄存器组中的R0R0R7R7(n=0,1n=0,1,77)RiRi: 当前工作寄存器组中的当前工作寄存器组中的R0,R1 R0,R1 (i=0,1i=0,1)dirdir: 8 8位直接字节地址(位直接字节地址(片内片内RAMRAM和和SFRSFR地址地址)#data#data: 8 8位立即数位立即数

3、#data16#data16:1616位位立即数立即数addr16addr16:1616位地址值位地址值addr11addr11:1111位位地址值地址值bitbit: 位地址位地址relrel: 相对偏移量相对偏移量( )( ): 表示存储单元的内容表示存储单元的内容2.1 2.1 寻址方式寻址方式 寻址方式:寻址方式:指令中提供(寻找)操作数的方式指令中提供(寻找)操作数的方式说明说明:针对源操作数针对源操作数 ( (7 7种种) ) 针对目的操作数针对目的操作数 ( (4 4种种) ) 2.1 1 2.1 1 立即寻址立即寻址(源)(源) 指令中直接给出操作数指令中直接给出操作数该操作数

4、称为立即数该操作数称为立即数, , 冠以冠以”“号作前缀号作前缀, , 表示并非地址表示并非地址 MOV A, MOV A, 80H80H MOV DPTR, MOV DPTR, 0 0DFFFHDFFFH 目的操作数没有目的操作数没有立即寻址立即寻址 2.1.2 2.1.2 直接寻址直接寻址(源,目)(源,目) 操作数直接以操作数直接以单元地址(单元地址(8 8位)位)形式给出形式给出直接寻址方式可直接寻址方式可访问访问 2 2 种存储器空间种存储器空间: : (1)(1) 内部内部RAMRAM低低 128 128 字节单元字节单元(00H00H7FH7FH) (2)(2) SFR SFR

5、( (用用SFRSFR寄存器名称表示寄存器名称表示) ) 例例: : MOV A, 40HMOV A, 40H ; A(40H)A(40H) 该指令的机器码为该指令的机器码为E5H 40HE5H 40H MOV P0, #45HMOV P0, #45H ; P0P045H45H P0 P0地址为地址为80H,80H,机器码为机器码为758045758045,P0P0为直接寻址为直接寻址 MOV 30H, 20HMOV 30H, 20H ; (30H30H)(20H20H) 机器码为机器码为852030 852030 ( (特殊特殊) ) *MOV DPTR,2000H ?*MOV DPTR,2

6、000H ?2.1.3.2.1.3.寄存器寻址寄存器寻址(源,目)(源,目) 操作数在通用操作数在通用寄存器中寄存器中 (R0(R0R7R7, A A, B B,DPTR)DPTR) B B仅在乘除法指令中为寄存器寻址,其他指令中为直接寻址仅在乘除法指令中为寄存器寻址,其他指令中为直接寻址A A既可直接寻址(既可直接寻址(此时写作此时写作ACC,ACC,为为SFRSFR), ,又可寄存器寻址又可寄存器寻址 INC A INC A 寄存器寻址寄存器寻址 , ,机器码机器码04H04H INC ACC INC ACC 直接寻址直接寻址, ,机器码机器码05E0H05E0H 其余的其余的特殊功能寄存

7、器一律为特殊功能寄存器一律为直接寻址直接寻址例例2-32-3 MUL ABMUL AB ; A*B ; A*BBABA,A A、B B为寄存器寻址,机器码为寄存器寻址,机器码A4A4MOV B, R0MOV B, R0 ; R0B ; R0B,R0R0为寄存器寻址,为寄存器寻址,B B为直接寻为直接寻 址,机器码为址,机器码为88F088F0,其中其中F0F0为为B B的字节地址的字节地址 PUSH ACCPUSH ACC ; A ; A的内容压入堆栈,机器码为的内容压入堆栈,机器码为C0E0C0E0,其,其 中中E0E0为为A A的字节地址,此处的字节地址,此处A A为直接寻址为直接寻址 A

8、DD A, ACCADD A, ACC ;A*2A,( ;A*2A,(ADD ADD A,dirA,dir形式形式无无ADD ADD dir,Adir,A形式形式) 2.1.4. 2.1.4. 寄存器间接寻址寄存器间接寻址(二次寻址,与二次寻址,与RAMRAM有关有关) ) (源,目)(源,目) 以寄存器中的以寄存器中的内容内容为地址,该地址中的为地址,该地址中的内容内容为操作数为操作数 1, 1, 使用使用R0R0、R1R1及及DPTRDPTR,前缀,前缀“” 2,2, 存储器空间包括存储器空间包括 内内RAM (RAM (MOVMOV指令指令) ) 外外RAM RAM ( (MOVXMOV

9、X指令指令) )对于外对于外RAMRAM最大寻址可达最大寻址可达64KB64KB1),1),由由P2P2提供高提供高8 8位地址,由位地址,由R R0 0或或R R1 1提供低提供低 8 8位地址位地址 ( (高高8 8位位, ,低低8 8位位) )2),2),由由DPTRDPTR作寄存器间接寻址作寄存器间接寻址 ( (1616位位) )区别区别: :寄存器寻址寄存器寻址: :寄存器内容为操作数寄存器内容为操作数 寄存器间接寻址寄存器间接寻址: :寄存器内容为操作寄存器内容为操作 数所在存储单元地址数所在存储单元地址例例2-4 2-4 MOV R0, AMOV R0, A ; A ; A以以R

10、0R0内容内容 为地址的为地址的内部内部RAMRAM片内片内RAMRAMR0A图图2-1 MOV R0, A2-1 MOV R0, A 2.1.5 2.1.5 变址寻址变址寻址 ( (与与ROMROM有关有关,2,2条条) ) (源)(源)以以DPTRDPTR或或PCPC的的内容内容加上加上A A的的内容内容之和作为操作数的之和作为操作数的地址地址1) 1) 只有读操作,无写操作只有读操作,无写操作2) 2) 指令采用指令采用MOVCMOVC,操作数,操作数A A例例2-5:2-5: MOVC A, A+DPTRMOVC A, A+DPTR ; A(A+DPTR) ; A(A+DPTR) MO

11、VC A, A+PCMOVC A, A+PC ;(A+PC) A ;(A+PC) A注意注意: :目的操作数无变址寻址(目的操作数无变址寻址(无无MOVC A+DPTRMOVC A+DPTR, A A ) 2.1.6. 2.1.6. 相对寻址相对寻址( (修改修改PC PC 转移转移) ) (源)(源) 以以当前当前PCPC的内容为基址的内容为基址, , 加上指令中给定的偏移量作为转移地址加上指令中给定的偏移量作为转移地址 如如 SJMP SJMP 08H08H(机器码机器码80H80H,08H08H ) ) 指令执行后,转移到地址为指令执行后,转移到地址为当前当前PCPC08H08H处处执行

12、程序执行程序 当前当前PCPC:转移指令紧相邻的下一条指令的转移指令紧相邻的下一条指令的PCPC值(动态)值(动态)1) 1) 源地址源地址(转移指令所在地址转移指令所在地址) 即即: : 当前当前PCPC值值 = = 源地址源地址 + + 转移指令字节数转移指令字节数 2) 2) 偏移量偏移量relrel是以补码表示的单字节数是以补码表示的单字节数, , 取值范围取值范围 -128-128+127+127(即(即80H80H7FH7FH), , 负数表示从当前地址向上转移负数表示从当前地址向上转移, , 正数表示从当前地址向下转移正数表示从当前地址向下转移 3 3)目的地址目的地址 = =

13、当前当前PCPC值值 + + relrel2.1.7. 2.1.7. 位寻址位寻址 ( (内内RAM RAM , SFR)SFR)(源,目)(源,目) 对位地址中的内容作位操作对位地址中的内容作位操作 位操作:位传送及逻辑操作位操作:位传送及逻辑操作 ( (无算术运算无算术运算) ) 例如例如: : SETB PSW.3SETB PSW.3 ; (PSW.3)1(PSW.3)1位地址表示?位地址表示?内内RAM:RAM: 00H7FH (128 00H7FH (128位,位,直接位地址直接位地址) ) SFR:SFR: PSW.5 PSW.5 (符号位地址符号位地址)例:例:例:例: MOV

14、CMOV CMOV CMOV C,20H 20H 20H 20H ;20H20H20H20H位内容位内容位内容位内容CY CY CY CY (位寻址位寻址位寻址位寻址) MOV AMOV AMOV AMOV A,20H 20H 20H 20H ;内内内内RAMRAMRAMRAM中中中中20H20H20H20H单元内容单元内容单元内容单元内容A A A A(字节寻址字节寻址字节寻址字节寻址) 位寻址?字节寻址?位寻址?字节寻址?位寻址?字节寻址?位寻址?字节寻址?根据两操作数类型一致的原则,由另一个操作数决定根据两操作数类型一致的原则,由另一个操作数决定根据两操作数类型一致的原则,由另一个操作数

15、决定根据两操作数类型一致的原则,由另一个操作数决定 指令对哪个存储器空间进行操作指令对哪个存储器空间进行操作是由指令是由指令 操作码和寻址方式确定的操作码和寻址方式确定的 源目源目2.2 2.2 数据传送与交换指令数据传送与交换指令2.2.1 2.2.1 传送类指令传送类指令 1. 1. 传送指令传送指令MOVMOV(内内RAM,RAM,拷贝拷贝) 图图2 26 6示意了示意了MOVMOV的操作,图中的操作,图中表示单向传送,表示单向传送,表示相互传送,箭头指向目的操作数表示相互传送,箭头指向目的操作数dirRnRi#dataA图图2 26 MOV6 MOV指令指令(1 1)以)以A A为目的

16、操作数为目的操作数Rn ;RnA dir ;(dir)A Ri ;(Ri) A #data ;#dataAMOVA,例例2 27 R1=20H,(20H)=55H,7 R1=20H,(20H)=55H,指令指令MOV A, R1 MOV A, R1 执行后,执行后,A=55HA=55H。 (2) (2) 以以RnRn为目的操作数为目的操作数 A ; A Rn MOV Rn, dir ;(dir) Rn #data ;#data Rn例例2 28 8 (40H40H)30H30H,指令指令MOV R7,40HMOV R7,40H执行后,执行后,R7=30HR7=30H。(3) (3) 以以DPT

17、RDPTR为目的操作数为目的操作数 MOV DPTR, #data16 ;#data16MOV DPTR, #data16 ;#data16DPTRDPTR例例: MOV DPTR, #2010H ;#2010HDPTR: MOV DPTR, #2010H ;#2010HDPTR相当于:相当于:MOV DPH, #20HMOV DPH, #20H MOV DPL, #10H MOV DPL, #10H(4)以以直接地址为目的操作数直接地址为目的操作数 A ;A A ;A (dir)(dir) RnRn ; ;RnRn (dir)(dir) MOV dir, dir MOV dir, dir1

18、1 ;(dir ;(dir1 1) )(dir)(dir) Ri ;(Ri) Ri ;(Ri) (dir)(dir) #data ;#data#data ;#data(dir)(dir) 例例2 21010 R0 R0 = = 50H,(50H)=10H,50H,(50H)=10H,指指令令MOV MOV 35H,R035H,R0执执行行后后,(35H35H)10H10H。这一操作也可以用指令这一操作也可以用指令MOV 35H, 50HMOV 35H, 50H来完成来完成。 (5 5)以间接地址为目的操作数)以间接地址为目的操作数 A ;A (Ri) MOV Ri, dir ;(dir) (R

19、i) #data ; # data (Ri)2. 2. 非内非内RAMRAM和和A A之间的传送之间的传送A 外部数据外部数据存储器存储器程序程序存储器存储器 Ri , A DPTR , A A , Ri A , DPTRMOVXMOVCA , A+PCA , A+DPTRMOVXMOVC(1 1)访问访问外外RAMRAM指令指令 ( (读读/ /写写,4,4条条) )i) MOVX Ri, A ;A(P2 Ri )ii) MOVX DPTR, A ; A(DPTR ) iii) MOVX A, Ri ; (P2 Ri ) A iv) MOVX A, DPTR ;(DPTR) A这组指令:这组

20、指令:在在A A与外与外RAMRAM单元或单元或I/OI/O口之间进行数据传送口之间进行数据传送(2 2)访问程序存储器指令)访问程序存储器指令 ( (只读不写只读不写 2 2条条) ) MOVC A, A+PC ;(A+MOVC A, A+PC ;(A+PCPC) ) A A MOVC A, A+DPTR ;(A+DPTR) MOVC A, A+DPTR ;(A+DPTR)A A 例例2 21313 执行下列程序后执行下列程序后A=? (DBA=? (DB为字节定义伪指令为字节定义伪指令) ) MOV A, #02H ;A=02 MOV A, #02H ;A=02 MOVC A, A+PC

21、; MOVC A, A+PC ;取完该指令取完该指令, , PCPC=M1,A+PC=2+M1=M1,A+PC=2+M1 M1: RET M1: RET M2: DB 66H,77H,88H,99H M2: DB 66H,77H,88H,99H 执行执行MOVCMOVC指令后指令后A=77HA=77H 例例 : : MOV A, R0 MOV A, R0 ;以以R0R0的内容为地址的内容为地址 ,把该地址中的内容,把该地址中的内容 送到送到 A A中去中去 A (R0)A (R0) MOV A, R0MOV A, R0 ; ;将将R0R0的内容送到的内容送到A A去去 A R0A R0 MOV

22、 A, #20H MOV A, #20H ;A = 20H ;A = 20H A A的内容为的内容为20H20H MOV A, 20H MOV A, 20H ;A = (20H);A = (20H) A A的内容为的内容为20H20H中的内容中的内容 注意注意以上两组指令的不同点以上两组指令的不同点 传送类指令传送类指令 MOVMOV : :内内RAM,SFR RAM,SFR MOVX MOVX : :外外RAM,I/ORAM,I/O口口 MOVC MOVC :ROM(:ROM(内内, ,外外) ) 3. 3. 堆栈操作堆栈操作 ( (内内RAM ,SFR)RAM ,SFR) PUSH dir

23、PUSH dir ; ;入栈操作,入栈操作,SP+1SP+1SP,(dir)SP,(dir)(SP(SP) ) POP dirPOP dir ; ;出栈操作,出栈操作,(SP)(SP)(dir)(dir),SP-1SP-1SPSP * * 1) 1) 堆栈堆栈在内部在内部RAMRAM中中 2) 2) 先进后出先进后出, ,字节操作字节操作 3) 3) 初始化初始化SP=07HSP=07H 4) 4) 直接寻址直接寻址例例: : 进进入入中中断断服服务务子子程程序序时时, , 把把程程序序状状态态寄寄存存器器PSWPSW、 累累加加器器A A、数据指针数据指针DPTRDPTR进栈保护。则程序段进

24、栈保护。则程序段 MOV SP,#60HMOV SP,#60H PUSH PSWPUSH PSW PUSH PUSH ACC ACC PUSH DPL PUSH DPL PUSH DPH PUSH DPH 执行后执行后, SP=? SP=64H, SP=? SP=64H2.2.2 2.2.2 交换指令交换指令 1.1.字节交换指令字节交换指令 XCH A , XCH A , RnRn ; A A RnRn XCH A , dir XCH A , dir ; A A (dirdir) XCH A , XCH A , RiRi ; A (A (RiRi) ) 将将A A的内容和源操作数内容相互交换

25、的内容和源操作数内容相互交换( (字节字节) )例例 A=FFH ,R1=30H,(30H)=87HA=FFH ,R1=30H,(30H)=87H 执行执行XCH A, R1 XCH A, R1 后后 A=87H,(30H)=FFH, A=87H,(30H)=FFH, R1=?R1=?例例:将片内:将片内RAM 60HRAM 60H单元与单元与61H61H单元的数据交换。单元的数据交换。 XCH 60HXCH 60H,61H 61H 对吗?对吗?2. 2. 低半字节交换低半字节交换 XCHD A, XCHD A, RiRi ;A A0-30-3 (Ri) (Ri)0-30-33. A3. A的

26、高、低半字节交换的高、低半字节交换 SWAP A SWAP A ;A A0-30-3 A A4-74-7 思考:思考:把内把内RAM50HRAM50H地址单元中的内容与地址单元中的内容与40H40H地址单元的内地址单元的内容互换。容互换。 (可用多种方法(可用多种方法: :堆栈法堆栈法, ,字节交换法字节交换法, ,直接地址法等直接地址法等) PSW寄存器注意注意 1) 1) 当当A A中中1 1的个数为奇数,的个数为奇数,P=1P=1,否则,否则 P=0P=0 2) MOV 2) MOV类类,INC,DEC,INC,DEC,逻辑运算类不影响逻辑运算类不影响 CY,OV,ACCY,OV,AC

27、3) 3) 加减运算影响加减运算影响 P,CY,OV,ACP,CY,OV,AC 乘除后乘除后 CY=0 CY=0 乘积乘积255OV=1255OV=1 除数除数=0 OV=1=0 OV=12.3 2.3 算术运算和逻辑运算指令算术运算和逻辑运算指令2.3.1 2.3.1 对标志位的影响对标志位的影响2.3.2 2.3.2 以以A A为目的操作数的算术运算和逻辑运算指令为目的操作数的算术运算和逻辑运算指令 共共2424条指令条指令加:加: ADD进位加进位加: : ADDC借位减借位减: : SUBB与:与: ANL或:或: ORL异或:异或: XRLA,RidirRn#data 带进位加法指令

28、带进位加法指令 ADDC A, ADDC A, RnRn ; AA+Rn+CyAA+Rn+Cy * * 对标志位的影响与对标志位的影响与ADDADD相同;相同; Cy:Cy:上一次进位标志;上一次进位标志; 用于多字节加法运算用于多字节加法运算 带带借位借位减法指令减法指令 SUBB A, SUBB A, RnRn ;AA-AA-RnRn-Cy-Cy SUBB A, SUBB A, RiRi ;AA-(AA-(RiRi)-Cy)-Cy SUBB A, dir SUBB A, dir ;AA-(dir)-CyAA-(dir)-Cy SUBB A, SUBB A, data data ;AA-#d

29、ataCyAA-#dataCy * * 要进行不带借位的减法要进行不带借位的减法, , 先将先将CyCy清清“0 0” CLR C ; 0CYCLR C ; 0CY 2.3.3 2.3.3 以以dirdir为目的操作数的为目的操作数的逻辑运算逻辑运算指令指令与:与: ANL 或或: ORL dir, 异或异或:XRLA#data: “: “与与” ” “有有0 0即即0 0,全,全1 1为为1”1” : “ : “或或” ” “有有1 1即即1 1,全,全0 0为为0”0” : “ : “异或异或” ” “相异为相异为1 1,相同为,相同为0”0” 2.3.4 2.3.4 加加1, 1, 减减

30、1 1指令指令 加加1 1指令指令 INC A INC A ;AA+1AA+1 INC INC RnRn ;RnRn RnRn +1+1 INC dir INC dir ;(;(dirdir)(dir)+1dir)+1 INC INC RiRi ;( (RiRi) () (RiRi) +1) +1 INC DPTRINC DPTR ;DPTRDPTR+1 (DPTRDPTR+1 (唯一唯一1616位运算指令位运算指令) ) 对标志位对标志位Cy不产生影响不产生影响 若:若: A A0FFH , 0FFH , Cy=0Cy=0 执行:执行: INC AINC A 结果:结果: A A00H ,

31、00H , Cy=0Cy=0 减减1 1指令指令DEC A DEC A ;AAAA1 1DEC DEC RnRn ; RnRn RnRn 1 1DEC dir DEC dir ;(;(dirdir)(dir)dir)1 1DEC DEC RiRi ;( (Ri)(RiRi)(Ri) )1 1对标志位对标志位Cy不产生影响不产生影响无无 DEC DPTRDEC DPTR 指令指令 2.3.5 2.3.5 十进制调整指令十进制调整指令 DA ADA A用途:用途:紧跟在加法指令(紧跟在加法指令(BCDBCD码加码加, ,不包括减法不包括减法)之)之 后,进行十进制调整后,进行十进制调整如如两两BC

32、DBCD码加:码加: MOV A, #35HMOV A, #35H ADD A, #46H ; ADD A, #46H ; A=7BHA=7BH DA A ; DA A ; A=81HA=81H2.3.6 2.3.6 专对专对A A的指令的指令 CLR A ; CLR A ; 对对A A清清“0 0”( (MOV A,#0MOV A,#0) ) CPL A ; CPL A ; 对对A A按位取反按位取反 RL A ; RL A ; A A的内容向左环移的内容向左环移1 1位位 RLC A ; RLC A ; A A的内容带进位标志位向左环移的内容带进位标志位向左环移1 1位位 RR A ; R

33、R A ; A A的内容向右环移的内容向右环移1 1位位 RRC A ; RRC A ; A A的内容带进位标志位向右环移的内容带进位标志位向右环移1 1位位 除了除了RLC ARLC A和和RRC ARRC A影响影响CYCY, , 其它都不影响其它都不影响Cy, AC, OVCy, AC, OV等标志等标志2.3.7 2.3.7 乘、除法指令乘、除法指令1.1.乘法指令乘法指令 MUL AB MUL AB ; ABBAABBA)A A、B B中都是无符号整数中都是无符号整数)如果积大于)如果积大于255255,OVOV1 1,否则,否则OVOV0 0;)乘法后)乘法后 CyCy0 02.

34、2. 除法指令除法指令 DIV AB DIV AB ; AB AB 商商 A A 余数余数B B)A A、B B中都是无符号整数中都是无符号整数)如果除数)如果除数B B为为“0”0”,OVOV1 1,否则,否则OVOV0 0;)除法后)除法后 CyCy0 0例例2 21616 把在把在R4R4和和R5R5中的两字节数中的两字节数 取补(高位在取补(高位在R4R4中)中)CRL CCRL C ; ;CyCy清零清零MOV A, R5MOV A, R5CPL ACPL AADD A, #01H ;ADD A, #01H ;低位取反加低位取反加1 1 (INC A ?)(INC A ?) MOV

35、R5, A MOV R5, A MOV A, R4 MOV A, R4 CPL A ; CPL A ;高位取反高位取反 ADDC AADDC A, #00H ;, #00H ;加低位的进位加低位的进位 MOV R4, AMOV R4, A SJMP $ SJMP $例例2 218 18 把把R1R0R1R0和和R3R2R3R2中的两个中的两个4 4位位BCDBCD数相加数相加,结果送,结果送R5R4R5R4中中, ,如有进位则存于进位位如有进位则存于进位位C C中。中。 CLR C ;CLR C ;清进位清进位 MOV A, R0 MOV A, R0 ADD A, R2 ; ADD A, R2

36、 ;低字节相加低字节相加(CY=?)(CY=?) DA A ; DA A ;BCDBCD调整调整 MOV R4, AMOV R4, A MOV A, R1 MOV A, R1 ADDC A, R3 ; ADDC A, R3 ;高字节相加高字节相加 DA A ;DA A ;BCDBCD调整调整 MOV R5, AMOV R5, A SJMP $ SJMP $2.4 2.4 控制转移指令控制转移指令 ( (强迫改变强迫改变PCPC值值) ) 2.4.1 2.4.1 调用子程序及返回指令调用子程序及返回指令 主程序需要使用子程序时用主程序需要使用子程序时用调用指令调用指令 子程序的最后安排一条子程序

37、的最后安排一条返回指令返回指令 子程序调用子程序调用: :长调用指令长调用指令LCALLLCALL 短调用指令短调用指令ACALLACALL1. 1. 长调用指令长调用指令 LCALL addr16 ; addr16 PC0-15,LCALL addr16 ; addr16 PC0-15,三字节三字节 addr16:addr16:子程序地址子程序地址 ( (目的地址目的地址, ,子程序名子程序名) ) 操作操作: :断点地址断点地址( (当前当前PC)PC)计算计算, , PC+3PC+3PCPC 断点地址断点地址( (当前当前PC)PC)入栈,入栈,SP+1SP,PC0-7(SP)SP+1S

38、P,PC0-7(SP) SP+1SP,PC8-15(SP) SP+1SP,PC8-15(SP) 子程序地址子程序地址PC , PC , 即即addr16PC0-15addr16PC0-151) LCALL1) LCALL可调用可调用64KB64KB范围内的子程序范围内的子程序2) 2) 指令执行后不影响任何标志指令执行后不影响任何标志3) 3) 机器码机器码: :12, addr16H, addr16L12, addr16H, addr16L2. 2. 短调用指令短调用指令 ( (绝对调用指令绝对调用指令) ) ACALL addr11 ; addr11PC0-10, ACALL addr11

39、 ; addr11PC0-10,二字节二字节 addr11:addr11:子程序地址子程序地址( (目的地址,子程序名目的地址,子程序名) ) 操作操作: : 当前当前PCPC计算,计算, PC+2PC+2PCPC 断点地址断点地址( (当前当前PC)PC)入栈入栈, , SP+1SP,PC0-7(SP)SP+1SP,PC0-7(SP) SP+1SP,PC8-15(SP) SP+1SP,PC8-15(SP) 子程序地址子程序地址PC , PC , 即即addr11PC0-10addr11PC0-10,PC11-15PC11-15不变不变 1)1)当前当前PC PC 与子程序入口同在一与子程序入

40、口同在一基本基本2KB2KB地址范围内地址范围内2) 2) 指令执行后不影响任何标志指令执行后不影响任何标志3) 3) 机器码机器码:a:a1010a a9 9a a8 81000110001a a7 7a a6 6a a5 5a a4 4a a3 3a a2 2a a1 1a a0 0( (二字节二字节) )ROMROM空间空间3232个个基本基本2K2K地址地址(PC11-PC15(PC11-PC15同同) )范围范围 0000H-07FFH,0800H-0FFFH,1000H-17FFH,1800H-1FFFH 0000H-07FFH,0800H-0FFFH,1000H-17FFH,18

41、00H-1FFFH 2000H-27FFH,2800H-2FFFH,F800H-FFFFH 2000H-27FFH,2800H-2FFFH,F800H-FFFFH 例例:1):1) 知知MA=07FFH,MA=07FFH,执行指令执行指令MA:ACALL 0810HMA:ACALL 0810H正确否正确否? ? 知知MA=07F0H,MA=07F0H,执行指令执行指令MA:ACALL 0810HMA:ACALL 0810H正确否正确否? ? 2)2)知知MA=0500H,MA=0500H,执行指令执行指令 MOV SP,#30HMOV SP,#30H MA:LCALL 8192H MA:LCA

42、LL 8192H 堆栈中数据如何变化堆栈中数据如何变化? SP=? PC=? SP=? PC=?答案答案: :1) , 1) , 2)SP=32H,PC=8192H,(31H)=03H,(32H)=05H2)SP=32H,PC=8192H,(31H)=03H,(32H)=05H 3. 3. 子程序返回指令子程序返回指令 ( (程序末尾程序末尾) ) RETRET; ;(SP)PC8-15,SP-1SP(SP)PC8-15,SP-1SP (SP)PC0-7, SP-1SP (SP)PC0-7, SP-1SP 恢复断点恢复断点, , 返回主程序返回主程序 4. 4. 中断返回指令中断返回指令 (

43、(程序末尾程序末尾) ) RETI ;RETI ;(SP)PC8-15,SP-1SP(SP)PC8-15,SP-1SP (SP)PC0-7, SP-1SP (SP)PC0-7, SP-1SP 恢复断点恢复断点, , 返回主程序返回主程序, ,清除中清除中断状态标志断状态标志2.4.2 2.4.2 转移指令转移指令1 1、 无条件转移指令无条件转移指令(1) (1) 短转移指令短转移指令 ( (绝对转移绝对转移) ) AJMP addr11AJMP addr11; addr11 PC0-10,; addr11 PC0-10,二字节二字节 addr11:addr11:目的地址(目的地址(标号标号)

44、 操作操作: :当前当前PCPC计算计算, , PC+2PCPC+2PC 目的地址目的地址PC ,PC ,即即addr11PC0-10 (PC11-15addr11PC0-10 (PC11-15不变不变) )注意注意: :1)1)当前当前PC PC 与目的地址同在与目的地址同在一基本一基本2KB2KB地址范围(地址范围(转移转移) 2) 2) 指令执行后不影响任何标志指令执行后不影响任何标志3) 3) 机器码机器码:a:a1010a a9 9a a8 80000100001a a7 7a a6 6a a5 5a a4 4a a3 3a a2 2a a1 1a a0 0( (二字节二字节) )(

45、2 2) 长转移指令长转移指令 LJMP addr16 ;PCaddr16 LJMP addr16 ;PCaddr16 (64K(64K范围范围,3,3字节字节) )注意注意: :1) 1) 指令执行后不影响任何标志指令执行后不影响任何标志2)2)机器码机器码:02, addr16H, addr16L(:02, addr16H, addr16L(三字节三字节) )例如例如: : 在程序存储器在程序存储器0000H0000H单元存放一条指令单元存放一条指令: : LJMP 3000H; PC3000H, LJMP 3000H; PC3000H,机器码机器码 02 30 0002 30 00 则上

46、电复位后程序将跳到则上电复位后程序将跳到3000H 3000H 单元去执行用户程序单元去执行用户程序(3 3) 间接转移指令间接转移指令 JMP A+DPTR ; JMP A+DPTR ; PCA+DPTRPCA+DPTR目的地址送入目的地址送入PCPC不改变不改变A A和和DPTRDPTR的内容的内容 ( (无符号数无符号数) )不影响标志不影响标志例例2-22:2-22: 根据累加器根据累加器A A的数值的数值, , 转不同处理程序的入口转不同处理程序的入口 MOV DPTR, MOV DPTR, TABLE ; TABLE ; 表首址送表首址送DPTRDPTR JMP A+DPTR ;

47、JMP A+DPTR ; 依据依据A A值转移值转移 TABLE: AJMP PROC0 ; TABLE: AJMP PROC0 ; 当当A=0A=0时转时转PROC0PROC0执行执行 AJMP AJMP PROC1 PROC1 ; ; 当当A=2A=2时转时转PROC1PROC1执行执行 AJMP AJMP PROC2PROC2 ; ; 当当A=4A=4时转时转PROC2PROC2执行执行注意注意:A:A内容为偶数内容为偶数 将将AJMPAJMP换为换为LJMP,A=? (A=0,1,2,3LJMP,A=? (A=0,1,2,3. .必须有必须有A*3)A*3)(4 4)无条件相对转移()

48、无条件相对转移(2 2字节字节) SJMP SJMP relrel; As+2; As+2PCPC当前当前 ( (当前当前PCPC) ) PC PC当前当前+ +relrelPCPC目的目的( (目的地址目的地址) ) relrel:相对偏移量,为:相对偏移量,为8 8位补码位补码 机器码机器码:80,rel80,rel relrel PCPC目的目的PCPC当前当前 (目的地址当前(目的地址当前PCPC)补码补码 原地踏步指令原地踏步指令( (动态暂停动态暂停):):HEHE: SJMP HESJMP HE 常写成:常写成: SJMP $ SJMP $ (机器码(机器码80H,FEH)80H

49、,FEH)80HrelXXXX SJMPSJMP当前当前PCPC(下一指令下一指令)-128+127当前当前PCPC为为基准基准特点特点:两字节指令两字节指令本指令本指令PC+2PC+2当前当前PCPC转移范围转移范围: -128+127( -126+129 ) SJMP 转移范围转移范围 XX XX当前当前PCPC为为基准基准2. 2. 条件转移指令条件转移指令 ( (转移范围有限转移范围有限) )(1)(1)累加器判累加器判0 0 转移转移 (2(2条条,2,2字节字节) )(2)(2)JZ JZ relrel; ; A=0 A=0 转移转移, ,去去As+2+As+2+relPCrelP

50、C目的目的, ,否则否则As+2PCAs+2PC当前当前JNZ JNZ relrel; ; A0 A0 转移转移, ,去去As+2+relPCAs+2+relPC目的目的, ,否则否则As+2PCAs+2PC当前当前 转移范围:转移范围:PCPC当前当前为中心的为中心的 256 256 个字节个字节 (128128 +127+127)注意注意: : 长转移长转移: 64KB: 64KB范围范围 短转移短转移: : 同一基本同一基本2KB2KB范围范围 相对转移相对转移:256B:256B范围范围 (2 2) 减减 1 1不为不为0 0转移指令转移指令 (2(2条条) ) DJNZ DJNZRn

51、Rn, , relrel;2 2字节指令字节指令,Rn-1Rn, ,Rn-1Rn, 若若Rn0,Rn0, 转移去转移去As+2+rel PCAs+2+rel PC目的目的; ; 若若RnRn=0,=0,顺序执行顺序执行As+2PCAs+2PC当前当前 DJNZ dir, DJNZ dir, relrel;3 3字节指令字节指令 转移地址的计算方法同前转移地址的计算方法同前共性:共性:减减1 1后结果回传后结果回传 例例2-232-23 说明程序运行后说明程序运行后A=?A=? MOV 23H MOV 23H,#0AH ;#0AH ;(23H)#0AH(23H)#0AH CLR A ; CLR

52、A ;A0A0 LOOPLOOP: ADD AADD A,23H ;23H ;AA+(23H)AA+(23H) DJNZ 23H DJNZ 23H,LOOP LOOP ;(23H)-10,;(23H)-10,转移去转移去LOOPLOOP SJMP $ ; SJMP $ ;否则顺序执行否则顺序执行答案答案:A=10+9+8+7+6+5+4+3+2+1=55=37H :A=10+9+8+7+6+5+4+3+2+1=55=37H DJNZ DJNZ A,relA,rel ? ? (3 3) 比较转移指令比较转移指令 (4(4条条,3,3字节字节) ) CJNE A, dir, CJNE A, dir

53、, relrel ; ;A-(dir )0CY=0A-(dir )0CY=0 A-(dir ) A-(dir )0CY=10CY=1 A(dirA(dir),),转移转移(As+3+relPC(As+3+relPC目的目的) ) A=(dir ), A=(dir ),顺序执行顺序执行(As+3PC(As+3PC当前当前) )CJNE A, CJNE A, data, data, relrelCJNE CJNE RnRn, , data, data, relrelCJNE Ri, CJNE Ri, data, data, relrel功能功能: :比大小比大小, ,判相等判相等, ,定转移定转移

54、? ?( (相减结果不回传相减结果不回传, ,影响影响CY,CY,不影响操作数不影响操作数) ) 例例2-242-24:R7R756H56H,指令指令CJNE R7, #34H, $+08HCJNE R7, #34H, $+08H执行执行后,程序转移到放本条后,程序转移到放本条CJNECJNE指令的首地址指令的首地址($)($)加加08H08H后的后的地址单元去执行。地址单元去执行。 relrel=? =? relrel=($+08H)-($+03H)=05H ?=($+08H)-($+03H)=05H ? relrel=($+08H)-($)=08H ?=($+08H)-($)=08H ?

55、relrel PCPC目的目的PCPC当前当前 (目的地址当前(目的地址当前PCPC)补码补码2.4.3 2.4.3 空操作指令空操作指令 NOP NOP ;PCPC+1 PCPC+1 , 机器码机器码 0000 单字节指令单字节指令 消耗一个消耗一个MCMC的时间的时间 不影响标志位不影响标志位2.4.4 2.4.4 指令应用举例指令应用举例例例2-28 2-28 将将累累加加器器的的低低4 4位位取取反反4 4次次,高高4 4位位不不变变。每每变变换换一一次次,从从P1P1输出输出。 分分析析:异异或或运运算算的的规规则则是是一一个个数数与与0 0异异或或,该该数数不不变变;与与1 1异异

56、或或, ,该数取反;该数取反;高高4 4位位不不变变,高高4 4位位与与0 0异异或或;低低4 4位位取取反反,低低4 4位位与与1 1异异或或,因因此此A A和和0FH0FH异或异或方法一方法一 加加1 1计数:计数: MOV R0, #0MOV R0, #0 LL LL: XRL A, #0FH XRL A, #0FH INC R0 INC R0 MOV P1, A MOV P1, A CJNECJNE R0, #04, LL R0, #04, LL RET RET 方法二方法二 减减1 1计数:计数: MOV R0, #04HMOV R0, #04H LL LL: XRL A, #0FH

57、 XRL A, #0FH MOV P1, A MOV P1, A DJNZDJNZ R0, LL R0, LL RETRET例例2-292-29 在在内内部部RAM RAM 的的40H40H地地址址单单元元中中,有有1 1字字节节符符号号数数,编编写写求求其绝对值后放回原单元的程序。其绝对值后放回原单元的程序。MOV A, 40H MOV A, 40H ;A(40H);A(40H)ANL A, #80H ANL A, #80H ; ;判断判断A A中数为正负中数为正负? ?JNZ NEG JNZ NEG ;A0,;A0,为负数转移为负数转移SJMP $ SJMP $ ;A=0,;A=0,为正数

58、为正数, ,不操作不操作 NEG: MOV A, 40H NEG: MOV A, 40H ; ;求补求补, ,取绝对值取绝对值CPL A CPL A ; ;取反取反 INC A INC A ; ;加加1 1 MOV 40H, A MOV 40H, A ;(40H);(40H)绝对值绝对值 SJMP $ SJMP $ ; ;暂停暂停 2.5 2.5 位操作指令位操作指令 表表 1 1 位位 操操 作作 指指 令令指令中位地址表达指令中位地址表达: (1) (1) 直接地址方式直接地址方式: : 如如 D4HD4H; ; (2) (2) . . 操作符方式操作符方式: : 如如PSW.4PSW.4

59、; ; (3) (3) 位名称方式位名称方式: : 如如 RS1RS1; ; (4) (4) 用户定义名方式用户定义名方式: : 如用伪指令如用伪指令 BITBIT定义:定义: ABC BIT D4HABC BIT D4H位操作对象:位操作对象:CYCY 内内RAMRAM中位寻址区中位寻址区( (20H2FH20H2FH中位地址中位地址) ) SFR SFR中可位寻址的寄存器中可位寻址的寄存器( (1111个个) ) 1.1.位清位清0 0 CLR C CLR C CLR bit CLR bit 2. 2.位置位置1 1 SETB C SETB C SETB bit SETB bit 3. 3

60、.位求反位求反 CPL CCPL C CPL bit CPL bit 清清“0”,0”,置置“1”, 1”, 取反取反操操作作, , 不影响其它标志不影响其它标志 4. 4. 位与位与 ANL C, bitANL C, bit ; ; CYCYCY(bitCY(bit) ) ANL C, /bit ANL C, /bit; ; CYCY(bitCYCY(bit) ) 5. 5. 位或位或 ORL C, bit ; CYCY (bit)ORL C, bit ; CYCY (bit) ORL C, /bit ORL C, /bit ; CYCY (bit) ; CYCY (bit) 注意注意: :

61、无位异或指令;无位异或指令; 不改变不改变bitbit中内容;中内容; CYCY为目的操作数为目的操作数例如例如: ANL C, /ACC.0 : ANL C, /ACC.0 执行前执行前ACC.0 ACC.0 为为 0 0, CY, CY为为 1,1, 则指令执行后则指令执行后 CYCY为为 1, 1, 而而 ACC.0ACC.0为为 ? 6. 6. 位传送位传送 MOV C, bitMOV C, bit MOV bit, C MOV bit, C 其中一操作数必须为其中一操作数必须为CyCy另一操作数是可直接寻址位另一操作数是可直接寻址位无无 MOV bit1 , bit2MOV bit1

62、 , bit2 7. 7. 位转移位转移 JC JC relrel ; ; 若若Cy=1Cy=1, , 则转移,则转移, PCPC目的目的As+2+relAs+2+rel JNC JNC relrel ; ; 若若Cy=0Cy=0, , 则转移,则转移,PCPC目的目的As+2+rel As+2+rel JB bit, JB bit, relrel ; ; 若若(bit)=1(bit)=1, , 则转移,则转移,PCPC目的目的As+3+relAs+3+rel JNB bit, JNB bit, relrel ; ;若若(bit)=0(bit)=0, , 则转移,则转移,PCPC目的目的As+

63、3+relAs+3+rel JBC JBC bit,relbit,rel ; ;若若(bit)=1(bit)=1, ,则转移,则转移,PCPC目的目的As+3+rel,As+3+rel,并并 bit0bit0 以上条件不满足以上条件不满足, ,则程序顺序执行;则程序顺序执行; 前前4 4条指令条指令CYCY与与bitbit内容不因转移是否发生改变内容不因转移是否发生改变例例2 23030 用用位位操操作作指指令令实实现现X=X0X1,X=X0X1,设设X0X0为为P1.0P1.0,X1X1为为P1.1P1.1,X X为为ACC.0ACC.0。解解 (1) (1) 编程如下:编程如下:(X=X0

64、X1=X0X1+X0X1)(X=X0X1=X0X1+X0X1) X BIT ACC.0X BIT ACC.0 X0 BIT P1.0 X0 BIT P1.0 X1 BIT P1.1 X1 BIT P1.1 MOV C, X0 MOV C, X0 ANL C, /X1 ANL C, /X1 MOV 20H,C MOV 20H,C MOV C, X1 MOV C, X1 ANL C, /X0 ANL C, /X0ORL C, 20HORL C, 20HMOV X, CMOV X, CSJMP $SJMP $小小 结结(1 1)5151系列单片机指令系统的特点是不同存系列单片机指令系统的特点是不同存储空间寻址方式不同,适用的指令不同,储空间寻址方式不同,适用的指令不同,必须进行区分。必须进行区分。(2 2)指令是程序设计的基础,应重点掌握传指令是程序设计的基础,应重点掌握传送指令、算术运算指令、逻辑运算指令、送指令、算术运算指令、逻辑运算指令、控制转移指令和位操作指令,掌握指令的控制转移指令和位操作指令,掌握指令的功能,操作的对象和结果,对标志位的影功能,操作的对象和结果,对标志位的影响,应要求熟记。响,应要求熟记。作业作业2.32.42.52.92.152.17

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号