第2章指令系统_第1页
第2章指令系统_第2页
第2章指令系统_第3页
第2章指令系统_第4页
第2章指令系统_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章 指令系统 内容提要内容提要 寻址方式寻址方式 传送与交换指令传送与交换指令 算术运算、逻辑运算指令算术运算、逻辑运算指令 控制转移指令控制转移指令 位操作指令位操作指令 计算机通过执行程序完成人们指定的任务,计算机通过执行程序完成人们指定的任务, 程序由一条一条指令构成,能为程序由一条一条指令构成,能为CPUCPU识别并执行识别并执行 的指令的集合就是该的指令的集合就是该CPUCPU的的指令系统指令系统。 MCS-51 MCS-51单片机汇编语言指令格式单片机汇编语言指令格式: : 操作符操作符 目的操作数,源操作数目的操作数,源操作数 操作符指明该指令完成什么操作;操作符指明该指令完

2、成什么操作; 操作数是指明该指令的操作对象。操作数是指明该指令的操作对象。 指令中操作数提供的方式称为指令中操作数提供的方式称为寻址方式寻址方式 指令中的常用符号指令中的常用符号 Rn: n=(0Rn: n=(07 7),表示当前工作寄存器),表示当前工作寄存器R0R0R7R7中中 的一个。的一个。 Ri: i=(0Ri: i=(0、1 1),代表),代表R0R0和和R1R1寄存器中的一个,寄存器中的一个, 用作间接寻址寄存器。用作间接寻址寄存器。 dir : 8 dir : 8 位直接字节地址(片内位直接字节地址(片内 RAM RAM 和和 SFR SFR ) #data: 8#data:

3、8位立即数,即位立即数,即8 8位常数。可以为位常数。可以为2 2进制进制 (B B)、)、 1010进制、进制、 1616进制(进制(H H)、)、 字符字符 ( ) # data16: # data16: 表示表示1616位立即数,即位立即数,即1616位常位常 数,取值范围为数,取值范围为#0000H#0000H#0FFFFH#0FFFFH addr16 : addr16 : 表示表示1616位地址位地址 addr11 : addr11 : 表示表示1111位地址位地址 rel : rel : 相对偏移量(为一字节补码)用相对偏移量(为一字节补码)用 于相对转移指令中于相对转移指令中 b

4、it :bit :位地址,在位地址空间中。位地址,在位地址空间中。 $: $: 表示当前指令的地址。表示当前指令的地址。 寻址方式寻址方式 1 1、立即寻址、立即寻址 指令中直接给出操作数的寻址方式。在指令中直接给出操作数的寻址方式。在 5151系列单片机的指令系统中,立即数用系列单片机的指令系统中,立即数用 一个前面加一个前面加 “# #“号的号的8 8位数位数(#data(#data,如,如 #30H)#30H)或或1616位数位数(#data16(#data16,如,如#2052H)#2052H)表表 示。立即寻址中的数,称为立即数。示。立即寻址中的数,称为立即数。 例如指令:例如指令:

5、MOV AMOV A,#30H (7430)#30H (7430) MOV DPTRMOV DPTR,#3000H (903000)#3000H (903000) 2 2、直接寻址、直接寻址 操作数的地址直接出现在指令中。操作数的地址直接出现在指令中。 寻址对象:寻址对象: 内部数据存贮器:使用它的地址。内部数据存贮器:使用它的地址。 特殊功能寄存器:既可使用它的地址,也可以直特殊功能寄存器:既可使用它的地址,也可以直 接使用寄存器名。接使用寄存器名。 41H 78H 40H 56H 41H 78H 40H 78H 3 3、寄存器寻址、寄存器寻址 操作数存放在寄存器中。操作数存放在寄存器中。

6、寻址对象:寻址对象:A A,B B,DPTRDPTR,R0R0R7 R7 。 B B仅在乘除法指令中为寄存器寻址,在其他仅在乘除法指令中为寄存器寻址,在其他 指令中为直接寻址。指令中为直接寻址。 A A可以寄存器寻址又可以直接寻址,直接寻可以寄存器寻址又可以直接寻址,直接寻 址时写作址时写作ACCACC 例如:例如:MOV AMOV A,R0 ;R0AR0 ;R0A,A A、R0R0均为寄存器寻均为寄存器寻 址,机器码址,机器码E8 E8 MUL AB ;AMUL AB ;A* *BBABBA,A A、B B为寄存器寻为寄存器寻 址,机器码址,机器码A4A4 MOV B,R0 ;R0B,R0为

7、寄存器寻址,为寄存器寻址,B为为 直接寻址直接寻址 机器码机器码 88F0,其中,其中 F0 为为B的字节地址(见表的字节地址(见表1-2) PUSH ACC ;A的内容压入堆栈,直接寻址的内容压入堆栈,直接寻址 机器码机器码C0E0 4.4.寄存器间接寻址寄存器间接寻址(二次寻址,与(二次寻址,与RAMRAM有关有关) ) 以寄存器中的内容为地址,该地址中的内以寄存器中的内容为地址,该地址中的内 容为操作数的寻址方式容为操作数的寻址方式 1 1、使用、使用R0R0、R1R1及及DPTRDPTR 2 2、符号为、符号为“ ”。 3 3、存储器空间包括、存储器空间包括内内RAM(MOVRAM(M

8、OV指令指令) )和和外外RAM RAM (MOVX(MOVX指令指令) ) 操作数存放在以寄存器内容为地址的单元中。操作数存放在以寄存器内容为地址的单元中。 例如:例如: MOV R0,#20H MOV R0,A ;A(20H) 地址的内部地址的内部RAM MOVX A,R1 ;外部外部RAM(地址为(地址为P2R1 ) 的的 内容内容A MOVX DPTR,A ;A以以DPTR内容为地址内容为地址 的外部的外部RAM 对于外对于外RAMRAM最大寻址可达最大寻址可达64KB64KB 1),1), 由由P2P2提供高提供高8 8位地址,由位地址,由R R0 0或或R R1 1 提供低提供低8

9、 8位地址位地址( (高高8 8位位, ,低低8 8位位) ) 2),2),由由DPTRDPTR作寄存器间接寻址作寄存器间接寻址( (1616位位) ) 区别区别: :寄存器寻址寄存器寻址: :寄存器内容为操寄存器内容为操 作数作数 寄存器间接寻址寄存器间接寻址: :寄存器内容为操寄存器内容为操 作数所在存储单元地址作数所在存储单元地址 例例 MOV R0, AMOV R0, A ;A ;A以以R0R0内容内容 为地址的为地址的内部内部RAMRAM。 片内RAM R0 A 图图2-1 MOV R0, A MOVX A, R1 ; 外部外部RAM(地址为(地址为P2R1)的内容)的内容A MOV

10、X DPTR, A ; A以以DPTR内容为地址的内容为地址的外部外部RAM 片外RAM R1 A xx xx P2 图2-2 MOVX A, R1 片外RAM DPTR A xx 图2-3 MOVX DPTR, A xx 5 5 、变址寻址、变址寻址( (与与ROMROM有关有关,2,2条条) ) 以以DPTRDPTR或或PCPC的内容加上的内容加上A A的内容之和作为操作的内容之和作为操作 数的地址,其中累加器数的地址,其中累加器A A内容是可变的内容是可变的 1)1)只有读操作,无写操作。只有读操作,无写操作。 2)2)指令采用指令采用MOVCMOVC。 例 MOVC A, A+DPTR

11、MOVC A, A+DPTR ; A(A+DPTR) ; A(A+DPTR) MOVC A, A+PCMOVC A, A+PC ;(A+PC) A ;(A+PC) A 注意注意: :目的操作数无变址寻址(无目的操作数无变址寻址(无MOVC A+DPTRMOVC A+DPTR,A A ) 该指令寻址及操作功能如图该指令寻址及操作功能如图2424所示所示 图24 MOVC A, A+DPTR示意图 6 6、相对寻址、相对寻址 相对寻址是将程序计数器相对寻址是将程序计数器PCPC的当前值与指的当前值与指 令第二字节给出的偏移量相加,从而形成转移的令第二字节给出的偏移量相加,从而形成转移的 目标地址。

12、目标地址。 例如:例如:JZ 61H JZ 61H SJMP 08H SJMP 08H 1)1)当前当前PCPC值是指相对转移指令所在地址(称为源地值是指相对转移指令所在地址(称为源地 址)加上转移指令字节数。址)加上转移指令字节数。 即即: : 当前当前PCPC值值 = = 源地源地 址址 + + 转移指令字节数。转移指令字节数。 例如例如: : JZ relJZ rel 是一条累是一条累 加器加器A A为零就转移的双字节指令。若该指令地址为零就转移的双字节指令。若该指令地址 (源地址)为(源地址)为2050H, 2050H, 则执行该指令时的当前则执行该指令时的当前PCPC值值 即为即为2

13、052H2052H。 2)2)偏移量偏移量relrel是有符号的单字节数是有符号的单字节数, , 以补码表示以补码表示, ,其其 相对值的范围是相对值的范围是-128-128+127+127(即(即80H80H7FH7FH), , 负数负数 表示从当前地址向上转移表示从当前地址向上转移, , 正数表示从当前地址向正数表示从当前地址向 下转移下转移。 3)目的地址目的地址 = = 当前当前PCPC值值 + rel = + rel = 源地址源地址 + + 转移指令字节数转移指令字节数 + rel+ rel 例如:例如: 指令指令JZ 08HJZ 08H和和JZ 0F4H JZ 0F4H 表示累加

14、器表示累加器 A A为零条件满足后为零条件满足后, , 从源地址(从源地址(2050H2050H)分别向)分别向 下、向上转移下、向上转移1010个单元。其相对寻址示意如图个单元。其相对寻址示意如图 25-1(a)25-1(a)、(b)(b)所示。这两条指令均为双字节所示。这两条指令均为双字节 指令指令, , 机器代码分别为机器代码分别为: 60H 08H: 60H 08H和和60H F4H60H F4H。 图2-5-1 相对寻址示意图 (a)指令JZ 08H寻址示意图; (b)指令JZ F4H寻址示意图 7 7、位寻址、位寻址 对片内对片内RAM中中20H2FH中的中的128个位地址及个位地

15、址及 SFR中的可位寻址的位地址寻址。中的可位寻址的位地址寻址。 例如:例如: MOV C,20H;20H位的内容送位的内容送CY标志标志 位,位,C称为位累加器。称为位累加器。 MOV A,20H ;字节寻址,将内部;字节寻址,将内部 RAM中中20H单元中的单元中的 内容送给累加器内容送给累加器A。 究竟是位寻址还是字节寻址,根据两操作数究竟是位寻址还是字节寻址,根据两操作数 类型一致的原则,由另一个操作数决定。类型一致的原则,由另一个操作数决定。 寻址方式寻址方式: : (1 1) 立即寻址立即寻址; ; (源)(源) (2 2) 直接寻址直接寻址; ; (源,目)(源,目) (3 3)

16、 寄存器寻址寄存器寻址; ; (源,目)(源,目) (4 4) 寄存器间接寻址寄存器间接寻址; ; (源,目)(源,目) (5 5) 基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址 (源)(源) (6 6) 相对寻址相对寻址; ; (源)(源) (7 7) 位寻址。位寻址。 (源,目)(源,目) 2.2 2.2 数据传送与交换指令数据传送与交换指令 2.2.1 2.2.1 传送类指令传送类指令 1. 1. 传送指令传送指令MOVMOV(内(内RAM RAM SFR, SFR,拷贝)拷贝) 图图2 26 6示意了示意了MOVMOV的操作,图中的操作,图中表示单向表示单向 传送,传送

17、,表示相互传送,箭头指向目的操作表示相互传送,箭头指向目的操作 数。数。 (1 1)以)以A A为目的操作数为目的操作数 dir Rn Ri #data A 图图26 MOV指令指令 Rn ;RnA dir ;dirA Ri ;(Ri) A #data ;#dataA MOV A, 例例27 R1=20H,(20H)=55H,指令指令MOV A, R1 执行后,执行后,A=55H。 (2) 以以Rn为目的操作数为目的操作数 A ; A Rn MOV Rn, dir ;dir Rn #data ;#data Rn 例例28 (40H)30H,指令,指令MOV R7, 40H执行后,执行后,R7=

18、30H。 (3) (3) 以以DPTRDPTR为目的操作数为目的操作数 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 以直接地址为目的操作数以直接地址为目的操作数 A ;A dir Rn ;Rn dir MOV dir, dir1 ;dir1 dir Ri ;(Ri) dir

19、 #data ;#datadir 例例2 21010 R0 = 50H,(50H)=10H,R0 = 50H,(50H)=10H,指令指令MOV 35H, R0MOV 35H, R0执执 行后,(行后,(35H35H)10H10H。这一操作也可以用指令。这一操作也可以用指令MOV 35H, MOV 35H, 50H50H来完成。来完成。 (5 5)以间接地址为目的操作数)以间接地址为目的操作数 A ;A (Ri) MOV Ri, dir ;dir (Ri) #data ;data (Ri) 2. 2. 外部外部RAMRAM和和A A之间的传送之间的传送 (1 1)访问外)访问外RAMRAM指令

20、指令( (读读/ /写写,4,4条条) ) i) MOVX Ri, A ;A(P2Ri )i) MOVX Ri, A ;A(P2Ri ) ii) MOVX DPTR, A ; A(DPTR ) ii) MOVX DPTR, A ; A(DPTR ) iii) MOVX A, Ri ; (P2Ri ) Aiii) MOVX A, Ri ; (P2Ri ) A iv) MOVX A, DPTR ;(DPTR) Aiv) MOVX A, DPTR ;(DPTR) A 这组指令是:在这组指令是:在A A与外与外RAMRAM单元或单元或I/OI/O口之间进行数口之间进行数 据传送据传送, (2 2)访问

21、程序存储器指令)访问程序存储器指令( (只读不写只读不写 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 ; MOVC A, A+PC ;取完该指令取完该指令PCPC=M1,A+PC=2+M1=M1,A+PC=2+M1 M1:R

22、ET M1:RET M2:DB 66H,77H,88H,99H M2:DB 66H,77H,88H,99H 执行执行MOVCMOVC指令后指令后A=77HA=77H 传送类指令传送类指令 MOV :MOV :内内RAM,SFR RAM,SFR MOVX: MOVX:外外RAM,I/ORAM,I/O口口 MOVC:ROM(MOVC:ROM(内内, ,外外) ) 例:MOV A, R0:MOV A, R0 ;以以R0R0的内容为地址的内容为地址 ,把该,把该 地址中的内容送到地址中的内容送到 A A中去。中去。 A(R0) A(R0) MOV A, R0MOV A, R0 ; ;将将R0R0的内容

23、送到的内容送到A A去。去。AR0AR0 MOV A, #20H MOV A, #20H ;A=20H A;A=20H A的内容为的内容为20H20H MOV A, 20H MOV A, 20H ;A=(20H)A;A=(20H)A的内容为的内容为20H20H中的中的 内容内容 注意注意以上两组指令的不同点以上两组指令的不同点 例查表法求 Y=X2。设 X(0X15)在片内 RAM 20H单元, 要求将查表求 Y,存入片内 RAM 21H单元 1)用)用DPTR作基址寄存器作基址寄存器 ORG 0100H SQU: MOV DPTR,#TAB ;确定表首地址;确定表首地址 MOV A,20H

24、;取取 X MOVC A,A+DPTR ;查表求查表求 Y=X2 MOV 21H,A ;保存保存Y RET ;子程序结束子程序结束 ;其它程序段;其它程序段 指令地址指令地址 源程序源程序 ORG 0100H;程序起始地址程序起始地址 0100HSQU: MOV A,20H;取取X 0102H ADD A,#3;修正偏移量修正偏移量 0104HMOVC A,A+PC ;查表求查表求Y=X2 0105H MOV 21H,A;存结果存结果 0107HRET ;子程序结束子程序结束 0108HTAB: DB 00,01,04 ;平方表平方表 010BHDB 09,225 思考题思考题当当0X255时

25、,如何用查表法编程求时,如何用查表法编程求Y=X2 2)用PC作基址寄存器 3. 3. 堆栈操作堆栈操作( (内内RAM ,SFR,)RAM ,SFR,) PUSH dirPUSH dir; ;入栈操作,入栈操作,SP+1SP+1SP,(dir) (SP)SP,(dir) (SP) POP dirPOP dir; ;出栈操作,出栈操作,(SP) (SP) (dir)(dir),SP-1SP-1SPSP 1)1)堆栈在内部堆栈在内部RAMRAM中中 2)2)先进后出先进后出, ,字节操作字节操作 3)3)初始化初始化SP=07HSP=07H 4)4)直接寻址直接寻址 例如例如: : 进入中断服务

26、子程序时进入中断服务子程序时, , 把程序状态寄存器把程序状态寄存器PSWPSW、 累加器累加器A A、数据指针、数据指针DPTRDPTR进栈保护。则程序段进栈保护。则程序段 MOV SP,#60HMOV SP,#60H PUSH PSW PUSH PSW PUSH ACC PUSH ACC PUSH DPL PUSH DPL PUSH DPH PUSH DPH 执行后执行后, SP=? SP=64H, SP=? SP=64H POP DPHPOP DPH POP DPL POP DPL POP ACC POP ACC POP PSW POP PSW 执行之后执行之后, SP, SP内容修改为

27、内容修改为60H60H MCS -51 MCS -51 提供一个向上升的堆栈提供一个向上升的堆栈, , 因此因此SPSP设置初设置初 值时要充分考虑堆栈的深度值时要充分考虑堆栈的深度, , 要留出适当的单元空间要留出适当的单元空间, , 满足堆栈的使用。满足堆栈的使用。 例例 若在外部程序存储器中若在外部程序存储器中2000H2000H单元开始依次存放单元开始依次存放0909的的 平方值,数据指针平方值,数据指针DPTR=3A00HDPTR=3A00H,用查表指令取得,用查表指令取得2003H2003H单单 元的数据后,要求保持元的数据后,要求保持DPTRDPTR中的内容不变。中的内容不变。

28、完成上述功能的程序如下:完成上述功能的程序如下: MOV AMOV A,#03H#03H PUSH DPHPUSH DPH PUSH DPLPUSH DPL MOV DPTRMOV DPTR,#2000H#2000H MOVC AMOVC A,A+DPTRA+DPTR POP DPL POP DPL POP DPHPOP DPH 执行结果:执行结果:(A) 09H ,(DPTR)= 3A00H 。 2.2.2 2.2.2 交换指令交换指令 1.1.字节交换指令字节交换指令 XCH A , Rn XCH A , Rn ; A RnA Rn XCH A , dir XCH A , dir ; A

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

30、节交换 XCHD A, Ri ;A0-3 0-3 (Ri i) 0-3 0-3 3. A3. A的高、低半字节交换的高、低半字节交换 SWAP ASWAP A ;A0-3 0-3 A 4-7 4-7 思考:把片内思考:把片内RAMRAM中中50H50H地址单元中的内容与地址单元中的内容与40H40H 地址单元的内容互换。地址单元的内容互换。 (可用多种方法(可用多种方法: :堆栈法堆栈法, ,字节交换法字节交换法, ,直接地址直接地址 法等法等) PSW寄存器 注意注意 1)1)当当A A中中1 1的个数为奇数,的个数为奇数,P=1P=1,否则,否则P=0P=0。 2)MOV2)MOV类类,I

31、NC,DEC,INC,DEC,逻辑运算类不影响逻辑运算类不影响CY,OV,ACCY,OV,AC 3) 3)加减运算影响加减运算影响 P,CY,OV,ACP,CY,OV,AC 乘除后乘除后 CY=0 CY=0 乘积乘积255OV=1255OV=1 除数除数=0 OV=1=0 OV=1 2.3 2.3 算术运算和逻辑运算指令算术运算和逻辑运算指令 2.3.12.3.1对标志位的影响对标志位的影响 2.3.2 2.3.2 以以A A为目的操作数的算术运算和逻辑运算指令为目的操作数的算术运算和逻辑运算指令 共共2424条指令条指令。 加:加: ADDADD 进位加进位加: ADDC: ADDC 借位减

32、借位减: SUBB: SUBB 与:与: ANLANL 或:或: ORLORL 异或:异或: XRLXRL A, RiRi dirdir RnRn #data#data 带进位加法指令带进位加法指令 ADDC A, Rn ADDC A, Rn ;AA+Rn+CyAA+Rn+Cy ADDC A, Ri ADDC A, Ri ;AA+ (Ri) +CyAA+ (Ri) +Cy ADDC A, dir ADDC A, dir ;AA+(dir) +CyAA+(dir) +Cy ADDC A, ADDC A, data data ;AA+#data +CyAA+#data +Cy 对标志位的影响与对标

33、志位的影响与ADDADD相同相同 Cy:Cy:上一次进位标志上一次进位标志 用于多字节加法运算用于多字节加法运算 带借位减法指令带借位减法指令 SUBB A, Rn SUBB A, Rn ;AA-Rn-CyAA-Rn-Cy SUBB A, Ri SUBB A, Ri ;AA- (Ri) -CyAA- (Ri) -Cy SUBB A, dir SUBB A, dir ;AA-(dir) -CyAA-(dir) -Cy SUBB A, SUBB A, data data ;AA-#data AA-#data CyCy 要进行不带借位的减法要进行不带借位的减法, , 先将先将CyCy清清“0 0”。

34、 CLR C ;0CYCLR C ;0CY 2.3.3 2.3.3 以以dirdir为目的操作数的逻辑运算指令为目的操作数的逻辑运算指令 与:与: ANL ANL 或:或: ORL dir, ORL dir, 异或:异或:XRLXRL A A #data#data 一、逻辑与指令一、逻辑与指令 ANL dir, AANL dir, A ANL dir, ANL dir, datadata : : “与与” ,“有有0 0即即0 0,全,全1 1为为1 1” 0000 0111 0000 0111 ) 1111 11011111 1101 0000 0101 B 0000 0101 B 05H0

35、5H 二、二、 逻辑或指令逻辑或指令 ORL dir, AORL dir, A ORL dir, ORL dir, datadata : : “或或” ,“有有1 1即即1 1,全,全0 0为为0 0” 0000 0110 0000 0110 ) 0110 11010110 1101 0110 1111 B 0110 1111 B 6FH6FH 三、三、 逻辑异或指令逻辑异或指令 XRL dir, AXRL dir, A XRL dir, XRL dir, datadata : : “异或异或” “相异为相异为1 1,相同为,相同为0 0” 0000 0110 0000 0110 ) 0110

36、 11010110 1101 0110 1011 B 0110 1011 B 6BH6BH 2.3.4 2.3.4 加加1,1,减减1 1指令指令 加加1 1指令指令 INC A INC A ;AA+1AA+1 INC Rn INC Rn ;Rn Rn +1Rn Rn +1 INC dir INC dir ;dirdir(dir)+1dir)+1 INC Ri INC Ri ;(Ri) (Ri) +1(Ri) (Ri) +1 INC DPTR INC DPTR ;DPTRDPTR+1(DPTRDPTR+1(唯一唯一1616位运位运 算指令算指令) ) 对标志位不产生影响对标志位不产生影响 若:

37、若: (A A)0FFH ; 0FFH ; Cy=0Cy=0 执行:执行: INC AINC A 结果:(结果:(A A)00H ; 00H ; Cy=0Cy=0 减减1 1指令指令 DEC A DEC A ;AAAA1 1 DEC Rn DEC Rn ;Rn RnRn Rn1 1 DEC dir DEC dir ;dirdir(dir)dir)1 1 DEC Ri DEC Ri ;(Ri)(Ri)(Ri)(Ri)1 1 对标志位不产生影响对标志位不产生影响 若:若: (A A)00H ; 00H ; Cy=0Cy=0 执行:执行: DEC ADEC A 结果:(结果:(A A)0FFH ;

38、0FFH ; Cy=0Cy=0 无无 DEC DPTRDEC DPTR 指令指令 2.3.5 2.3.5 十进制调整指令十进制调整指令 DA ADA A 用途:用途:紧跟在加法指令(紧跟在加法指令( BCDBCD码加码加, ,不包括减不包括减 法)之后,进行十进制调整。法)之后,进行十进制调整。 和的低和的低4 4位大于位大于9 9或有半进位则低或有半进位则低4 4位加位加6 6; 和的高和的高4 4位大于位大于9 9或有进位,则高或有进位,则高4 4位加位加6 6。 (96H96H为压缩为压缩BCDBCD码表示十位为码表示十位为9,9,个位为个位为6 6) 如如两两BCDBCD码加:码加:

39、MOV A, #35HMOV A, #35H ADD A, #46H ADD A, #46H (A)=7BH, (A)=7BH, 并不是并不是 81H81H 但:但:DA A DA A 后后, ,(A A)81H81H 2.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 ; ARL A ; A的内容向左环移的内容向左环移1 1位位 RLC A ; ARLC A ; A的内容带进位标志位向左环移的内容带进位标志位向左环移1 1

40、位位 RR A ; A RR A ; A的内容向右环移的内容向右环移1 1位位 RRC A ; A RRC A ; A的内容带进位标志位向右环移的内容带进位标志位向右环移1 1位位 除了除了RLC ARLC A和和RRC ARRC A影响影响CY,CY,其它都不影响其它都不影响Cy, AC, Cy, AC, OV OV等标志。等标志。 2.3.7 2.3.7 乘、除法指令乘、除法指令 1.1.乘法指令乘法指令 MUL AB AMUL AB ABBA ,BBA ,积高积高8 8位位B ,B ,积低积低8 8 位位A A )A A、B B中都是无符号整数中都是无符号整数 )如果积大于)如果积大于2

41、55255,OVOV1 1,否则,否则OVOV0 0; )乘法后)乘法后CyCy0 0 2.2.除法指令除法指令 DIV AB DIV AB ; A AB B 商商A,A,余数余数B B )A A、B B中都是无符号整数中都是无符号整数 )如果除数)如果除数B B为为“0 0”,OVOV1 1,否则,否则OVOV0 0; )除法后)除法后CyCy0 0 如如A=28H,B=12H,A=28H,B=12H,指令指令DIV ABDIV AB执行后,执行后, A=02H,B=04H A=02H,B=04H。 如如A=08H,B=09H,A=08H,B=09H,指令指令DIV ABDIV AB执行后,

42、执行后, A=00H,B=08H A=00H,B=08H。 例例2 21515 编程将编程将21H21H单元的单元的低三位低三位和和20H20H单元中的单元中的低五位低五位合合 并为一个字送并为一个字送30H30H单元,要求(单元,要求(21H21H)的低三位放在高位上。)的低三位放在高位上。 MOV 30H,20H ;(30H)=(20H)MOV 30H,20H ;(30H)=(20H) ANL 30H,#1FH ;ANL 30H,#1FH ;保留低保留低5 5位位 MOV A,21HMOV A,21H ;A=(21H) ;A=(21H) SWAP ASWAP A ; ;高低高低4 4位交换

43、位交换 RL ARL A ; ;低低3 3位变到高位变到高3 3位位 ANL A,#ANL A,#0 0E0H ;E0H ;保留高保留高3 3位位 ORL 30H,AORL 30H,A ; ;与与(30H)(30H)的低的低5 5位合并位合并 SJMP $SJMP $ ; ;动态暂停动态暂停 例例2 21616 把在把在R4R4和和R5R5中的两字节数取补(高位在中的两字节数取补(高位在R4R4中)中) CRL CCRL C ;Cy ;Cy清零清零 MOV A, R5MOV A, R5 CPL ACPL A ADD A, #01HADD A, #01H ; ;低位取反加低位取反加1 1 (IN

44、C A ?)(INC A ?) MOV R5, A MOV R5, A MOV A, R4 MOV A, R4 CPL A ; CPL A ;高位取反高位取反 ADDC A, #00H ;ADDC A, #00H ;加低位的进位加低位的进位 MOV R4,AMOV R4,A SJMP $ SJMP $ 例例 2 21717 把把R7R7中的中的无符号数无符号数扩大扩大1010倍。倍。 MOV A, R7MOV A, R7 MOV B, #0AH MOV B, #0AH MUL AB MUL AB MOV R7, A ;R7 MOV R7, A ;R7存积的低位存积的低位 MOV R6, B ;

45、R6MOV R6, B ;R6存积的高位存积的高位 SJMP $ SJMP $ 例例2 21818把把R1R0R1R0和和R3R2R3R2中的两个中的两个4 4位位BCDBCD码数相加码数相加,结果送,结果送 R5R4R5R4中中, ,如有进位则存于进位位如有进位则存于进位位C C中。中。 CLR C ;CLR C ;清进位清进位 MOV A, R0 MOV A, R0 ADD A, R2 ; ADD A, R2 ;低字节相加低字节相加(CY=?)(CY=?) DA A ;BCD DA A ;BCD调整调整 MOV R4, AMOV R4, A MOV A, R1 MOV A, R1 ADDC

46、 A, R3 ; ADDC A, R3 ;高字节相加高字节相加 DA A ;BCDDA A ;BCD调整调整 MOV R5, AMOV R5, A SJMP $ SJMP $ 2.4 控制转移指令 这一类指令的功能是改变指令的执行顺序,转到指这一类指令的功能是改变指令的执行顺序,转到指 令指示的新的令指示的新的PCPC地址执行。地址执行。 MCS-51 MCS-51单片机的控制转移指令有以下类型:单片机的控制转移指令有以下类型: 无条件转移:无条件转移:无需判断,执行该指令就转移到目的地址。无需判断,执行该指令就转移到目的地址。 条件转移:条件转移:需判断标志位是否满足条件,满足条件转移到需判

47、断标志位是否满足条件,满足条件转移到 目的地址,否则顺序执行。目的地址,否则顺序执行。 绝对转移:绝对转移:转移的目的地址用绝对地址指示,通常为无条转移的目的地址用绝对地址指示,通常为无条 件转移。件转移。 相对转移:相对转移:转移的目的地址用相对于当前转移的目的地址用相对于当前PCPC的偏差(偏移的偏差(偏移 量)指示,通常为条件转移。量)指示,通常为条件转移。 长转移或长调用:长转移或长调用:目的地址距当前目的地址距当前PC 64KBPC 64KB地址范围内。地址范围内。 短转移或短调用:短转移或短调用:目的地址距当前目的地址距当前PC 2KBPC 2KB地址范围。地址范围。 2.4 2.

48、4 控制转移指令控制转移指令( (强迫改变强迫改变PCPC值值) ) 2.4.1 2.4.1 调用子程序及返回指令调用子程序及返回指令 主程序需要使用子程序时用主程序需要使用子程序时用调用指令调用指令 子程序的最后安排一条子程序的最后安排一条返回指令返回指令 子程序调用子程序调用: :长调用指令长调用指令LCALLLCALL 短调用指令短调用指令ACALLACALL 1. 1. 长调用指令长调用指令 LCALL addr16 ; addr16 PC0-15,LCALL addr16 ; addr16 PC0-15,三字节三字节 addr16:addr16:子程序地址子程序地址 ( (目的地址目

49、的地址, ,子程序名子程序名) ) 操作操作: :断点地址断点地址( (当前当前PC)PC)计算计算, , As+3PCAs+3PC 断点地址断点地址( (当前当前PC)PC)入栈,入栈, SP+1SP,PC0-7(SP) SP+1SP,PC0-7(SP) SP+1SP,PC8-15(SP) SP+1SP,PC8-15(SP) 子程序地址子程序地址PC ,PC ,即即addr16 PC0-15addr16 PC0-15 1) LCALL1) LCALL可调用可调用64KB64KB范围内的子程序。范围内的子程序。 2) 2) 指令执行后不影响任何标志。指令执行后不影响任何标志。 3) 3) 机器

50、码机器码:12, addr16 H, addr16 L:12, addr16 H, addr16 L 2. 2. 短调用指令短调用指令( (绝对调用指令绝对调用指令) ) ACALL addr11 ; addr11 PC0-10, ACALL addr11 ; addr11 PC0-10,二字节二字节 addr11:addr11:子程序地址子程序地址( (目的地址,子程序名目的地址,子程序名) ) 操作操作: :当前当前PCPC计算,计算,As+2PCAs+2PC 断点地址断点地址( (当前当前PC)PC)入栈入栈, , SP+1SP,PC0-7(SP)SP+1SP,PC0-7(SP) SP+

51、1SP,PC8-15(SP) SP+1SP,PC8-15(SP) 子程序地址子程序地址PC ,PC ,即即addr11 PC0-10addr11 PC0-10,PC11-15PC11-15不变不变 当前当前PCPC与子程序入口同在一与子程序入口同在一基本基本2KB2KB地址范围内。地址范围内。 2) 2) 指令执行后不影响任何标志。指令执行后不影响任何标志。 3) 3) 机器码机器码:a:a10 10a a9 9a a8 810001 10001a a7 7a a6 6a a5 5a a4 4a a3 3a a2 2a a1 1a a0 0( (二字节二字节) ) ROMROM空间空间3232

52、个个基本基本2K2K地址地址范围范围(PC11-PC15(PC11-PC15同同) ) 0000H-07FFH,0800H-0FFFH,1000H-17FFH,1800H-1FFFH 0000H-07FFH,0800H-0FFFH,1000H-17FFH,1800H-1FFFH 2000H-27FFH,2800H-2FFFH,2000H-27FFH,2800H-2FFFH,.,F800H-FFFFH .,F800H-FFFFH 例例:1):1) 已知已知MA=07FFH,MA=07FFH,执行指令执行指令MA:ACALL 0810HMA:ACALL 0810H正确否正确否? ? 已知已知MA=

53、07F0H,MA=07F0H,执行指令执行指令MA:ACALL 0810HMA:ACALL 0810H正确否正确否? ? 2)2)知知MA=0500H,MA=0500H,执行指令执行指令 MOV SP,#30HMOV SP,#30H MA:LCALL 8192H MA:LCALL 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.子程序返回指令子程序返回指令( (

54、程序末尾程序末尾) ) RET ; ;(SP) PC8-15,(SP) PC8-15,SP-1SPSP-1SP (SP) PC0-7, (SP) PC0-7,SP-1SPSP-1SP 恢复断点恢复断点, , 返回主程序。返回主程序。 4. 4. 中断返回指令中断返回指令( (程序末尾程序末尾) ) RETI ; ;(SP) PC8-15,(SP) PC8-15,SP-1SPSP-1SP (SP) PC0-7, (SP) PC0-7,SP-1SPSP-1SP 恢复断点恢复断点, , 返回主程序返回主程序, ,清除中断状态标志清除中断状态标志。 2.4.22.4.2转移指令转移指令 1 1、 无条

55、件转移指令无条件转移指令 (1) (1) 短转移指令短转移指令( (绝对转移绝对转移) ) AJMP addr11; addr11 PC0-10, AJMP addr11; addr11 PC0-10,二字节二字节 addr11:addr11:目的地址(目的地址(标号标号) 操作操作: :当前当前PCPC计算计算, ,As+2PCAs+2PC 目的地址目的地址PC,PC,即即addr11 PC0-10 (PC11-15addr11 PC0-10 (PC11-15不变不变) ) 注意注意: : 当前当前PCPC与目的地址同在一与目的地址同在一基本基本2KB2KB地址范围(转移)地址范围(转移)

56、2) 2) 指令执行后不影响任何标志。指令执行后不影响任何标志。 3) 3) 机器码机器码:a:a10 10a a9 9a a8 800001a 00001a7 7a a6 6a a5 5a a4 4a a3 3a a2 2a a1 1a a0 0( (二字节二字节) ) (2 2) 长转移指令长转移指令 LJMP addr16 ;PC addr16 (64KLJMP addr16 ;PC addr16 (64K范围范围,3,3字节字节) ) 注意注意: : 1)1)指令执行后不影响任何标志。指令执行后不影响任何标志。 机器码机器码:02, addr16H, addr16L(:02, addr

57、16H, addr16L(三字节三字节) ) 例如例如: : 在程序存储器在程序存储器0000H0000H单元存放一条指令单元存放一条指令: : LJMP 3000H; PC 3000H, LJMP 3000H; PC 3000H,机器码机器码 02 30 0002 30 00 则上电复位后程序将跳到则上电复位后程序将跳到3000H3000H单元去执行用户单元去执行用户 程序程序。 (3 3) 间接转移指令间接转移指令 JMP A+DPTR ;PCA+DPTRJMP A+DPTR ;PCA+DPTR 目的地址送入目的地址送入PCPC 不改变不改变A A和和DPTRDPTR的内容的内容( (无符

58、号数无符号数) ) 不影响标志不影响标志 例例2-22: 2-22: 根据累加器根据累加器A A的数值的数值, , 转不同处理程序的入口。转不同处理程序的入口。 MOV DPTR, MOV DPTR, TABLE ; TABLE ; 表首址送表首址送DPTR DPTR JMP A+DPTR ; JMP A+DPTR ; 依据依据A A值转移值转移 TABLE: AJMP PROC0 ; TABLE: AJMP PROC0 ; 当当(A)=0(A)=0时转时转PROC0PROC0执行执行 AJMP PROC1 ; AJMP PROC1 ; 当当(A)=2(A)=2时转时转PROC1PROC1执行

59、执行 AJMP PROC2 ; AJMP PROC2 ; 当当(A)=4(A)=4时转时转PROC2PROC2执行执行 注意注意:A:A内容为偶数内容为偶数 将将AJMPAJMP换为换为LJMP,LJMP,A=? (A=0,1,2,3A=? (A=0,1,2,3. .必须有必须有A A* *3)3) (4 4)无条件相对转移(相对转移指令)无条件相对转移(相对转移指令,2,2字节)字节) SJMP rel; As+2PC(SJMP rel; As+2PC(当前当前PC),PC+relPC(PC),PC+relPC(目的地目的地 址址) ) relrel相对偏移量,为相对偏移量,为8 8位补码位

60、补码 转移范围:转移范围:前前128128后后127127字节字节,机器码:,机器码:80,rel80,rel 转移目的地址转移目的地址(Ad)= SJMP(Ad)= SJMP指令所在地址指令所在地址(As)+2(Bn)+rel(As)+2(Bn)+rel relrel( Ad Ad As As BnBn)补 补 (目的地址当前(目的地址当前PCPC)补 补 编程时,可用标号代替转移目的地址编程时,可用标号代替转移目的地址,rel,rel由编译程序计算由编译程序计算 SJMP NEXT SJMP NEXT (或(或AJMP NEXT AJMP NEXT ) NEXTNEXT: 原地踏步的指令原

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论