中大单片机_第3章 MCS-51的指令系统

上传人:cn****1 文档编号:570164708 上传时间:2024-08-02 格式:PPT 页数:50 大小:259KB
返回 下载 相关 举报
中大单片机_第3章 MCS-51的指令系统_第1页
第1页 / 共50页
中大单片机_第3章 MCS-51的指令系统_第2页
第2页 / 共50页
中大单片机_第3章 MCS-51的指令系统_第3页
第3页 / 共50页
中大单片机_第3章 MCS-51的指令系统_第4页
第4页 / 共50页
中大单片机_第3章 MCS-51的指令系统_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《中大单片机_第3章 MCS-51的指令系统》由会员分享,可在线阅读,更多相关《中大单片机_第3章 MCS-51的指令系统(50页珍藏版)》请在金锄头文库上搜索。

1、第第3 3章章 MCS-51MCS-51的指令系统的指令系统 介绍介绍MCS-51MCS-51汇编语言汇编语言的指令系统。的指令系统。3.1 3.1 指令系统概述指令系统概述 MCS-51MCS-51的基本指令共的基本指令共111111条条,按指令所占的字节来分:按指令所占的字节来分: (1) (1) 单字节指令单字节指令4949条;条; (2) (2) 双字节指令双字节指令4545条;条; (3) (3) 三字节指令三字节指令1717条。条。按指令的执行时间来分按指令的执行时间来分: (1) 1(1) 1个机器周期(个机器周期(1212个时钟振荡周期)的指令个时钟振荡周期)的指令6464条;

2、条; (2) 2(2) 2个机器周期(个机器周期(2424个时钟振荡周期)的指令个时钟振荡周期)的指令4545条;条; (3) (3) 只只有有乘乘、除除两两条条指指令令的的执执行行时时间间为为4 4个个机机器器周周期期(4848个时钟振荡周期)。个时钟振荡周期)。12MHz12MHz晶振晶振: :机器周期为机器周期为1 1 s s。3.2 3.2 指令格式指令格式 两部分组成,即两部分组成,即操作码操作码和和操作数操作数。 操作码操作码用来规定指令进行什么操作用来规定指令进行什么操作 操作数操作数则是指令操作的对象则是指令操作的对象有单字节指令、双字节指令、三字节不同长度的指令,有单字节指令

3、、双字节指令、三字节不同长度的指令,格式不同:格式不同: (1 1)单字节指令:)单字节指令:指令只有一个字节,操作码和操指令只有一个字节,操作码和操作数同在一个字节中。作数同在一个字节中。 (2 2)双双字字节节指指令令:一一个个字字节节为为操操作作码码,另另一一个个字字节节是是操作数。操作数。 (3 3)三字节指令:)三字节指令:操作码占一个字节,操作数占二个操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。字节。其中操作数既可能是数据,也可能是地址。 3.3 3.3 指令系统的寻址方式指令系统的寻址方式 寻址方式寻址方式就是在指令中说明操作数所在地址的方法。就是在

4、指令中说明操作数所在地址的方法。共共7 7种种寻址方式。寻址方式。 1 1寄存器寻址方式寄存器寻址方式 操作数在寄存器中操作数在寄存器中 MOV AMOV A,Rn Rn ;(;(RnRn)A A,n=0n=07 7 表示把寄存器表示把寄存器RnRn的内容传送给累加器的内容传送给累加器A A 寻址范围包括:寻址范围包括:(1 1)4 4组通用工作寄存区共组通用工作寄存区共3232个工作寄存器。个工作寄存器。(2 2)部分特殊功能寄存器,例如)部分特殊功能寄存器,例如A A、B B 以及数据指针以及数据指针寄存器寄存器DPTRDPTR等。等。2 2直接寻址方式直接寻址方式 操作数直接以单元地址的

5、形式给出:操作数直接以单元地址的形式给出: MOV AMOV A,40H40H 寻址范围:寻址范围: (1) (1) 内部内部RAMRAM的的128128个单元个单元(2) (2) 特殊功能寄存器。除了以单元地址的形式外特殊功能寄存器。除了以单元地址的形式外, ,还还可用寄存器符号可用寄存器符号的形式给出。例如:的形式给出。例如: MOV AMOV A,80H 80H 与与 MOV AMOV A,P0P0是等价的是等价的。直接寻址方式是直接寻址方式是访问特殊功能寄存器的唯一寻址方式访问特殊功能寄存器的唯一寻址方式 3. 3. 寄存器间接寻址方式寄存器间接寻址方式 寄存器中存放的是操作数的地址寄

6、存器中存放的是操作数的地址 在寄存器的名称前面加在寄存器的名称前面加前缀标志前缀标志“ ” 访问内部访问内部RAMRAM或外部数据存储器的低或外部数据存储器的低256256个字节时,个字节时,只只能采用能采用R0R0或或R1R1作为间址寄存器作为间址寄存器。例如。例如: MOV AMOV A,RiRi ;i=0i=0或或1 1 其中其中RiRi中的内容为中的内容为40H40H,把内部,把内部RAMRAM中中40H40H单元的内容送单元的内容送到到A A。寻址范围:寻址范围:(1 1)访问内部)访问内部RAMRAM低低128128个单元,其通用形式为个单元,其通用形式为RiRi(2 2)对片外数

7、据存储器的)对片外数据存储器的64K64K字节的间接寻址,例如:字节的间接寻址,例如: MOVX AMOVX A,DPTRDPTR(3 3)片外数据存储器的低)片外数据存储器的低256256字节字节 例如:例如:MOVX AMOVX A,RiRi(4 4)堆栈区)堆栈区 堆栈操作指令堆栈操作指令PUSHPUSH(压栈)和(压栈)和POPPOP(出栈)使用堆(出栈)使用堆栈指针(栈指针(SPSP)作间址寄存器)作间址寄存器4 4立即寻址方式立即寻址方式 操作数在指令中直接给出,需在操作数前面加前缀操作数在指令中直接给出,需在操作数前面加前缀标志标志“# #”。例如:。例如: MOV AMOV A

8、,#40H#40H 5 5基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式 本寻址方式是以本寻址方式是以DPTRDPTR或或PCPC作基址寄存器,以累加器作基址寄存器,以累加器A A作为变址寄存器。作为变址寄存器。 例例如如:指指令令 MOVC MOVC A A,A+DPTR A+DPTR 其其中中A A的的原原有有内内容容为为05H05H,DPTRDPTR的的内内容容为为0400H0400H,该该指指令令执执行行的的结结果果是是把把程程序序存储器存储器0405H0405H单元的内容传送给单元的内容传送给A A。说明:说明: (1 1)本本寻寻址址方方式式是是专专门门针针对

9、对程程序序存存储储器器的的寻寻址址方方式式,寻址范围可达到寻址范围可达到64KB64KB。(2 2)本寻址方式的指令只有本寻址方式的指令只有3 3条:条:MOVC AMOVC A,A+DPTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR6 6位寻址方式位寻址方式 MCS-51MCS-51有位处理功能,可以对数据位进行操作,例如:有位处理功能,可以对数据位进行操作,例如: MOV CMOV C,40H40H 是把位是把位40H40H的值送到进位位的值送到进位位C C。寻址范围包括:寻址范围包括:(1 1)内部)内部RAMRAM中的位寻址区。位有两

10、种表示方法,例如,中的位寻址区。位有两种表示方法,例如,40H40H;另一种是单元地址加上位,例如,;另一种是单元地址加上位,例如,(28H).0(28H).0,指,指的是的是28H28H单元中的最低位。它们是等价的。单元中的最低位。它们是等价的。(2 2)特殊功能寄存器中的可寻址位)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下可寻址位在指令中有如下4 4种的表示方法:种的表示方法: a. a. 直接使用位地址直接使用位地址。例如。例如PSW.5PSW.5的位地址为的位地址为0D5H0D5H。 b.b.位位名名称称的的表表示示方方法法。例例如如:PSW.5PSW.5是是F0F0标标志志位

11、位,可可使使用用F0F0表示该位。表示该位。c.c.单元地址加位数单元地址加位数的表示方法。例如的表示方法。例如 :(0D0H).5:(0D0H).5。d.d.特殊功能寄存器符号加位数特殊功能寄存器符号加位数的表示方法。例如的表示方法。例如:PSW.5:PSW.5。7 7相对寻址方式相对寻址方式 在在相相对对寻寻址址的的转转移移指指令令中中,给给出出了了地地址址偏偏移移量量,以以“relrel”表表示示,即即把把PCPC的的当当前前值值加加上上偏偏移移量量就就构构成成了了程序转移的目的地址:程序转移的目的地址: 目的地址目的地址= =转移指令所在的地址转移指令所在的地址 + + 转移指令的字节

12、数转移指令的字节数 + rel+ rel 偏移量偏移量relrel是一带符号的是一带符号的8 8位二进制数补码数位二进制数补码数 。范围是:范围是:128 128 +127 +127 向向地地址址增增加加方方向向最最大大可可转转移移(127+127+转转移移指指令令字字节节)个个单单元元地地址址,向向地地址址减减少少方方向向最最大大可可转转移移(128-128-转转移移指令字节)个单元地址。指令字节)个单元地址。7 7种寻址方式及寻址空间,见表种寻址方式及寻址空间,见表3-13-1(P43)P43)。3.4 MCS-513.4 MCS-51指令系统分类介绍指令系统分类介绍111111条指令条指

13、令,按功能分类,可分为下面,按功能分类,可分为下面5 5大类大类: (1 1)数据传送类)数据传送类(28(28条条) ) (2 2)算术操作类)算术操作类(24(24条条 (3 3)逻辑运算类)逻辑运算类(25(25条条) ) (4 4)控制转移类)控制转移类(17(17条条) ) (5 5)位操作类)位操作类(17(17条条) )指令中符号的意义指令中符号的意义: :Rn Rn 当前寄存器区的当前寄存器区的8 8个工作寄存器个工作寄存器R0R0R7(n=0R7(n=07)7)。Ri Ri 当当前前选选中中的的寄寄存存器器区区中中可可作作间间接接寻寻址址寄寄存存器器的的2 2 个寄存器个寄存

14、器R0R0、R1(i=0,1)R1(i=0,1)。DirectDirect 直直接接地地址址,即即8 8位位的的内内部部数数据据存存储储器器单单元元或或特殊功能寄存器的地址。特殊功能寄存器的地址。#data#data 包含在指令中的包含在指令中的8 8位立即数。位立即数。#data16#data16 包含在指令中的包含在指令中的1616位立即数。位立即数。relrel 相相对对转转移移指指令令中中的的偏偏移移量量,为为8 8位位的的带带符符号号补补 码数码数DPTRDPTR 数据指针,可用作数据指针,可用作1616位的地址寄存器。位的地址寄存器。bitbit 内部内部RAMRAM或特殊功能寄存

15、器中的直接寻址位。或特殊功能寄存器中的直接寻址位。C C(或(或CyCy) 进位标志位或位处理机中的累加器。进位标志位或位处理机中的累加器。addr11addr11 1111位目的地址位目的地址addr16addr16 1616位目的地址位目的地址 间接寻址寄存器前缀,如间接寻址寄存器前缀,如RiRi,A+DPTRA+DPTR(X)(X) X X中的内容。中的内容。(X)(X) 由由X X寻址的单元中的内容。寻址的单元中的内容。 箭头右边的内容被箭头左边的内容所取代。箭头右边的内容被箭头左边的内容所取代。3.4.1 3.4.1 数据传送类指令数据传送类指令 使用最频繁的一类指令使用最频繁的一类

16、指令, ,通用格式:通用格式: MOV MOV , 属属“复制复制”性质,而不是性质,而不是“搬家搬家”数数据据传传送送类类指指令令不不影影响响标标志志位位, , CyCy、AcAc和和OVOV,但但不不包包括奇偶标志位括奇偶标志位P P。 1 1以累加器为目的操作数的指令以累加器为目的操作数的指令 MOV A,Rn ; (Rn)AMOV A,Rn ; (Rn)A,n=0n=07 7 MOV A,Ri ; (Ri)A,i=0,1MOV A,Ri ; (Ri)A,i=0,1 MOV A,direct ;MOV A,direct ;(directdirect)A A MOV A,#data ; #

17、dataAMOV A,#data ; #dataA 例如:例如: MOV A,R6 ;(R6)AMOV A,R6 ;(R6)A,寄存器寻址,寄存器寻址 MOV A,70H ;(70H)AMOV A,70H ;(70H)A,直接寻址,直接寻址 MOV A,R0 ;(R0)AMOV A,R0 ;(R0)A,间接寻址,间接寻址 MOV A,#78H ;78HAMOV A,#78H ;78HA,立即寻址,立即寻址 2. 2. 以以RnRn为目的操作数的指令为目的操作数的指令 MOV Rn,A ; (A)Rn,n=0MOV Rn,A ; (A)Rn,n=07 7 MOV Rn,direct ; MOV

18、Rn,direct ;(directdirect)Rn,n=0Rn,n=07 7 MOV Rn,#data ; #dataRn,n=0 MOV Rn,#data ; #dataRn,n=07 7功功能能:是是把把源源操操作作数数的的内内容容送送入入当当前前一一组组工工作作寄寄存存器器区的区的R0R0R7R7中的某一个寄存器。中的某一个寄存器。3.3.以直接地址以直接地址directdirect为目的操作数的指令为目的操作数的指令 MOV direct,A ; (A)directMOV direct,A ; (A)direct MOV MOV direct,Rn;(Rn)direct, n=0

19、direct,Rn;(Rn)direct, n=07 7 MOV direct1,direct2; MOV direct1,direct2; MOV direct,Ri ; (Ri)direct MOV direct,Ri ; (Ri)direct MOV MOV direct,#data; #datadirect direct,#data; #datadirect功功能能:把把源源操操作作数数送送入入直直接接地地址址指指出出的的存存储储单单元元。directdirect指的是内部指的是内部RAMRAM或或SFRSFR的地址。的地址。4.4.以寄存器间接地址为目的操作数的指令以寄存器间接地址为

20、目的操作数的指令 MOV Ri,A ;(A)(Ri),i=0,1MOV Ri,A ;(A)(Ri),i=0,1 MOV Ri,direct ; MOV Ri,direct ; (directdirect)(Ri)(Ri) MOV Ri,#data ; #data(Ri) MOV Ri,#data ; #data(Ri)5.165.16位数传送指令位数传送指令 MOV DPTR,#data16 ; #data16DPTRMOV DPTR,#data16 ; #data16DPTR唯一的唯一的1616位数据的传送指令位数据的传送指令 , ,立即数的高立即数的高8 8位送入位送入DPHDPH,立即数

21、的低,立即数的低8 8位送入位送入DPLDPL。6 6堆栈操作指令堆栈操作指令 MCS-51MCS-51内部内部RAMRAM中可以设定一个中可以设定一个后进先出后进先出(LIFO-LIFO-Last In First OutLast In First Out)的区域称作)的区域称作堆栈堆栈. .堆栈指针堆栈指针SPSP指出堆栈的栈顶位置。指出堆栈的栈顶位置。(1)(1)进栈指令进栈指令 PUSH directPUSH direct先先将将栈栈指指针针SPSP加加1 1,然然后后把把directdirect中中的的内内容容送送到到栈栈指指针针SPSP指示的内部指示的内部RAMRAM单元中。单元中

22、。例例如如: 当当(SPSP)=60H,=60H,(A A)=30H,=30H,(B B)=70H=70H时时,执执行下列指令行下列指令 PUSH APUSH ACCCC; ; (SP)+1=61HSP,(A)61H(SP)+1=61HSP,(A)61H PUSH B PUSH B; ; (SP)+1=62HSP,(B)62H(SP)+1=62HSP,(B)62H 结果:结果:(61H)=30H,(62H)=70H,(SP)=62H(61H)=30H,(62H)=70H,(SP)=62H (2) (2)出栈指令出栈指令 POP directPOP directSPSP指指示示的的栈栈顶顶(内内

23、部部RAMRAM单单元元)内内容容送送入入directdirect字字节节单单元中,栈指针元中,栈指针SPSP减减1.1. 例例如如: : 当当 (SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H,(61H)=30H,执执行行下列指令:下列指令: POP DPH ;(SP)DPH,(SP)-1SP POP DPH ;(SP)DPH,(SP)-1SP POP DPL ;(SP)DPL,(SP)-1SP POP DPL ;(SP)DPL,(SP)-1SP 结果:结果:(DPTR)=7030H(DPTR)=7030H,(SP)=60H(SP)=60H7.7.累

24、加器累加器A A与外部数据存储器传送指令与外部数据存储器传送指令 MOVX A,DPTR ;(DPTR)A,MOVX A,DPTR ;(DPTR)A,读外部读外部RAM/IORAM/IO MOVX A,Ri ;(Ri)A, MOVX A,Ri ;(Ri)A,读外部读外部RAM/IORAM/IO MOVX DPTR,A;(A)(DPTR), MOVX DPTR,A;(A)(DPTR),写外部写外部RAM/IORAM/IO MOVX Ri,A ;(A)(Ri), MOVX Ri,A ;(A)(Ri),写外部写外部RAM/IORAM/IO功功能能:读读外外部部RAMRAM存存储储器器或或I/OI/O

25、中中的的一一个个字字节节,或或把把A A中中一个字节的数据写到外部一个字节的数据写到外部RAMRAM存储器或存储器或I/OI/O中。中。 注意:注意:RDRD* *或或WRWR* *信号有效。信号有效。采采用用DPTRDPTR间间接接寻寻址址,高高8 8位位地地址址(DPHDPH)由由P2P2口口输输出出,低低8 8位地址(位地址(DPLDPL)由)由P0P0口输出。口输出。采采用用RiRi(i=0,1i=0,1)间间接接寻寻址址,可可寻寻址址片片外外256256个个单单元元的的数据存储器。数据存储器。RiRi内容由内容由P0P0口输出。口输出。8 8位地址和数据均由位地址和数据均由P0P0口

26、输出,可选用其它任何输出口口输出,可选用其它任何输出口线来输出高于线来输出高于8 8位的地址(一般选用位的地址(一般选用P2P2口输出高口输出高8 8位位的地址)。的地址)。MOVMOV后后 “X X”表示单片机访问的是片外表示单片机访问的是片外RAMRAM存储器或存储器或I/OI/O。8.8.查表指令查表指令 共两条,用于读程序存储器中的数据表格的指令,均共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。采用基址寄存器加变址寄存器间接寻址方式。 (1) MOVC A,A+PC(1) MOVC A,A+PC 以以PCPC作基址寄存器,作基址寄存器,A A的内

27、容作为无符号整数和的内容作为无符号整数和PCPC中的中的内容(下一条指令的起始地址)相加后得到一个内容(下一条指令的起始地址)相加后得到一个1616位的地址该地址指出的程序存储单元的内容送到累位的地址该地址指出的程序存储单元的内容送到累加器加器A A。注意:注意:PSENPSEN* *信号有效信号有效。例如例如: : (A)=30H, (A)=30H,执行地址执行地址1000H1000H处的指令处的指令 1000H: MOVC A,A+PC1000H: MOVC A,A+PC 本指令占用一个字节,执行结果将程序存储器中本指令占用一个字节,执行结果将程序存储器中1031H1031H的内容送入的内

28、容送入A A。优点:优点:不改变特殊功能寄存器及不改变特殊功能寄存器及PCPC的状态,根据的状态,根据A A的内的内容就可以取出表格中的常数。容就可以取出表格中的常数。缺点:缺点:表格只能存放在该条查表指令后面的表格只能存放在该条查表指令后面的256256个单元个单元之内,表格的大小受到限制,且表格只能被一段程之内,表格的大小受到限制,且表格只能被一段程序所利用。序所利用。 (2) MOVC A,A+DPTR(2) MOVC A,A+DPTR以以DPTRDPTR作为基址寄存器,作为基址寄存器,A A的内容作为无符号数和的内容作为无符号数和DPTRDPTR的内容相加得到一个的内容相加得到一个16

29、16位的地址,把由该地址指出位的地址,把由该地址指出的程序存储器单元的内容送到累加器的程序存储器单元的内容送到累加器A. A. 例如例如 (DPTR)=8100H (A)=40H (DPTR)=8100H (A)=40H 执行指令执行指令 MOVC A,A+DPTRMOVC A,A+DPTR 本本指指令令的的执执行行结结果果只只和和指指针针DPTRDPTR及及累累加加器器A A的的内内容容有有关关,与与该该指指令令存存放放的的地地址址及及常常数数表表格格存存放放的的地地址址无无关关,因因此此表表格格的的大大小小和和位位置置可可以以在在64K64K程程序序存存储储器器中中任意安排任意安排,一个表

30、格可以为各个程序块公用。,一个表格可以为各个程序块公用。两条指令是在两条指令是在MOVMOV的后面加的后面加C C,“C C”是是CODECODE的第一个字的第一个字母,即代码的意思。母,即代码的意思。 9 9字节交换指令字节交换指令 XCH A,RnXCH A,Rn XCH A,directXCH A,direct XCH A,RiXCH A,Ri例如:例如: (A)=80H(A)=80H,(R7)=08H(R7)=08H,(40H)=F0H(40H)=F0H (R0)=30H (R0)=30H,(30H)=OFH(30H)=OFH执行下列指令:执行下列指令: XCH A,R7 ;(A)XC

31、H A,R7 ;(A)与与(R7)(R7)互换互换 XCH A,40H ;(A)XCH A,40H ;(A)与与(40H)(40H)互换互换 XCH A,R0 ;(A)XCH A,R0 ;(A)与与(R0)(R0)互换互换 结果:结果:(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H 1010半字节交换指令半字节交换指令 XCHD A,RiXCHD A,Ri 累加器的低累加器的低4 4位与内部位与内部RAMRAM低低4 4位交换。例如:位交换。例如: (R0)=60H,(60H)=3EH,(A)=5

32、9H(R0)=60H,(60H)=3EH,(A)=59H执行完执行完 XCHD A,RO XCHD A,RO 指令指令, ,则则(A)=5EH,(60H)=39H(A)=5EH,(60H)=39H。3.4.2 3.4.2 算术操作类指令算术操作类指令单字节的加、减、乘、除法指令,都是针对单字节的加、减、乘、除法指令,都是针对8 8位二进位二进制无符号数。制无符号数。执行的结果对执行的结果对CyCy、AcAc、OV OV 三种标志位有影响。三种标志位有影响。但增但增1 1和减和减1 1指令不影响上述标志。指令不影响上述标志。1 1加法指令加法指令 共有共有4 4条加法运算指令:条加法运算指令:

33、ADD A,Rn ;(A)+(Rn)AADD A,Rn ;(A)+(Rn)A,n=0n=07 7 ADD A,direct ;(A)+(direct)A ADD A,direct ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A,i=0,1 ADD A,Ri ;(A)+(Ri)A,i=0,1 ADD A,#data ; (A)+#dataAADD A,#data ; (A)+#dataA一一个个加加数数总总是是来来自自累累加加器器A A,而而另另一一个个加加数数可可由由不不同同的寻址方式得到。结果总是放在的寻址方式得到。结果总是放在A A中。中。使使用用加加法法指指令令时时

34、,要要注注意意累累加加器器A A中中的的运运算算结结果果对对各各个标志位的影响:个标志位的影响:(1 1)如如果果位位7 7有有进进位位,则则置置“1 1”进进位位标标志志CyCy,否否则则清清“0 0”CyCy(2 2)如如果果位位3 3有有进进位位,置置“1 1”辅辅助助进进位位标标志志AcAc,否否则清则清“0 0”AcAc(AcAc为为PSWPSW寄存器中的一位)寄存器中的一位)(3 3)如如果果位位6 6有有进进位位,而而位位7 7没没有有进进位位,或或者者位位7 7有有进进位位,而而位位6 6没没有有,则则溢溢出出标标志志位位OVOV置置“1 1”,否否则则清清“0 0”OVOV。

35、 溢出标志位溢出标志位OVOV的状态,只有在带符号数加法运算时的状态,只有在带符号数加法运算时才有意义。当两个带符号数相加时,才有意义。当两个带符号数相加时,OV=1OV=1,表示加,表示加法运算超出了累加器法运算超出了累加器A A所能表示的带符号数的有效所能表示的带符号数的有效范围范围 例例 (A)=53H(A)=53H,(R0)=FCH(R0)=FCH,执行指令,执行指令 ADD A,R0ADD A,R0结果为结果为: (A)=4FH: (A)=4FH,Cy=1Cy=1,Ac=0Ac=0,OV=0OV=0,P=1P=1注注意意:上上面面的的运运算算中中,由由于于位位6 6和和位位7 7同同

36、时时有有进进位位,所所以标志位以标志位OV=0OV=0。 例例 (A)= 85H,(R0)=20H,(A)= 85H,(R0)=20H,(20H20H)=AFH=AFH,执行指令:,执行指令: ADD A,R0ADD A,R0 结果为结果为: :(A A)=34H=34H,Cy=1Cy=1,Ac=1Ac=1,OV=1OV=1,P=1P=1注注意意:由由于于位位7 7有有进进位位,而而位位6 6无无进进位位,所所以以标标志志位位OV=1 OV=1 2 2带进位加法指令带进位加法指令标志位标志位CyCy参加运算,因此是三个数相加。共参加运算,因此是三个数相加。共4 4条:条: ADDCADDCA,

37、RnA,Rn;(A)+(Rn)+CA;(A)+(Rn)+CA,n=0n=07 7 ADDCADDCA,directA,direct;(A)+(direct)+CA ;(A)+(direct)+CA ADDCADDCA,Ri A,Ri ;(A)+(Ri)+CA;(A)+(Ri)+CA,i=0,1i=0,1 ADDC ADDCA,#data A,#data ;(A)+#data+CA;(A)+#data+CA 例:例:(A A)=85H,=85H,(20H20H)=FFH,Cy=1=FFH,Cy=1,执行指令:,执行指令: ADDC A,20HADDC A,20H结结果果为为: :(A A)=85

38、H=85H,Cy=1Cy=1,Ac=1Ac=1,OV=0OV=0,P=1 P=1 (A A中中1 1 的位数为奇数)的位数为奇数)3 3增增1 1指令指令 5 5条增条增1 1指令:指令: INC AINC A INC Rn ;n=0INC Rn ;n=07 7INC direct INC direct INC Ri ;i=0,1 INC Ri ;i=0,1 INC DPTR INC DPTR不影响不影响PSWPSW中的任何标志中的任何标志。第第5 5条条指指令令INC INC DPTRDPTR,是是1616位位数数增增1 1指指令令。指指令令首首先先对对低低8 8位位指指针针DPLDPL的的

39、内内容容执执行行加加1 1的的操操作作,当当产产生生溢溢出出时时,就就对对DPHDPH的的内内容容进进行行加加1 1操操作作,并并不不影影响响标标志志CyCy的的状状态。态。4 4十进制调整指令十进制调整指令用于对用于对BCDBCD码十进制数加法运算结果的内容修正。码十进制数加法运算结果的内容修正。 指令格式:指令格式: DA ADA A两两个个BCDBCD码码按按二二进进制制相相加加之之后后,必必须须经经本本指指令令的的调调整整 才能得到正确的压缩才能得到正确的压缩BCDBCD码的和数。码的和数。二二进进制制数数的的加加法法运运算算原原则则并并不不能能适适用用于于十十进进制制数数的的加加法运

40、算,有时会产生错误结果。例如:法运算,有时会产生错误结果。例如:(a a)3+6=9 0011+0110=1001 3+6=9 0011+0110=1001 运算结果正确运算结果正确(b b)7+8=15 0111+1000=1111 7+8=15 0111+1000=1111 运算结果不正确运算结果不正确(c c)9+8=17 1001+1000=00001 C=1 9+8=17 1001+1000=00001 C=1 结果不正确结果不正确二二进进制制数数加加法法指指令令不不能能完完全全适适用用于于BCDBCD码码十十进进制制数数的的加加法运算,法运算,对结果作有条件的修正对结果作有条件的修

41、正 十进制调整十进制调整 出错原因和调整方法:出错原因和调整方法: BCDBCD码只用了了其中的码只用了了其中的1010个,个,6 6个没用到的编码。个没用到的编码。(10101010,10111011,11001100,11011101,11101110,11111111)为)为无效无效码码 凡结果进入或者跳过无效码编码区时,其结果就是凡结果进入或者跳过无效码编码区时,其结果就是错误的错误的。调整的方法是把结果加调整的方法是把结果加6 6调整调整,即所谓十进制调整修,即所谓十进制调整修正。正。修正方法应是:修正方法应是:(a a)累累加加器器低低4 4位位大大于于9 9或或辅辅助助进进位位位

42、位Ac=1Ac=1,则则进进行行低低4 4位加位加6 6修正。修正。(b b)累累加加器器高高4 4位位大大于于9 9或或进进位位位位Cy=1Cy=1,则则进进行行高高4 4位加位加6 6修正。修正。(c c)加加器器高高4 4位位为为9 9,低低4 4位位大大于于9 9,则则高高4 4位位和和低低4 4位位分别加分别加6 6修正。修正。具体是通过执行指令:具体是通过执行指令:DA A DA A 来自动实现的来自动实现的 。例例 (A A)=56H,=56H,(R5R5)=67H=67H,把把它它们们看看作作为为两两个个压压缩缩的的BCDBCD数,进行数,进行BCDBCD数的加法。执行指令:数

43、的加法。执行指令: ADD A,R5ADD A,R5 DA A DA A 由于高、低由于高、低4 4位分别大于位分别大于9 9,所以要分别加,所以要分别加6 6进行进行十进制调整对结果进行修正。十进制调整对结果进行修正。结果为:结果为: (A A)=23H=23H,Cy=1Cy=1 可见,可见,56+67=12356+67=123,结果是正确的。,结果是正确的。5 5带借位的减法指令带借位的减法指令 4 4条指令:条指令: SUBB A,Rn ; SUBB A,Rn ; (A A)- -(RnRn)- CyA- CyA,n=0n=07 7 SUBB A,direct ; SUBB A,dire

44、ct ; (A A)- -(directdirect)- CyA- CyA SUBB A,Ri;SUBB A,Ri;(A A)- -((Ri)(Ri))- CyA, i=0,1- CyA, i=0,1 SUBB A,#data ; SUBB A,#data ;(A A)-#data - CyA-#data - CyA从累加器从累加器A A中的内容减去指定的变量和进位标志中的内容减去指定的变量和进位标志CyCy的的值,结果存在累加器值,结果存在累加器A A中。中。如果位如果位7 7需借位则置需借位则置“1 1” Cy Cy,否则清,否则清“0 0”CyCy; 如果位如果位3 3需借位则置需借位则

45、置“1 1”AcAc,否则清,否则清“0 0”AcAc;如果位如果位6 6需借位而位需借位而位7 7不需要借位,或者位不需要借位,或者位7 7需借位,需借位,位位6 6不需借位,则置不需借位,则置“1 1”溢出标志位溢出标志位OVOV,否则清,否则清“0 0”OVOV。例例 (A A)=C9H ,=C9H ,(R2R2)=54H,Cy=1=54H,Cy=1,执行指令,执行指令: : SUBB A,R2 SUBB A,R2 结果:(结果:(A A)=74H,Cy=0,Ac=0,OV=1=74H,Cy=0,Ac=0,OV=1(位(位6 6向位向位7 7借位)借位) 6 6减减1 1指令指令 4 4

46、条指令:条指令:DEC ADEC A;(A)-1A(A)-1ADEC Rn DEC Rn ;(Rn)-1Rn(Rn)-1Rn,n=0n=07 7DEC directDEC direct;(direct)-1direct(direct)-1directDEC Ri DEC Ri ;(Ri)-1(Ri)-1(RiRi),),i=0,1i=0,1减减1 1指令不影响标志位。指令不影响标志位。 7 7乘法指令乘法指令 MUL A B MUL A B ;A ABBABBA如果积大于如果积大于255255,则置,则置“1 1”溢出标志位溢出标志位OVOV8除法指令除法指令 DIV AB DIV AB ;A

47、/BAA/BA(商),余数(商),余数B B如如果果B B的的内内容容为为“0 0”(即即除除数数为为“0 0”),则则存存放放结结果的果的A A、B B中的内容不定,并置中的内容不定,并置“1 1”溢出标志位溢出标志位OVOV。3.4.3 3.4.3 逻辑运算指令逻辑运算指令1. 1. 简单逻辑操作指令简单逻辑操作指令 (1) CLR A(1) CLR A功能是累加器功能是累加器A A清清“0 0”。不影响。不影响CyCy、AcAc、OVOV等标志。等标志。 (2) CPL A(2) CPL A功能是将累加器功能是将累加器A A的内容的内容按位逻辑取反按位逻辑取反,不影响标志,不影响标志。

48、2 2左环移指令左环移指令 RL ARL A功能是累加器功能是累加器A A的的8 8位向左循环移位,位位向左循环移位,位7 7循环移入位循环移入位0 0,不影响标志。,不影响标志。 3 3带进位左环移指令带进位左环移指令 RLC ARLC A功能是将累加器功能是将累加器A A的内容和进位标志位的内容和进位标志位CyCy一起向左环一起向左环移一位,移一位,Acc.7Acc.7移入进位位移入进位位CyCy,CyCy移入移入Acc.0Acc.0,不影,不影响其它标志。响其它标志。 4 4右环移指令右环移指令 RR ARR A功功能能是是累累加加器器A A的的内内容容向向右右环环移移一一位位,Acc.

49、0Acc.0移移入入Acc.7Acc.7,不影响其它标志。,不影响其它标志。 5 5带进位环移指令带进位环移指令 RRC ARRC A这这条条指指令令的的功功能能是是累累加加器器A A的的内内容容和和进进位位标标志志CyCy一一起起向右环移一位,向右环移一位,Acc.0Acc.0进入进入CyCy,CyCy移入移入Acc.7Acc.7。 6 6累加器半字节交换指令累加器半字节交换指令 SWAP ASWAP A将将累累加加器器A A的的高高半半字字节节(Acc.7Acc.7Acc.4Acc.4)和和低低半半字字节节(Acc.3Acc.3Acc.0Acc.0)互换。)互换。 例例 (A A)=0C5

50、H=0C5H,执行指令:,执行指令: SWAP ASWAP A 结果:(结果:(A A)=5CH=5CH7 7逻辑与指令逻辑与指令 ANL A,Rn ; ANL A,Rn ; (A A)(RnRn)A A,n=0n=07 7 ANL A,direct ; ANL A,direct ; (A A)(directdirect)A A ANL A,#data ; ANL A,#data ; (A A)#dataA#dataA ANL A,Ri ; ANL A,Ri ; (A A)( ((RiRi))A)A,i=0i=01 1 ANL direct,A ; ANL direct,A ; (direct

51、direct)(A)direct(A)direct ANL ANL direct,#data direct,#data ; ; (directdirect)#datadirect#datadirect例例 (A A)=07H,=07H,(R0R0)=0FDH,=0FDH,执行指令:执行指令: ANL A,R0ANL A,R0 结果:(结果:(A A)=05H=05H8.8.逻辑或指令逻辑或指令 ORL A,Rn ORL A,Rn ;(A)(A)(RnRn)A A ,n=0n=07 7 ORL A,direct ORL A,direct ;(A)(A)(directdirect)A A ORL

52、A,#data ORL A,#data ;(A) dataA(A) dataA ORL A,Ri ORL A,Ri ; (A)(Ri)A(A)(Ri)A,i=0,1i=0,1 ORL direct,A ORL direct,A ;(;(directdirect)(A)direct(A)direct ORL direct,#data ORL direct,#data;(;(directdirect)#datadirect#datadirect 例例 (P1P1)=05H,=05H,(A A)=33H=33H,执行指令,执行指令 ORL P1,AORL P1,A结果:(结果:(P1P1)=37H

53、=37H 9 9逻辑异或指令逻辑异或指令 XRL A,Rn XRL A,Rn ;(A) (Rn)A(A) (Rn)A XRL A,direct XRL A,direct ;(A) (A) (directdirect)A A XRL A,Ri XRL A,Ri ;(A)(A)((RiRi))A ,i=0,1)A ,i=0,1 XRL A,#data XRL A,#data ;(A)#dataA(A)#dataA XRL direct,A XRL direct,A ;(;(directdirect)(A A)directdirect XRL direct,#data XRL direct,#dat

54、a ;(;(directdirect) #data direct#data direct例例 (A A)=90H,=90H,(R3R3)=73H =73H 执行指令:执行指令: XRL A,R3XRL A,R3结果:(结果:(A A)=E3H =E3H 3.4.4 3.4.4 控制转移类指令控制转移类指令 1 1无条件转移指令无条件转移指令 AJMP addrllAJMP addrll2K2K字节范围内字节范围内的无条件跳转指令,的无条件跳转指令, 64K64K程序存储器空程序存储器空间分为间分为3232个区,每区个区,每区2K2K字节,字节,转移的目标地址必须转移的目标地址必须与与AJMPA

55、JMP下一条指令的地址的高下一条指令的地址的高5 5位地址码位地址码A15A15A11A11相相同。同。执行指令时,先执行指令时,先PCPC加加2 2,然后把,然后把addrlladdrll送入送入PC.10PC.10PC.0PC.0,PC.15PC.15PC.11PC.11保持不变,程序转移到目标地保持不变,程序转移到目标地址。址。本指令是为能与本指令是为能与MCS-48MCS-48的的JMPJMP指令兼容而设的。指令兼容而设的。2 2相对转移指令相对转移指令 SJMP relSJMP rel实现的程序转移是双向的。实现的程序转移是双向的。在编写程序时,直接写上要转向的目标地址标号就可在编写

56、程序时,直接写上要转向的目标地址标号就可以。以。例如:例如: LOOPLOOP:MOV AMOV A,R6 R6 SJMP LOOPSJMP LOOP 程序在汇编时,由汇编程序自动计算和填入偏移量。程序在汇编时,由汇编程序自动计算和填入偏移量。 手工汇编时,偏移量手工汇编时,偏移量relrel的值则需程序设计人员自己计算。的值则需程序设计人员自己计算。3 3长跳转指令长跳转指令 LJMP addr16LJMP addr16指指令令执执行行时时把把指指令令的的第第二二和和第第三三字字节节分分别别装装入入PCPC的的高高位位和和低低位位字字节节中中,无无条条件件地地转转向向addr16addr16

57、指指出出的的目目标标地地址址。目标地址可以在目标地址可以在64K64K程序存储器地址空间的任何位置。程序存储器地址空间的任何位置。4 4间接跳转指令间接跳转指令 JMP A+DPTRJMP A+DPTR由由A A中中8 8位位无无符符号号数数与与DPTRDPTR的的1616位位数数内内容容之之和和来来确确定定。以以DPTRDPTR内容作为基址,内容作为基址,A A的内容作变址。的内容作变址。给给A A赋予不同的值,即可实现程序的多分支转移。赋予不同的值,即可实现程序的多分支转移。 5条件转移指令条件转移指令规定的条件满足,则进行转移,条件不满足则顺序执规定的条件满足,则进行转移,条件不满足则顺

58、序执行下一条指令。行下一条指令。当条件满足时,把当条件满足时,把PCPC装入下一条指令的第一个字节地装入下一条指令的第一个字节地址,再把带符号的相对偏移量址,再把带符号的相对偏移量relrel加到加到PCPC上,计算上,计算出目标地址。出目标地址。JZ relJZ rel;如果累加器为;如果累加器为“0 0”,则转移,则转移JNZ relJNZ rel;如果累加器非;如果累加器非“0 0”,则转移,则转移 6 6比较不相等转移指令比较不相等转移指令CJNE A,direct,relCJNE A,direct,relCJNE A,#data,relCJNE A,#data,relCJNE Rn,

59、#data,relCJNE Rn,#data,relCJNE Ri,#data,relCJNE Ri,#data,rel比较前面两个操作数的大小,如果它们的值不相等则比较前面两个操作数的大小,如果它们的值不相等则转移。转移。如果第一操作数(无符号整数)小于第二操作数(无如果第一操作数(无符号整数)小于第二操作数(无符号整数),则置进位标志位符号整数),则置进位标志位CyCy,否则清,否则清“0 0”CyCy。7 7减减1 1不为不为0 0转移指令转移指令这这是是一一组组把把减减1 1与与条条件件转转移移两两种种功功能能结结合合在在一一起起的的指指令。共两条指令:令。共两条指令:DJNZ Rn,

60、relDJNZ Rn,rel;n=0;n=07 7DJNZ direct,rel DJNZ direct,rel 将源操作数(将源操作数(RnRn或或directdirect)减)减1 1,结果回送到,结果回送到RnRn寄存寄存器或器或directdirect中去。如果结果不为中去。如果结果不为0 0则转移。允许程序则转移。允许程序员把寄存器员把寄存器RnRn或内部或内部RAMRAM的的directdirect单元用作程序单元用作程序循环计数器。主要用于控制程序循环。以减循环计数器。主要用于控制程序循环。以减1 1后是否后是否为为“0 0”作为转移条件,即可实现按次数控制循环。作为转移条件,即

61、可实现按次数控制循环。8 8调用子程序指令调用子程序指令(1)(1)短调用指令短调用指令ACALL addrllACALL addrll与与AJMPAJMP指指令令相相类类似似,是是为为了了与与MCS-48MCS-48中中的的CALLCALL指指令令兼兼容而设的。容而设的。(2)(2)长调用指令长调用指令LCALL addr16LCALL addr169 9子程序的返回指令子程序的返回指令RETRET 执行本指令时:执行本指令时:(SPSP)PCHPCH,然后(,然后(SPSP)-1SP-1SP(SPSP)PCLPCL,然后(,然后(SPSP)-1SP-1SP功能是从堆栈中退出功能是从堆栈中退

62、出PCPC的高的高8 8位和低位和低8 8位字节,把栈指位字节,把栈指针减针减2 2,从,从PCPC值开始继续执行程序。值开始继续执行程序。1010中断返回指令中断返回指令RETIRETI功功能能与与RETRET指指令令相相似似,两两指指令令不不同同之之处处,是是本本指指令令清清除除了了中中断断响响应应时时,被被置置“1 1”的的MCS-51MCS-51内内部部中中断断优优先级寄存器的优先级状态。先级寄存器的优先级状态。1111空操作指令空操作指令NOPNOP 3.4.5 3.4.5 位操作指令位操作指令 1.1.数据位传送指令数据位传送指令 MOV C,bitMOV C,bit MOV bi

63、t,C MOV bit,C 例例 MOV C,06H MOV C,06H ;(20H).6Cy(20H).6Cy06H06H是内部是内部RAM 20HRAM 20H字节位字节位6 6的位地址。的位地址。 MOV P1.0,C MOV P1.0,C ;CyP1.0CyP1.0 2 2位变量修改指令位变量修改指令 CLR CCLR C;清;清“0 0”CyCy CLR bit CLR bit;清;清“0 0”bitbit位位 CPL CCPL C;CyCy求反求反 CPL bitCPL bit ;bitbit位求反位求反 SETB CSETB C;置;置“1 1” Cy Cy SETB bit S

64、ETB bit ;置;置“1 1” bit bit位位这组指令将操作数指出的位清这组指令将操作数指出的位清“0 0”、求反、置、求反、置“1 1”, 不影响其它标志。不影响其它标志。 例例 CLR C CLR C ;0Cy0Cy CLR 27H CLR 27H ;00(24H24H).7.7位位 CPL 08H CPL 08H ;(21H21H).0.0位位 SETB P1.7SETB P1.7 ;1P1.71P1.7位位 3 3位变量逻辑与指令位变量逻辑与指令 ANL C,bit ANL C,bit ;bitCyCybitCyCy ANL C,/bit ANL C,/bit; ;/bit C

65、yCy/bit CyCy 4 4位变量逻辑或指令位变量逻辑或指令 ORL C,bitORL C,bit ORL C,/bitORL C,/bit 5 5条件转移类指令条件转移类指令JC rel JC rel ;如果进位位;如果进位位Cy=1Cy=1,则转移,则转移JNC rel JNC rel ;如果进位位;如果进位位Cy=0Cy=0,则转移,则转移JB bit,rel JB bit,rel ;如果直接寻址位;如果直接寻址位=1=1,则转移则转移JNB bit,rel JNB bit,rel ;如果直接寻址位;如果直接寻址位=0=0,则转移则转移JBC bit,rel JBC bit,rel

66、;如果直接寻址位;如果直接寻址位=1=1, 则转移,并清则转移,并清0 0直接寻址位直接寻址位 表表3-23-2至表至表3-63-6(P61-P64P61-P64)列出了按指令功能排列的)列出了按指令功能排列的全部指令及功能的简要说明,以及指令长度、执行全部指令及功能的简要说明,以及指令长度、执行的时间以及指令代码(机器代码)。的时间以及指令代码(机器代码)。读者可根据指令助记符读者可根据指令助记符, ,迅速查到对应的指令代码迅速查到对应的指令代码(手工汇编)。也可根据指令代码迅速查到对应的(手工汇编)。也可根据指令代码迅速查到对应的指令助记符(手工反汇编)。指令助记符(手工反汇编)。应熟练地掌握这些指令表的使用,因为这是使用应熟练地掌握这些指令表的使用,因为这是使用MCS-MCS-5151汇编语言进行程序设计的基础。汇编语言进行程序设计的基础。 表3-2

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

最新文档


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

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