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

下载本文档

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

文档简介

1、单片机原理及应用单片机原理及应用第第3章章 AT89S51单片机的指令系统单片机的指令系统主讲人:赵宇洋主讲人:赵宇洋第第3章章 目录目录3.1 指令系统概述指令系统概述3.2 指令格式指令格式3.3 指令系统的寻址方式指令系统的寻址方式3.4 AT89S51指令系统分类介绍指令系统分类介绍 3.4.1 数据传送类指令 3.4.2 算术运算类指令 3.4.3 逻辑操作类指令 3.4.4 控制转移类指令 3.4.5 位操作类指令3.5 AT89S51指令汇总指令汇总3.6 某些指令的说明某些指令的说明MCS-51MCS-51的基本指令共的基本指令共111111条条,按指令所占的字节来分:按指令所

2、占的字节来分:单字节指令单字节指令4949条;条;双字节指令双字节指令4545条;条;三字节指令三字节指令1717条。条。按指令的执行时间来分按指令的执行时间来分:1 1个机器周期(个机器周期(1212个时钟振荡周期)指令个时钟振荡周期)指令6464条条2 2个机器周期(个机器周期(2424个时钟振荡周期)指令个时钟振荡周期)指令4545条条只有只有乘、除两条指令乘、除两条指令的执行时间为的执行时间为4 4个机器周期个机器周期(4848个时钟振荡个时钟振荡周期)。周期)。12MHz12MHz晶振晶振: :机器周期为机器周期为1 1 s s。3.1 3.1 指令系统指令系统概述概述指令格式,包括

3、指令的长度、指令内部信息的安排等。指令格式,包括指令的长度、指令内部信息的安排等。一条指令由一条指令由两部分组成,即两部分组成,即操作码操作码和和操作数操作数。操作码操作码用来规定指令进行什么操作;用来规定指令进行什么操作;操作数操作数则是指令操作的对象:可以为具体的数据,也可为数据则是指令操作的对象:可以为具体的数据,也可为数据地址或符号。地址或符号。 对于指令中的操作数,因为指令常伴有对于指令中的操作数,因为指令常伴有从右向左传送数据从右向左传送数据的内的内容,因此把左边的操作数称为容,因此把左边的操作数称为目的操作数目的操作数,右边的操作数称为,右边的操作数称为源操作数源操作数。3.2

4、3.2 指令指令格式格式有单字节指令、双字节指令、三字节不同长度的指令:有单字节指令、双字节指令、三字节不同长度的指令:单字节指令单字节指令(49(49条条) ):指令只有一个字节,操作码和操作数同在一个指令只有一个字节,操作码和操作数同在一个字节中。字节中。 如如MOV A,RnMOV A,Rn指令机器码指令机器码11001rrr,11001rrr,其中其中rrrrrr可表示可表示000111000111分别代表分别代表R0R7R0R7 双字节指令(双字节指令(4545条):条):一个字节为操作码,另一个字节是操作数。一个字节为操作码,另一个字节是操作数。 如如MOV A,#dataMOV

5、A,#data三字节指令(三字节指令(1717条):条):操作码占一个字节,操作数占二个字节。其操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。中操作数既可能是数据,也可能是地址。 如如ANL direct,#dataANL direct,#data。第一个字节操作码,第二个字节。第一个字节操作码,第二个字节8 8位地址位地址directdirect,第三个字节,第三个字节8 8位立即数位立即数,#data,#data寻址方式寻址方式就是在指令中说明操作数所在地址的方法。就是在指令中说明操作数所在地址的方法。共共7 7种种寻址方式,根据源操作数来决定寻址方式。寻址方式

6、,根据源操作数来决定寻址方式。1 1寄存器寻址方式寄存器寻址方式操作数在寄存器中操作数在寄存器中, ,即在指令中把指定寄存器的内容作为操作数。即在指令中把指定寄存器的内容作为操作数。在寄存器寻址方式中,用符号名称表示寄存器。在寄存器寻址方式中,用符号名称表示寄存器。寻址范围寻址范围包括:包括:(1 1)4 4组通用工作寄存区共组通用工作寄存区共3232个工作寄存器。指令中只能用当前指定个工作寄存器。指令中只能用当前指定寄存器组,因此寄存器名称只能是寄存器组,因此寄存器名称只能是R0R7R0R7;(2 2)部分特殊功能寄存器,例如累加器)部分特殊功能寄存器,例如累加器A A、B B寄存器以及数据

7、指针寄存器以及数据指针DPTRDPTR等。等。3.3 3.3 指令系统的寻址方式指令系统的寻址方式2 2直接寻址方式直接寻址方式操作数直接以单元地址的形式给出:操作数直接以单元地址的形式给出: MOV AMOV A,3AH3AH 寻址范围寻址范围:(1)(1)内部内部RAMRAM的的128128个单元;个单元;(2)(2)特殊功能寄存器。除了以单元地址的形式外特殊功能寄存器。除了以单元地址的形式外, ,还还可用寄存器符号可用寄存器符号的形的形式给出。直接寻址是访问特殊功能寄存器的唯一方法。式给出。直接寻址是访问特殊功能寄存器的唯一方法。 例如:例如: MOV AMOV A,80H 80H 与与

8、 MOV A MOV A,P0P0是等价的是等价的。3. 3. 寄存器间接寻址方式寄存器间接寻址方式 指令中在指令中在寄存器中存放的是操作数的地址,从该地址取出来的才是寄存器中存放的是操作数的地址,从该地址取出来的才是操作数操作数; ;在寄存器的名称前面加在寄存器的名称前面加前缀标志前缀标志“”“”。 访问内部访问内部RAMRAM或外部数据存储器的低或外部数据存储器的低256256个字节时,个字节时,只能采用只能采用R0R0或或R1R1作为间址寄存器作为间址寄存器。例如例如: MOV AMOV A,RiRi ;i=0i=0或或1 1 其中其中RiRi中的内容为中的内容为40H40H,把内部,把

9、内部RAM40HRAM40H单元内容送单元内容送A A。寻址范围寻址范围:(1 1)访问内部)访问内部RAMRAM低低128128个单元,其通用形式为个单元,其通用形式为RiRi(2 2)对片外数据存储器的)对片外数据存储器的64K64K字节的间接寻址,字节的间接寻址, 例如:例如:MOVX AMOVX A,DPTRDPTR(3 3)片外数据存储器的低)片外数据存储器的低256256字节字节 例如:例如:MOVX AMOVX A,RiRi(4 4)堆栈区)堆栈区 堆栈操作指令堆栈操作指令PUSHPUSH(压栈)和(压栈)和POPPOP(出栈)使用堆栈指针(出栈)使用堆栈指针(SPSP)作间)作

10、间址寄存器址寄存器4 4立即寻址方式立即寻址方式 操作数在指令中直接给出,需在操作数前面加前缀操作数在指令中直接给出,需在操作数前面加前缀 “#” “#”。例如:例如: MOV DPTRMOV DPTR,#40H#40H 5 5基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式 本寻址方式是以本寻址方式是以DPTRDPTR或或PCPC作基址寄存器,以累加器作基址寄存器,以累加器A A作为变址寄存作为变址寄存器,两者相加形成的器,两者相加形成的1616位程序存储器地址为操作数地址。位程序存储器地址为操作数地址。例如:指令例如:指令 MOVC AMOVC A,A+DPTRA+DP

11、TR 其中其中A A的原有内容为的原有内容为54H54H,DPTRDPTR的内容为的内容为1256H1256H,该指令执行的结果,该指令执行的结果是把程序存储器是把程序存储器12AAH12AAH单元的内容传送给单元的内容传送给A A。 若若12AAH12AAH单元内容为单元内容为0 0,则,则A A的内容也变成的内容也变成0 0。变址寻址说明:变址寻址说明: (1 1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB64KB。(2 2)本寻址方式的指令只有本寻址方式的指令只有3 3条:条:MOVC AMOVC A,A+D

12、PTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR 它们都是它们都是单字节单字节指令指令6 6相对寻址方式相对寻址方式 在相对寻址的转移指令中,给出了地址偏移量,以在相对寻址的转移指令中,给出了地址偏移量,以“rel”“rel”表示,即表示,即把把PCPC的当前值加上偏移量就构成了程序转移的目的地址:的当前值加上偏移量就构成了程序转移的目的地址: 目的地址目的地址= =转移指令所在的地址转移指令所在的地址 + + 转移指令的字节数转移指令的字节数+ rel+ rel 偏移量偏移量relrel是一带符号的是一带符号的8 8位二进制数补码数位二进制

13、数补码数; ;范围是:范围是:128 +127:128 +127: 向地址增加方向最大可转移(向地址增加方向最大可转移(127+127+转移指令字节)个单元地址,向转移指令字节)个单元地址,向地址减少方向最大可转移(地址减少方向最大可转移(128-128-转移指令字节)个单元地址。转移指令字节)个单元地址。7 7位寻址方式位寻址方式 MCS-51MCS-51有位处理功能,可以对数据位进行操作,有位处理功能,可以对数据位进行操作,例如:例如: MOV CMOV C,40H40H 是把位是把位40H40H的值送到进位位的值送到进位位C C。寻址范围包括:寻址范围包括:(1 1)内部)内部RAMRA

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

15、,可使用标志位,可使用F0F0表示该位。表示该位。单元地址加位数单元地址加位数的表示方法。例如的表示方法。例如 :(0D0H).5 :(0D0H).5。特殊功能寄存器符号加位数特殊功能寄存器符号加位数的表示方法。例如的表示方法。例如:PSW.5:PSW.5。111111条指令条指令,按功能分类,可分为下面,按功能分类,可分为下面5 5大类大类: (1 1)数据传送类)数据传送类(28(28条条) ) (2 2)算术操作类)算术操作类(24(24条条 (3 3)逻辑运算类)逻辑运算类(25(25条条) ) (4 4)控制转移类)控制转移类(17(17条条) ) (5 5)位操作类)位操作类(17

16、(17条条) )3.4 513.4 51指令系统分类介绍指令系统分类介绍3.4.1 3.4.1 数据传送类指令数据传送类指令 可分为内部可分为内部8 8位数传送、位数传送、1616位数传送、外部数据传送、程序存储器传位数传送、外部数据传送、程序存储器传送、交换和堆栈操作指令。送、交换和堆栈操作指令。助记符助记符8 8种种:MOV:MOV、MOVXMOVX、MOVCMOVC、SWAPSWAP、XCHXCH、XCHDXCHD、PUSHPUSH、POPPOP使用最频繁的一类指令使用最频繁的一类指令, ,通用格式:通用格式: MOV MOV , 属属“复制复制”性质,而不是性质,而不是“搬家搬家”。数

17、据传送类指令数据传送类指令不影响标志位不影响标志位CyCy、AcAc和和OVOV,但,但不包括不包括奇偶标志位奇偶标志位P P。8 8位数传送指令位数传送指令源操作数:累加器源操作数:累加器A A、RnRn、直接地址、直接地址directdirect、RiRi、#data#data目的操作数:累加器目的操作数:累加器A A、RnRn、直接地址、直接地址directdirect、Ri Ri 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

18、; (Ri)A,i=0,1 MOV A,direct ;MOV A,direct ;(directdirect)AA MOV A,#data ; #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为目的操作数的指令为

19、目的操作数的指令 MOV Rn,A ; (A)Rn,n=0MOV Rn,A ; (A)Rn,n=07 7 MOV Rn,direct ;MOV 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为目的操作数的指令为目的操作数的指令 (直接地址包括(直

20、接地址包括I/OI/O口)口) MOV direct,A ; (A)directMOV direct,A ; (A)direct MOV MOV direct,Rn; (Rn)direct, n=0direct,Rn; (Rn)direct, n=07 7 MOV direct1,direct2; MOV direct1,direct2; MOV direct,Ri ; (Ri)directMOV direct,Ri ; (Ri)directMOVMOV direct,#data; #datadirectdirect,#data; #datadirect功能:功能:把源操作数送入直接地址指出的

21、存储单元。把源操作数送入直接地址指出的存储单元。directdirect指的是内部指的是内部RAMRAM或或SFRSFR的地址。的地址。4.4.以寄存器间接地址为目的操作数的指令以寄存器间接地址为目的操作数的指令 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 ; #d

22、ata16DPTRMOV DPTR,#data16 ; #data16DPTR 唯一的唯一的1616位数据的传送指令位数据的传送指令 , ,立即数的高立即数的高8 8位送入位送入DPHDPH,立即数的低,立即数的低8 8位送入位送入DPLDPL。6 6堆栈操作指令堆栈操作指令MCS-51MCS-51内部内部RAMRAM中可以设定一个中可以设定一个后进先出后进先出的区域称作的区域称作堆栈堆栈. .堆栈指针堆栈指针SPSP指出堆栈的栈顶位置。指出堆栈的栈顶位置。(1)(1)进栈指令进栈指令 PUSH directPUSH direct 先将栈指针先将栈指针SPSP加加1 1,然后把,然后把dire

23、ctdirect中的内容送到栈指针中的内容送到栈指针SPSP指示的内部指示的内部RAMRAM单元中。单元中。例如:例如: 当(当(SPSP)=60H,=60H,(A A)=30H,=30H,(B B)=70H=70H时,时, 执行:执行: PUSH ACCPUSH ACC; (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 (

24、2) (2)出栈指令出栈指令 POP directPOP direct SP SP指示的栈顶(内部指示的栈顶(内部RAMRAM单元)内容送入单元)内容送入directdirect字节单元中,然后字节单元中,然后栈指针栈指针SPSP减减1.1. 例如例如: : 当当 (SP)=62H (SP)=62H,(62H)=70H(62H)=70H,(61H)=30H,(61H)=30H, 执行:执行: POP B;(SP)B,(SP)-1SP POP B;(SP)B,(SP)-1SP POP ACC ;(SP)ACC,(SP)-1SP POP ACC ;(SP)ACC,(SP)-1SP 结果:结果:(B

25、)=70H(B)=70H,(ACC)=30H,(SP)=60H(ACC)=30H,(SP)=60H总结:先(SP)+1再入栈,先出栈再(再入栈,先出栈再(SP)-17.7.累加器累加器A A与外部数据存储器传送指令与外部数据存储器传送指令MOVMOV后后 “X”“X”表示单片机访问的是片外表示单片机访问的是片外RAMRAM存储器或存储器或I/OI/O。 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功能:读外部功能

26、:读外部RAMRAM存储器或存储器或I/OI/O中的一个字节中的一个字节执行指令时,执行指令时,P3.7P3.7引脚的引脚的 用于外部数据存储器或用于外部数据存储器或I/OI/O的读选的读选通通. .P0P0口分时输出由口分时输出由RiRi或或DPLDPL指定的低指定的低8 8位地址和输入到累加器的位地址和输入到累加器的数据信息,数据信息,P2P2口输出口输出DPHDPH指定的高指定的高8 8位地址信息。位地址信息。 RD MOVX DPTR,A;(A)(DPTR), MOVX DPTR,A;(A)(DPTR),写外部写外部RAM/IORAM/IO MOVX Ri,A ;(A)(Ri), MO

27、VX Ri,A ;(A)(Ri),写外部写外部RAM/IORAM/IO功能:把功能:把A A中一个字节的数据写到外部中一个字节的数据写到外部RAMRAM存储器或存储器或I/OI/O中。中。执行指令时,执行指令时,P3.6P3.6引脚的引脚的 用于外部数据存储器或用于外部数据存储器或I/OI/O的写的写选通选通. .P0P0口分时输出由口分时输出由RiRi或或DPLDPL指定的低指定的低8 8位地址和由累加器输入位地址和由累加器输入的数据信息,的数据信息,P2P2口输出口输出DPHDPH指定的高指定的高8 8位地址信息位地址信息 采用采用DPTRDPTR间接寻址,寻址外部间接寻址,寻址外部64K

28、64K单元高单元高8 8位地址(位地址(DPHDPH)由)由P2P2口口输出,低输出,低8 8位地址和数据均由位地址和数据均由P0P0口输出口输出WR例(例(R0R0)=12H,(R1)=34H,=12H,(R1)=34H,片外片外RAM34HRAM34H单元的内容为单元的内容为56H,56H,执行指令执行指令 MOVX A,R1 MOVX A,R1 MOVX R0,A MOVX R0,A 后后A A的内容是多少的内容是多少,12H,12H呢?呢? (A A)= =(12H12H)=56H=56H8.8.查表指令查表指令 共两条,用于读共两条,用于读程序存储器程序存储器中的数据表格的指令,均采

29、用基址寄中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。存器加变址寄存器间接寻址方式。 指令是在指令是在MOVMOV的后面加的后面加C C,“C”“C”是是CODECODE的第一个字母的第一个字母 (1) MOVC A,A+PC(1) MOVC A,A+PC 以以PCPC作基址寄存器,作基址寄存器,A A的内容作为的内容作为无符号整数无符号整数和和PCPC中的内容(下一中的内容(下一条指令的起始地址)相加后得到一个条指令的起始地址)相加后得到一个1616位的地址,该地址指出的位的地址,该地址指出的程序存储单元的内容送到累加器程序存储单元的内容送到累加器A A。优点:优点:不改变特

30、殊功能寄存器及不改变特殊功能寄存器及PCPC的状态,根据的状态,根据A A的内容就可以取的内容就可以取出表格中的常数。出表格中的常数。缺点:缺点:只能存放在该条查表指令后面的只能存放在该条查表指令后面的256256个单元之内个单元之内,称为近程,称为近程查表。查表。(2) MOVC A,A+DPTR(2) MOVC A,A+DPTR 以以DPTRDPTR作为基址寄存器,作为基址寄存器,A A的内容作为无符号数和的内容作为无符号数和DPTRDPTR的内容相加得的内容相加得到一个到一个1616位的地址,把由该地址指出的程序存储器单元的内容送到位的地址,把由该地址指出的程序存储器单元的内容送到累加器

31、累加器A.A. 例如例如 (DPTR)=8100H (A)=40H (DPTR)=8100H (A)=40H 执行指令执行指令 MOVC A,A+DPTRMOVC A,A+DPTR 本指令执行结果只和指针本指令执行结果只和指针DPTRDPTR及累加器及累加器A A的内容有关,与该指令存放的内容有关,与该指令存放的地址及常数表格存放的地址无关,的地址及常数表格存放的地址无关,因此表格的大小和位置可以在因此表格的大小和位置可以在64K64K程序存储器中任意安排程序存储器中任意安排,称为远程查表。一个表格可以为各个,称为远程查表。一个表格可以为各个程序块公用。程序块公用。9 9字节交换指令字节交换指

32、令 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)XCH 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)互换互

33、换 结果:结果:(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H1010半字节交换指令半字节交换指令(1) XCHD A,RiXCHD A,Ri 累加器的低累加器的低4 4位与内部位与内部RAMRAM低低4 4位交换。位交换。例如例如: (R0)=60H,(60H)=3EH,(A)=59H: (R0)=60H,(60H)=3EH,(A)=59H执行完执行完 XCHD A,ROXCHD A,RO 指令指令, ,则则(A)=5EH,(60H)=39H(A)=5EH,(60H)=39H。 (2) SWAP

34、 ASWAP A 累加器累加器A的高、低半字节交换,也可看作的高、低半字节交换,也可看作4位循环指令。位循环指令。 XCHDXCHD和和SWAP主要用于主要用于16进制数或进制数或BCD码的数位交换码的数位交换3.4.2 3.4.2 算术操作类指令算术操作类指令 单字节的加、减、乘、除法指令,都是针对单字节的加、减、乘、除法指令,都是针对8 8位二进制位二进制无符号数无符号数, ,对于对于符号数需另作处理。符号数需另作处理。执行的结果对执行的结果对CyCy、AcAc、OVOV 三种标志位有影响。三种标志位有影响。但增但增1 1和减和减1 1指令不影响上述标志。指令不影响上述标志。1 1加法指令

35、加法指令 共有共有4 4条加法运算指令:条加法运算指令: ADD A,Rn ;(A)+(Rn)A ADD 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)+#dataA ADD A,#data ;(A)+#dataA 一个加数总是来自累加器一个加数总是来自累加器A A,而另一个加数可由不同的寻址方式得到,结果,而另一个加数可由不同的寻址方式得到,

36、结果总是放在总是放在A A中。中。执行加法指令时,执行加法指令时,A A中的运算结果对中的运算结果对各标志位各标志位的影响:的影响:(1 1)如果位)如果位7 7有进位,则有进位,则进位标志进位标志CyCy置置“1” “1” ,否则清,否则清“0”“0”;(2 2)如果位)如果位3 3有进位,有进位,辅助进位标志辅助进位标志AcAc置置“1” “1” ,否则清,否则清“0”“0”;(3 3)如果位)如果位6 6有进位,而位有进位,而位7 7没有进位,或者位没有进位,或者位7 7有进位,而位有进位,而位6 6没有,则没有,则溢溢出标志位出标志位OVOV置置“1”“1”,否则清,否则清“0” “0

37、” 。溢出标志位溢出标志位OVOV的状态,只有在带符号数加法运算时有意义的状态,只有在带符号数加法运算时有意义。 2 2带进位加法指令带进位加法指令标志位标志位CyCy参加运算,是三个数相加,常用于多字节数相加。参加运算,是三个数相加,常用于多字节数相加。共共4 4条:条: ADDCADDC A,RnA,Rn;(A)+(Rn)+CA;(A)+(Rn)+CA,n=07n=07 ADDC ADDC A,directA,direct;(A)+(direct)+CA ;(A)+(direct)+CA ADDCADDC A,Ri A,Ri ;(A)+(Ri)+CA;(A)+(Ri)+CA,i=0,1i=

38、0,1 ADDC ADDC A,#data A,#data ;(A)+#data+CA;(A)+#data+CA 例:例:(A A)=85H,=85H,(20H20H)=FFH,=FFH, Cy=1Cy=1,执行指令:,执行指令: ADDC A,20HADDC A,20H结果为结果为: :(A A)=85H=85H,Cy=1Cy=1,Ac=1Ac=1,OV=0OV=0,P=1 P=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

39、Ri ;i=0,1 INC DPTRINC DPTR第第3 3条指令条指令 当当directdirect为为P0P3P0P3口时(对应地址口时(对应地址80H80H、90H90H、A0HA0H、B0HB0H),),功能是修改输出口的内容,指令执行过程首先读入端口内容,在功能是修改输出口的内容,指令执行过程首先读入端口内容,在CPUCPU加加1 1,再送到端口。此时读的是锁存器而不是引脚。指令具有读,再送到端口。此时读的是锁存器而不是引脚。指令具有读- -修修改改- -写的功能。写的功能。第第5 5条指令条指令 INC DPTRINC DPTR,是,是1616位数增位数增1 1指令。指令首先对低

40、指令。指令首先对低8 8位指针位指针DPLDPL的的内容执行加内容执行加1 1的操作,当产生溢出时,就对的操作,当产生溢出时,就对DPHDPH的内容进行加的内容进行加1 1操作。操作。4 4十进制调整指令十进制调整指令用于对用于对BCDBCD码码十进制数十进制数加法加法运算结果的内容修正。运算结果的内容修正。说明:说明:BCDBCD码是采用码是采用4 4位二进制数编码,并且只采用了前位二进制数编码,并且只采用了前1010个编码个编码0000100100001001,分别代表,分别代表0909,而,而1010111110101111为无效码。为无效码。 指令格式:指令格式: DA A DA A两

41、个两个BCDBCD码按二进制相加之后,必须经本指令的调整才能得到正码按二进制相加之后,必须经本指令的调整才能得到正确的压缩确的压缩BCDBCD码的和数。码的和数。二进制数加法指令不能完全适用于二进制数加法指令不能完全适用于BCDBCD码十进制数的加法运算,码十进制数的加法运算,对结果作有条件的修正,即十进制调整。对结果作有条件的修正,即十进制调整。 上述的上述的BCD码运算中:码运算中:(a)结果)结果正确正确。(b)结果)结果不正确不正确,因为,因为BCD码中没有码中没有1111这个编码。这个编码。(c)结果)结果不正确不正确,正确结果应为,正确结果应为17,而运算结果却是,而运算结果却是1

42、1。 可见,二进制数加法指令不能完全适用于可见,二进制数加法指令不能完全适用于BCD码十进制数的加码十进制数的加法运算,要对结果做有条件的修正,这就是所谓的法运算,要对结果做有条件的修正,这就是所谓的十进制调整十进制调整问题。问题。33出错原因和调整方法:出错原因和调整方法: BCD BCD码只用了其中的码只用了其中的1010个,个,6 6个没用到的编码。个没用到的编码。(10101010,10111011,11001100,11011101,11101110,11111111)为)为无效码。无效码。 凡凡相加结果大于相加结果大于9 9说明进入无效码编码区时,其结果就是错误的。说明进入无效码编

43、码区时,其结果就是错误的。凡凡相加结果有进位相加结果有进位说明跳过无效码编码区说明跳过无效码编码区(比无效编码区的数码还大(比无效编码区的数码还大),结),结果错误。果错误。 错误结果比正确结果差错误结果比正确结果差6 6(6 6个无效编码),调整的方法是把结果加个无效编码),调整的方法是把结果加6 6调整,调整,即所谓十进制调整修正。即所谓十进制调整修正。修正方法应是:修正方法应是:累加器低累加器低4 4位大于位大于9 9或辅助进位位或辅助进位位Ac=1Ac=1,则进行低,则进行低4 4位加位加6 6修正。修正。 (A A)=(A)+06H=(A)+06H累加器高累加器高4 4位大于位大于9

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

45、ADD A,R5 DA A DA A 由于高、低由于高、低4 4位分别大于位分别大于9 9,所以要分别加,所以要分别加6 6进行十进制调整对进行十进制调整对结果行修正。结果行修正。结果为:结果为: (A A)=23H=23H,Cy=1Cy=1可见,可见,56+67=12356+67=123,结果是正确的。,结果是正确的。0101 0110+ 0110 0111=1011 1101+ 0110 0110 =1,0010 00115 5带借位的减法指令带借位的减法指令 从累加器从累加器A A中的内容减去指定的变量和进位标志中的内容减去指定的变量和进位标志CyCy的值。的值。4 4条指令:条指令:

46、SUBB A,RnSUBB A,Rn ; ; (A A)- -(RnRn)- CyA- CyA,n=0n=07 7 SUBB A,directSUBB A,direct ; ; (A A)- -(directdirect)- CyA- CyA SUBB A,RiSUBB A,Ri ; ; (A A)- -((Ri)(Ri))- CyA, i=0,1 - CyA, i=0,1 SUBB A,#dataSUBB A,#data ; ; (A A)- #data - CyA- #data - CyA如果位如果位7 7需借位,则需借位,则CyCy置置“1” “1” ,否则清,否则清“0” “0” ;

47、如果位如果位3 3需借位,则需借位,则AcAc置置“1” “1” ,否则清,否则清“0” “0” ;如果位如果位6 6需借位而位需借位而位7 7不需要借位,或者位不需要借位,或者位7 7需借位而位需借位而位6 6不需借位,不需借位,则溢出标志位则溢出标志位OVOV置置“1” “1” ,否则清,否则清“0” “0” 。6 6减减1 1指令指令 4 4条指令:条指令:DEC ADEC A;(A)-1A(A)-1ADEC Rn DEC Rn ;(Rn)-1Rn(Rn)-1Rn,n=0n=07 7DEC directDEC direct;(direct)-1direct(direct)-1direct

48、DEC Ri DEC Ri ;(Ri)-1(Ri)-1(RiRi),),i=0,1i=0,17 7乘法指令乘法指令 MUL AB MUL AB ;A ABBABBA 两个无符号两个无符号8 8位二进制数相乘,积低位二进制数相乘,积低8 8位在位在A A中,高中,高8 8位在位在B B中。中。 如果积大于如果积大于255255,则置,则置“1”“1”溢出标志位溢出标志位OVOV。(。(CyCy总清总清0 0)8 8除法指令除法指令 两个无符号两个无符号8 8位二进制数相除,商放位二进制数相除,商放A A中,余数放中,余数放B B中中,CyCy位与位与OVOV位清位清0 0。 DIV AB DIV

49、 AB ;A/BAA/BA(商),余数(商),余数BB 如果如果B B的内容为的内容为“0”“0”(即除数为(即除数为“0”“0”),则存放结果的),则存放结果的A A、B B寄存寄存器中的内容不定,并溢出标志位器中的内容不定,并溢出标志位OVOV置置“1”“1” 。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的内容的内容按位逻辑

50、取反按位逻辑取反。 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的内容向右环移一位,的

51、内容向右环移一位,Acc.0Acc.0移入移入Acc.7Acc.7,不影响其它,不影响其它标志。标志。5 5带进位右环移指令带进位右环移指令 RRC A RRC 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)互换。)互换。 例例

52、(A A)=0C5H=0C5H,执行指令:,执行指令: SWAP A SWAP A 结果:(结果:(A A)=5CH=5CH7 7逻辑与指令逻辑与指令 ANL A,Rn ANL A,Rn ; ; (A A)(RnRn)AA,n=0n=07 7 ANL A,direct ANL A,direct ; ; (A A)(directdirect)AA 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 ; ; (

53、directdirect)(A)direct(A)direct ANL direct,#data ANL 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)AA

54、 ORL 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

55、)=37H =37H 9 9逻辑异或指令逻辑异或指令 XRL A,Rn XRL A,Rn ;(A) (Rn)A(A) (Rn)A XRL A,direct XRL A,direct ;(A) (A) (directdirect)AA 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

56、,#data ;(;(directdirect) #data direct #data direct 例例 (A A)=90H,=90H,(R3R3)=73H =73H 执行指令:执行指令: XRL A,R3XRL A,R3结果:(结果:(A A)=E3H=E3H3.4.4 3.4.4 控制转移类指令控制转移类指令 程序的顺序执行是由程序的顺序执行是由PCPC自动加自动加1 1来实现的,但在应用系统中,往往来实现的,但在应用系统中,往往需要强迫改变程序顺序执行顺序。需要强迫改变程序顺序执行顺序。 如调用子程序。如调用子程序。 1 1长跳转指令长跳转指令 LJMP addr16LJMP addr

57、16 指令执行时把指令的第二和第三字节分别装入指令执行时把指令的第二和第三字节分别装入PCPC的高位和低位字节的高位和低位字节中,无条件地转向中,无条件地转向addr16addr16指出的目标地址。目标地址可以在指出的目标地址。目标地址可以在64K64K程程序存储器地址空间的任何位置。序存储器地址空间的任何位置。2 2相对转移指令相对转移指令 SJMP relSJMP rel实现的程序转移是双向的。实现的程序转移是双向的。在编写程序时,直接写上要转向的目标地址标号就可以。在编写程序时,直接写上要转向的目标地址标号就可以。例如:例如: LOOPLOOP:MOV AMOV A,R6 R6 SJMP

58、 LOOPSJMP LOOP 程序在汇编时,由汇编程序自动计算和填入偏移量。程序在汇编时,由汇编程序自动计算和填入偏移量。手工汇编时,偏移量手工汇编时,偏移量relrel的值则需程序设计人员计算。的值则需程序设计人员计算。 3 3绝对转移指令绝对转移指令 AJMP addrllAJMP addrll2K2K字节范围内字节范围内的无条件跳转指令,的无条件跳转指令, 64K 64K程序存储器空间分为程序存储器空间分为3232个区,个区,每区每区2K2K字节,字节,转移的目标地址必须与转移的目标地址必须与AJMPAJMP下一条指令的地址的高下一条指令的地址的高5 5位位地址码地址码A15A11A15

59、A11相同。相同。执行指令时,先执行指令时,先PCPC加加2 2,然后把,然后把addrlladdrll送入送入PC.10PC.10PC.0PC.0,PC.15PC.15PC.11PC.11保持不变,程序转移到目标地址。保持不变,程序转移到目标地址。4 4间接跳转指令(散转指令)间接跳转指令(散转指令) JMP A+DPTRJMP A+DPTR 由由A A中中8 8位无符号数与位无符号数与DPTRDPTR的的1616位数内容之和来确定。以位数内容之和来确定。以DPTRDPTR内容作内容作为基址,为基址,A A的内容作变址。的内容作变址。5 5条件转移指令条件转移指令 规定的条件满足,则进行转移

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

温馨提示

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

评论

0/150

提交评论