1、第第3章章 单片机的汇编语言与程序设计单片机的汇编语言与程序设计 3.2 指令系统简介指令系统简介 3.3 汇编语言的编程方法汇编语言的编程方法 3.1 汇编语言概述汇编语言概述 3.1 汇编语言概述汇编语言概述汇编语言汇编语言(Assembly Language)用用助记助记(字字)符符代替操作码,用代替操作码,用地址符号地址符号代替地址码的代替地址码的一种一种面向机器面向机器的程序设计语言;的程序设计语言;汇编语言优点汇编语言优点代码精炼、执行速度快,但代码精炼、执行速度快,但不便于编写较复杂的程序;不便于编写较复杂的程序;汇编程序处理过程汇编程序处理过程输入源程序输入源程序检查语法检查语
2、法正确性(如有语法错误,输出错误信息)正确性(如有语法错误,输出错误信息)翻翻译成二进制目标程序。译成二进制目标程序。本章学习目标本章学习目标:了解汇编语言的一般规则,借助指令手册了解汇编语言的一般规则,借助指令手册能读懂汇编程序。能读懂汇编程序。5151系列单片机系列单片机采用采用ASM-51ASM-51指令格式指令格式,格式如下格式如下:标号标号:操作码操作码 目的操作数目的操作数,源操作数源操作数 ;注释注释 其中包含其中包含:方括符方括符 表示可选项表示可选项标号标号代表指令所在地址,代表指令所在地址,1-81-8个字母个字母/数字,数字,“:”结结尾尾操作码操作码就是指令功能助记符,
3、指令实体就是指令功能助记符,指令实体目的操作数目的操作数源操作数源操作数注释注释,以,以“;”开头开头一、一、指令格式指令格式二、常用符号二、常用符号当前选中寄存器区的当前选中寄存器区的8个工作寄存器(个工作寄存器(R0R7)RnRidirect-8位内部位内部RAM单元地址单元地址 00H7FH 专用特殊功能寄存器专用特殊功能寄存器SFR的地址的地址80HFFH 立即数(立即数(8位)位)#data#data16 立即数(立即数(16位)位)当前选中寄存器区中可做间址寄存器的当前选中寄存器区中可做间址寄存器的 2个工作寄存器(个工作寄存器(R0、R1)n=07i=0、1addr16 16位目
4、的地址,用于位目的地址,用于LCALL、LJMP指令指令 地址范围地址范围64KB ROM空间空间addr11 11位目的地址,用于位目的地址,用于ACALL、AJMP指令指令 地址范围地址范围2KB ROM空间空间relDPTR 数据地址指针,可做数据地址指针,可做16位间址寄存器位间址寄存器 bit 内内RAM或或SFR中的直接位寻址中的直接位寻址 8位带符号的偏移量,位带符号的偏移量,用于用于SJMP和所有的条件转移指令中和所有的条件转移指令中范围范围-128127A 累加器累加器B 专用寄存器,用于专用寄存器,用于MUL和和DIV指令指令C 位累加器位累加器(PSW.7),进位,进位/
5、借位标志借位标志 间址或基址寄存器前缀如间址或基址寄存器前缀如 Ri,A+DPTR/位操作的前缀,表示对该位操作数取反位操作的前缀,表示对该位操作数取反(X)X中的内容中的内容((X))由由X寻址的单元中的内容寻址的单元中的内容箭头左边的内容被箭头右边的内容所代替箭头左边的内容被箭头右边的内容所代替DPTR,A+PC用何种方式寻找指令的用何种方式寻找指令的操作数操作数或指令的或指令的执行地址执行地址1 1、立即寻址、立即寻址寻址空间:寻址空间:v程序存储器程序存储器v操作数紧跟操作码操作数紧跟操作码OP后面后面,存放在存放在程序存储器中程序存储器中立即寻址:立即寻址:在在 哪哪 里里?用何种方
6、式寻找用何种方式寻找指令的寻址方式:指令的寻址方式:指令的寻址方式:指令的寻址方式:三、三、寻址方式寻址方式MOV A,#30H;A#30H 例例1 1:操作码操作码立即数立即数PCPCPC74H30HROMROM A30HMOV DPTR,#8000H;DPTR#8000H 例例2 2:操作码操作码PCPCPC立即数的高立即数的高8 8位位立即数的低立即数的低8 8位位DPHDPHDPLDPLPC80H80H00H00H90H80HROMROM00H 2 2、直接寻址、直接寻址寻址空间:寻址空间:v在指令中直接给出操作数的在指令中直接给出操作数的真实地址真实地址v操作码后面操作码后面紧跟一个
7、实际紧跟一个实际操作数地址操作数地址内内RAM的低的低128字节字节特殊功能寄存器特殊功能寄存器SFR区区直接寻址直接寻址直接寻址是访问直接寻址是访问 SFR 的唯一方法的唯一方法00H7FH80HFFHCPU内部内部直接直接间接间接“与与”MOV A,30H;A (30H)例例1 1:操作码操作码操作数地址操作数地址PCPCPCE5H30HROMROM A内内RAMRAM 30H ANL 30H,#30H;30H (30H)#30H 例例2 2:操作码操作码PCPCPC直接地址直接地址立即数立即数PC53H30HROMROM 30H 内内RAMRAM 30H ALU“结果结果”3 3、寄存器
8、寻址、寄存器寻址寻址空间:寻址空间:当前选定的当前选定的寄存器内容寄存器内容就是实际操作数就是实际操作数R0R7,由,由RS0、RS1确定确定寄存器区寄存器区/4A、B、CY(位),(位),DPTR、AB MOV A,R3;A (R3)例例1 1:ADD A,R3;A (A)+(R3)例例2 2:寄存器寻址:寄存器寻址:4 4、寄存器间接寻址、寄存器间接寻址寻址空间:寻址空间:内部内部 RAM(R0,R1,SP)外部外部 RAM(R0,R1,DPTR)寄存器间接寻址:寄存器间接寻址:指令选定的指令选定的寄存器内容寄存器内容就是实际就是实际的的操作数地址操作数地址MOV R0,A例例1 1:操作
9、码操作码PCPCF6HROMROMR0R030H;累加器传送指令;累加器传送指令内内RAMRAM 30HA MOVX A,DPTR例例2 2:操作码操作码PCPCE0HROMROMDPTRDPTR 2000H外外RAMRAM 2000HA “读读”RD“读读”5 5、基址寄存器加变址寄存器间接寻址、基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址:基址寄存器加变址寄存器间接寻址:以以DPTR或或PC作作基址寄存器基址寄存器,A作作变址寄存器变址寄存器两者相加形成两者相加形成操作数地址操作数地址。寻址空间:寻址空间:程序存储器(程序存储器(A+DPTR、A+PC)MOVC A,A+D
10、PTR例:例:操作码操作码PCPCDPTRDPTR2400HA 0FH93HROMROM 240FH240FH设(设(A)=0FH(DPTR)=2400H ALU“读读”PSEN“读读”MOVC A,A+DPTR6 6、相对寻址、相对寻址程序存储器程序存储器寻址空间:寻址空间:相对寻址相对寻址以以当前当前PC值值为基准地址,加上指令的为基准地址,加上指令的偏移量偏移量“rel”,结果为目标地址。,结果为目标地址。rel为为有符号补码数,范围:有符号补码数,范围:-128+127JNZ rel例:例:;累加器累加器A不等零则转移不等零则转移 设设:rel=23H2025H2002H2001H20
11、00H ROM70H70H23H23H下一条指令下一条指令.操作码操作码PCPCPC(PC)=2002Hrel=23H修正后转移修正后转移目标地址目标地址D(PC)=2025HPCALU偏移量偏移量(PC)=2 0 0 2 HRel =2 3 H)005202HD=2025H2112H2111H2110H ROMDFHDFHF2HF2H下一条指令下一条指令.操作码操作码PCPCPC(PC)=2112Hrel=F2H修正后转移修正后转移目标地址目标地址 D(PC)=2104HALU偏移量偏移量例:例:DJNZ R7,rel ;(;(R7)1不为不为“0”则转则转PC2104H指指 令令(PC)=
12、2 1 1 2 HRel =F 2 H)FF4012HD =7 7、位寻址、位寻址寻址空间:寻址空间:片内片内RAM的的20H2FH字节地址字节地址位地址:位地址:00H7FH 共共128位位SFR中中11个能被个能被8整除的字节地址整除的字节地址位地址请参看位地址请参看P26表表 共共83位位对内部对内部RAM、SFR的的位地址空间位地址空间进行访问,称进行访问,称为位寻址。位地址用于布尔指令。为位寻址。位地址用于布尔指令。共共211位位例:例:SETB D5H;将;将F0位置位置1CLR C;Cy位清位清0寻址方式与相应的寻址空间寻址方式与相应的寻址空间小结:小结:寄存器寄存器R0R7,A
13、,BCY,DPTR片内片内内内RAM的低的低128字节字节特殊功能寄存器特殊功能寄存器SFR直接寻址直接寻址direct寄存器间址寄存器间址R0,R1,SP R0,R1,DPTR片内片内RAM、片外片外RAM与与I/O口口立即数立即数#data 程序存储器程序存储器程序存储器程序存储器基址加变址基址加变址A+DPTR,A+PC程序存储器程序存储器相对寻址相对寻址PC+rel位寻址位寻址片内片内RAM 20H2FH部分部分SFRbit利用的变量利用的变量 使用的空间使用的空间方方 式式已知已知R0=23H,(23H)=78H,写出下列指令分别执,写出下列指令分别执行后寄存器或存储器的结果。行后寄
14、存器或存储器的结果。MOV A,#60HMOV A,23HMOV 23H,#0F0HMOV A,R0MOV A,R0MOV R0,#45H3.2 指令系统简介指令系统简介 MCS-51系统指令系统共系统指令系统共111条,按操作功能分类:条,按操作功能分类:数据传送类数据传送类(29条)条)算术运算类算术运算类(24条)条)逻辑运算类逻辑运算类(24条)条)控制转移类控制转移类(17条)条)布尔处理类布尔处理类(17条)条)了解指令的了解指令的操作操作了解指令的了解指令的寻址方式寻址方式了解指令对了解指令对PSW的影响的影响合理使用指令合理使用指令一、数据传送类(一、数据传送类(29条)条)用
15、到的指令助记符有用到的指令助记符有5种:种:片内传送片内传送 MOV片外传送片外传送 MOVX查表传送查表传送 MOVC累加器交换累加器交换 XCH、XCHD、SWAP堆栈操作堆栈操作 PUSH、POP源操作数寻址方式(源操作数寻址方式(5种):种):立即寻址立即寻址、直接寻址、寄存器寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器间接寻址、变址寻址变址寻址。目的操作数寻址方式(目的操作数寻址方式(3种):种):直接寻址、寄存器寻址、寄存器间接直接寻址、寄存器寻址、寄存器间接寻址寻址 除了目的操作数为除了目的操作数为ACC的指令影响奇偶的指令影响奇偶标志标志P外,一般不影响标志位。外,一般不
16、影响标志位。1、MOV类传送指令类传送指令格式:格式:MOV 目的字节目的字节,源字节源字节功能:把源字节内容送目的字节,源字节内容不变功能:把源字节内容送目的字节,源字节内容不变MOV A,#data;立即数;立即数#data送累加器送累加器AMOV Rn,direct(n=07);以;以direct为地址的单元的内容送寄存器为地址的单元的内容送寄存器RnMOV direct,Rn(n=07);寄存器;寄存器Rn内容送以内容送以direct为地址的单元为地址的单元MOV Ri,A(i=0、1);累加器内容送以;累加器内容送以Ri内容为地址的单元内容为地址的单元MOV类传送指令类传送指令MOV
17、 A,#data立即数送累加器立即数送累加器MOV A,Rn寄存器内容送累加器寄存器内容送累加器MOV A,direct直接地址内容送累加器直接地址内容送累加器MOV A,Ri内内RAM内容送累加器内容送累加器MOV Rn,#data立即数送寄存器立即数送寄存器MOV Rn,A 累加器内容送寄存器累加器内容送寄存器RnMOV Rn,direct直接地址内容送寄存器直接地址内容送寄存器Rn指令助记符指令助记符说说 明明字字 节节 2 21 12 21 12 21 12 2MOV 片内传送指令片内传送指令 MOV类传送指令小结类传送指令小结MOV direct1,direct2内内RAM或或SFR
18、之间直接传送之间直接传送MOV direct,Ri内内RAM数据送内数据送内RAM或或SFRMOV direct,#data立即数送内立即数送内RAM或或SFRMOV direct,A累加器内容送内累加器内容送内RAM或或SFRMOV direct,Rn寄存器内容送内寄存器内容送内RAM或或SFR指令助记符指令助记符说说 明明字字 节节3 32 22 23 32 2MOV Ri,#data立即数送内立即数送内RAMMOV Ri,A累加器内容送内累加器内容送内RAMMOV Ri,direct内内RAM数据送内数据送内RAM或或SFRMOV DPTR,#data1616位立即数传送指令位立即数传送
19、指令2 21 12 23 3MOV 片内传送指令片内传送指令使用使用MOV指令的两点说明:指令的两点说明:源字节与目的字节不同(源字节与目的字节不同(direct除外)除外)寄存器寻址与寄存器间接寻址间不相互寄存器寻址与寄存器间接寻址间不相互传送传送2、MOVX类传送指令类传送指令累加器累加器A与外部与外部RAM传送数据用传送数据用 MOVX 外部外部RAM送累加器送累加器AMOVX A,Ri (i=0、1);以;以Ri内容为内容为外部外部RAM地址的单元中的数送地址的单元中的数送A 累加器内容送外累加器内容送外RAMMOVX Ri,A(i=0、1);累加器内容送以;累加器内容送以Ri内容为地
20、址的内容为地址的外部外部RAM单元单元RDWR 外部外部RAM送累加器送累加器AMOVX A,DPTR;以;以DPTR内容为地址的内容为地址的外部外部RAM单元中的数送单元中的数送A 累加器内容送外累加器内容送外RAMMOVX DPTR,A;累加器内容送以;累加器内容送以DPTR内容为地址的内容为地址的外部外部RAM单元单元RDWR MOVX类传送指令小结类传送指令小结 指令助记符指令助记符说说 明明字字 节节 1 11 11 11 1MOVX A,Ri外部外部RAM送累加器送累加器AMOVX Ri,A累加器内容送外累加器内容送外RAMMOVX A,DPTR外部外部RAM送累加器送累加器AMO
21、VX DPTR,A累加器内容送外累加器内容送外RAM说明:说明:1.在在51中,与中,与外外部存储器部存储器RAM打交道的只可以是打交道的只可以是A累累加器。所有需要送入外部加器。所有需要送入外部RAM的数据必需要通过的数据必需要通过A送去,送去,而所有要读入的外部而所有要读入的外部RAM中的数据也必需通过中的数据也必需通过A读入。读入。在此我们可以看出内外部在此我们可以看出内外部RAM的区别:内部的区别:内部RAM间间可以直接进行数据的传递,而外部则不行。可以直接进行数据的传递,而外部则不行。2.要读或写外部的要读或写外部的RAM,必须要知道,必须要知道RAM的地的地址,在后两条指令中,地址
22、是被直接放在址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于中的。而前两条指令,由于Ri(即(即R0或或R1)只)只是是8位的寄存器,所以只提供低位的寄存器,所以只提供低8位地址。高位地址。高8位位地址由地址由P2口口来提供。来提供。3.使用时应先将要读或写的地址送入使用时应先将要读或写的地址送入DPTR或或Ri中,然后再用读写命令。中,然后再用读写命令。例:将例:将片外片外RAM 120H单元的内容传送到单元的内容传送到片外片外RAM 地址为地址为78H的单元。的单元。MOV DPTR,#0120HMOVX A,DPTRMOV R0,#78HMOVX R0,A 例:将例:
23、将片内片内RAM 12H单元的内容传送到单元的内容传送到片内片内RAM 地址为地址为78H的单元。的单元。MOV 78H,12H;外部;外部RAM送累加器送累加器A;累加器内容送外;累加器内容送外RAMMOV P2,#00H3、MOVC类传送指令类传送指令MOVC类传送指令,均为基址加变址寄存器寻址:类传送指令,均为基址加变址寄存器寻址:MOVC A,A+DPTR;以;以DPTR作基址寄存器,作基址寄存器,A作变址寄存器,两者作变址寄存器,两者;相加形成;相加形成16位位ROM地址,将该单元内容读入地址,将该单元内容读入A 以以DPTR作基址加变址寻址作基址加变址寻址长查表指令长查表指令16位
24、位PSENMOVC A,A+PC 以以PC作基址加变址寻址作基址加变址寻址;取指后;取指后PC增增“1”,以当前,以当前PC作基址,作基址,A作变址,两者作变址,两者;相加形成;相加形成16位位ROM地址,将该单元内容读入地址,将该单元内容读入A短查表指令短查表指令 MOVC类传送指令小结类传送指令小结指令助记符指令助记符说说 明明字字 节节 1 11 1MOVC A,A+DPTRMOVC A,A+PC以以DPTR作基址加变址寻址作基址加变址寻址以以PC作基址加变址寻址作基址加变址寻址MOV DPTR,#2000HMOVC A,A+DPTR2004H2003H2002H2001H2000H20
25、08H2009H2005H2006H2007H存储器存储器00H00H01H01H04H04H09H09H10H10H19H19H24H24H31H31H40H40H51H51H例:在外部例:在外部ROM中存放中存放09的平方值。根据累加器的平方值。根据累加器 A中的数(中的数(09),查找对应的平方值。),查找对应的平方值。用用DPTR作基址寄存器作基址寄存器指向表格的首地址指向表格的首地址用用A作变址寄存器作变址寄存器实际上实际上A中的值是表格中的中的值是表格中的第几项第几项表格首址表格首址操作码操作码PCPCDPTRDPTR2000HA A 03H 09H MOVC A,A+DPTR 9
26、3H 93HROMROM00H00H2000H2000H01H01H04H04H09H09H2001H2001H2002H2002H2003H2003H;设(;设(A)=03H,查,查“3”的平方的平方ALUPSEN用用PC作基址寄存器,它并不指向表格首址作基址寄存器,它并不指向表格首址;是;是PC当前值与所查表格首址之间的距离当前值与所查表格首址之间的距离;即(;即(PC)+#data TABBEL表格首址表格首址设(设(A)=03H,是表格中的第,是表格中的第3项项;单字节指令,设指令在;单字节指令,设指令在ROM中的地址为中的地址为1FF0HADD A,#dataMOVC A,A+PC2
27、000H2000H1FF1H1FF1H-000FH000FH;#data是变址调整值是变址调整值#dataPC当前值当前值表格首址表格首址TABBEL:DB 00HDB 01HDB 04HDB 09H2000H2000H12HA PCPC2003H2003HTABBEL4、XCH、XCHD、SWAP类传送指令类传送指令指令助记符指令助记符说说 明明字节字节1 12 21 11 11 1XCH A,RnXCH A,direct寄存器内容与累加器内容交换寄存器内容与累加器内容交换直接地址内容与累加器内容交换直接地址内容与累加器内容交换XCH A,RiXCHD A,Ri内内RAM内容与累加器内容交换
28、内容与累加器内容交换内内RAM内容低内容低4位与累加器低位与累加器低4位交换位交换SWAP A累加器累加器A高高4位与低位与低4位交换位交换5 5、堆栈操作指令堆栈操作指令 进栈指令进栈指令PUSH direct;SP自动增自动增“1”,(,(SP)(SP)+1;direct地址单元的内容压入地址单元的内容压入SP指向的单元指向的单元 出栈指令出栈指令POP direct;SP自动减自动减“1”,(,(SP)(SP)-1;SP指向的单元内容弹出到以指向的单元内容弹出到以direct为地址的单元为地址的单元判断下列指令的对错。判断下列指令的对错。MOV R1,R2MOV A,R3MOVX R1,
29、BMOVC A+DPTR,AXCH 30H,40H设在设在ROM 中地址为中地址为50H开始的区域建有开始的区域建有0-5的共阴段码表的共阴段码表 ORG 0050HSEG:DB 3FH,06H,5BH,4FH,66H,6DH 利用查表指令找到利用查表指令找到4的段码并输出到的段码并输出到P2口。口。二、算术运算类(二、算术运算类(24条)条)用到的指令助记符有用到的指令助记符有8 8种:种:加法指令加法指令 ADD、ADDC、INC、DA减法指令减法指令 SUBB,DEC乘除指令乘除指令 MUL,DIV算术运算类指令执行结果影响标志位:算术运算类指令执行结果影响标志位:CY、AC、OV1、不
30、带进位加、不带进位加ADDADD A,#data;A (A)+#data指令助记符指令助记符说说 明明字字 节节 2 21 11 12 2ADD A,#dataADD A,Rn立即数加到累加器立即数加到累加器寄存器内容加到累加器寄存器内容加到累加器ADD A,RiADD A,direct内内RAM内容加到累加器内容加到累加器直接地址内容加到累加器直接地址内容加到累加器2、带进位加、带进位加ADDCADDC A,#data;A (A)+#data+CY指令符助记指令符助记说说 明明字字 节节 2 21 11 12 2ADDC A,#dataADDC A,Rn立即数和进位加到累加器立即数和进位加到
31、累加器寄存器内容和进位加到累加器寄存器内容和进位加到累加器ADDC A,RiADDC A,direct内内RAM内容和进位加到累加器内容和进位加到累加器直接地址内容和进位加到累加器直接地址内容和进位加到累加器 试分析执行下面的指令后,程序状态字试分析执行下面的指令后,程序状态字PSW中中 CY,OV的内容是什么?的内容是什么?MOV A,#53HADD A,R0 MOV R0,#76 HD7D6D5D4 D3D2D1D0 0 1 0 1 0 0 1 1 (53H)0 1 1 1 0 1 1 0 (76H)10010011(C9H)CY=0OV=C6 C7=1+此时此时C6=1、C7=0 则则+
32、双字节的加法运算双字节的加法运算例:例:先做先做67H+A0H=107H67H+A0H=107H,而,而107H107H显然超过了显然超过了0FF0FFH H,因此最终保存在,因此最终保存在A A中的是中的是07H07H,而,而1 1则到了则到了PSWPSW中的中的CYCY位了。位了。然后再做然后再做10H+30H+10H+30H+CYCY,结果是,结果是41H41H,所,所以最终的结果是以最终的结果是4107H4107H。1067H+30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H30A0H4107H
33、设:设:1067H1067H存在存在R1R0R1R0中,中,30A0H30A0H存在存在R3R2R3R2中中,计算计算R1R0+R3R2R1R0+R3R2,结果存在结果存在R5R4R5R4中。中。MOV A,R0ADD A,R2 ;R0+R2A和和CYMOV R4,AMOV A,R1ADDC A,R3 ;R1+R3+CYA和和CYMOV R5,A3、增量、增量INCINC A;A (A)+1INC 指令中除指令中除 INC A 指令影响指令影响 P 标志位,标志位,其余指令不影响任何标志位其余指令不影响任何标志位指令助记符指令助记符说说 明明字节字节 1121INC AINC Rn累加器内容加
34、累加器内容加“1 1”寄存器内容加寄存器内容加“1 1INC direct内内RAM或或SFR内容加内容加“1INC Ri内内RAM内容加内容加“1INC DPTR数据指针数据指针DPTR内容加内容加“114 4、十进制调整指令、十进制调整指令DA A;对累加器对累加器A,作,作BCD码加法后进行码加法后进行“过过9补补6”调整调整若若(A30)9 AC=1 则(则(A30)(A30)+06H若若(A74)9 CY=1则(则(A74)(A74)+60H注意:注意:DA 指令不能对指令不能对BCD码减法的结果进行调整码减法的结果进行调整BCDH BCDLA例例 设(设(A)=37H;(;(R3)
35、=36H,执行下面的程序:,执行下面的程序:0 0 1 1 0 1 1 1 (37H)0 0 1 1 0 1 1 0 (36H)(6DH)0 1 1 0 1 1 0 1 过过“9”0 0 0 0 0 1 1 0 0 1 1 1 0 0 1 1 补补“6”(73H);(;(A)=6DH;(;(A)=73H1 1 0 1ADD A,R3DA ADA A 只能跟在加法指令之后只能跟在加法指令之后5、减法指令、减法指令SUBBSUBB A,#data;A (A)-#data-CY指令助记符指令助记符说说 明明字字 节节 2 21 11 12 2SUBB A,#dataSUBB A,RnSUBB A,R
36、iSUBB A,direct累加器减立即数和借位累加器减立即数和借位累加器减寄存器内容和借位累加器减寄存器内容和借位累加器减累加器减RAM内容和借位内容和借位累加器减直接地址内容和借位累加器减直接地址内容和借位说明说明:没有不带借位的减法指令没有不带借位的减法指令,如果需要做,如果需要做不不带借位的减法指令(在做第一次相减时),只要带借位的减法指令(在做第一次相减时),只要将将CYCY清零清零(CLR C)即可。即可。对带符号数,要注意对带符号数,要注意OVOV标志。标志。OV=1OV=1,出错出错。6、减量、减量 DEC指令助记符指令助记符说说 明明字字 节节 1 11 12 21 1DEC
37、 ADEC Rn累加器内容减累加器内容减“1 1”寄存器内容减寄存器内容减“1”1”DEC direct内内RAM或或SFR内容减内容减“1”DEC Ri内内RAM内容减内容减“1”7、MULMUL A B;执行执行 (A)(B)(B A)的操作的操作例:例:A=4EH,B=5DH,执行指令执行指令MUL AB后,乘积是后,乘积是1C56H,所以在所以在B中放的是中放的是1CH,而,而A中放的则是中放的则是56H。DIV A B8、DIV;执行执行(A)/(B)后,商后,商 A 余余 B CY=0如如:A=11H,B=04H,执行指令,执行指令DIV AB后,后,结果结果:A=04H,B=1。
38、试编写试编写1234H-0FA3H的程序段,将结果高的程序段,将结果高8 8位存位存入入51H51H,低低8 8位存入位存入50H50H单元。单元。MOV A,#34HSUBB A,#0A3HMOV 50H,AMOV A,#12HSUBB A,#0FHMOV 51H,ACLR C三、逻辑运算类(三、逻辑运算类(24条)条)用到的指令助记符有用到的指令助记符有9种:种:包括与、或、异或、清除、求反、移位等操作包括与、或、异或、清除、求反、移位等操作ANL、ORL、XRL、CLR、CPL、RL、RLC、RR、RRC1、逻辑与、逻辑与ANL(6条)条)ANL A,#data立即数逻辑与累加器立即数逻
39、辑与累加器ANL A,Rn寄存器内容逻辑与累加器寄存器内容逻辑与累加器ANL A,direct直接地址内容逻辑与累加器直接地址内容逻辑与累加器ANL A,Ri内内RAM内容逻辑与累加器内容逻辑与累加器指令助记符指令助记符说说 明明字字 节节 2 21 12 21 1ANL direct,AANL direct,#data累加器逻辑与内累加器逻辑与内RAM或或SFR立即数逻辑与立即数逻辑与RAM或或SFR2 23 32、逻辑或、逻辑或 ORL(6条)条)ORL A,#data立即数逻辑或累加器立即数逻辑或累加器ORL A,Rn寄存器内容逻辑或累加器寄存器内容逻辑或累加器ORL A,direct直
40、接地址内容逻辑或累加器直接地址内容逻辑或累加器ORL A,Ri内内RAM内容逻辑或累加器内容逻辑或累加器指令符号指令符号说说 明明字字 节节 2 21 12 21 1ORL direct,AORL direct,#data累加器逻辑或内累加器逻辑或内RAM或或SFR立即数逻辑或立即数逻辑或RAM或或SFR2 23 33、逻辑异或、逻辑异或XRL(6条)条)XRL A,#data立即数逻辑立即数逻辑异或异或累加器累加器XRL A,Rn寄存器内容逻辑寄存器内容逻辑异或异或累加器累加器XRL A,direct直接地址内容逻辑直接地址内容逻辑异或异或累加器累加器XRL A,Ri内内RAM内容逻辑内容逻
41、辑异或异或累加器累加器指令助记符指令助记符说说 明明字字 节节 2 21 12 21 1XRL direct,AXRL direct,#data累加器逻辑累加器逻辑异或异或内内RAM或或SFR立即数逻辑立即数逻辑异或异或RAM或或SFR2 23 3例:根据累加器中例:根据累加器中40的状态修改的状态修改P1端口位端口位40的状态的状态ANL A,#00011111BANL P1,#11100000BORL P1,A;A屏蔽前屏蔽前3位,保留后位,保留后5位位;A的后的后5位是位是“1”,使使P1口口 相应位置相应位置“1”,P1前前3位不位不变变;P1屏蔽后屏蔽后5位,保留前位,保留前3位位仅
42、修改了仅修改了 P1 口的后口的后 5 位位请写出完成下列功能的指令:请写出完成下列功能的指令:1、P1口高四位输出高电平,低四位保持不变;口高四位输出高电平,低四位保持不变;2、P1口低口低3位清零,其余位保持不变;位清零,其余位保持不变;3、P1口高四位取反,低四位保持。口高四位取反,低四位保持。4、累加器清除与求反指令(、累加器清除与求反指令(2条)条)累加器累加器A清零清零CLR A;A 00H 累加器累加器A按位取反按位取反CPL A;A (A)例:例:给出下面程序分析执行结果给出下面程序分析执行结果CLR ACPL A;(;(A)=00H;(;(A)=FFH5、移位指令(、移位指令
43、(4条)条)累加器内容循环左移一位累加器内容循环左移一位RL AA7A0 累加器内容连同进位标志循环左移一位累加器内容连同进位标志循环左移一位A7A0RLC ACY 累加器内容循环右移一位累加器内容循环右移一位RR AA7A0 累加器内容连同进位标志循环右移一位累加器内容连同进位标志循环右移一位 A7A0RRC ACY 移位指令小结移位指令小结指令助记符指令助记符说说 明明字字 节节 1 11 11 11 1RL ARLC ARR ARRC A累加器循环左移累加器循环左移累加器连同进位循环左移累加器连同进位循环左移累加器循环右移累加器循环右移累加器连同进位循环右移累加器连同进位循环右移11CL
44、R ACPL A累加器累加器A清零清零累加器累加器A按位取反按位取反 累加器清除与求反指令小结累加器清除与求反指令小结例:设(例:设(A)=5AH、CY=1RL ARLC ARR ARRC A;(;(A)=B4H;(;(A)=2DH;(;(A)=B5H;(;(A)=ADH 01011010 01011010010110100101101001011010010110101 1CYCY01011010010110101 1CYCY0 01 10 01 10 00 0四、控制转移指令(四、控制转移指令(17条)条)控制转移指令共有控制转移指令共有17条:条:无条件转移指令无条件转移指令条件转移指令
45、条件转移指令子程序的调用返回等子程序的调用返回等1 1、无条件转移指令、无条件转移指令(4(4条条)长转移长转移LJMP addr16;PC addr16 短转移短转移AJMP addr11;PC100 A100 ;PC (PC)+2转移范围转移范围 2KB转移范围转移范围 64KB 相对转移相对转移SJMP rel ;PC (PC)+rel 指令中的指令中的rel是是8位带符号补码,范围位带符号补码,范围-128+127。;PC (PC)+2例:分析指令例:分析指令 SJMP$符号符号“$”指本指令执行前的指本指令执行前的PC值,指令值,指令SJMP$执行后,程序仍然转移回此指令继续执行,计
46、执行后,程序仍然转移回此指令继续执行,计算机于是不断的执行这一指令,进入等待状态。算机于是不断的执行这一指令,进入等待状态。原地踏步原地踏步指令助记符指令助记符说说 明明字字 节节 3 32 22 21 1长转移长转移LJMP addr16绝对转移绝对转移AJMP addr11短转移短转移SJMP rel间接长转移间接长转移JMP A+DPTR原则上,所有用原则上,所有用SJMP或或AJMP的地的地方都可以用方都可以用LJMP来替代。来替代。则顺序执行则顺序执行2 2、条件转移指令(、条件转移指令(8 8条)条)累加器为零则转移累加器为零则转移JZ rel;若(若(A)=0,PC (PC)+2
47、+rel ;若(若(A)0,则,则PC (PC)+2JNZ rel;若(若(A)0,PC (PC)+2+rel ;若(若(A)=0,则,则PC (PC)+2 累加器不为零则转移累加器不为零则转移则转移则转移则顺序执行则顺序执行则转移则转移例:分析下面程序例:分析下面程序MOV A,R0 JZ L1 MOV R1,#00H AJMP L2L1:MOV R1,#0FFHL2:SJMP L2 END在执行上面这段程序前:在执行上面这段程序前:如果如果R0=0,结果,结果R1=0FFH。而如果而如果R0 0,则结果是,则结果是R1=00H。累加器与立即数不等则转移累加器与立即数不等则转移CJNE A,
48、#data,rel ;若(若(A)=#data,则则PC (PC)+3,CY 0 ;若(若(A)#data,PC (PC)+3+rel,CY 0;若(若(A)#data,PC (PC)+3+rel,CY 0;若(若(Rn)(direct),PC (PC)+3+rel,CY 0;若(若(A)#data,PC (PC)+3+rel,CY 0;若若(Ri)#data,PC (PC)+3+rel,CY 1顺序顺序转移转移转移转移顺序顺序例:分析下面程序例:分析下面程序MOV A,30HCJNE A,40H,NOEQUSETB 7FH ;相等置位相等置位7FHSJMP FINISHNOEQU:JC SM
49、ALL MOV 50H,AMOV 51H,40HSJMP FINISHSMALL:MOV 50H,40HMOV 51H,AFINISH:SJMP$寄存器减寄存器减“1 1”不等零则转移不等零则转移DJNZ Rn,rel (n=07)DJNZ direct,rel 内内RAM或或SFR减减“1”不为零则转移不为零则转移;若(若(Rn)0,PC (PC)+2+rel;若(若(Rn)=0,则则PC (PC)+2;Rn (Rn)-1;若(若(direct)0,PC (PC)+2+rel;若(若(direct)=0,则,则PC (PC)+2;direct (direct)-1顺序顺序转移转移转移转移顺序
50、顺序分析下面程序执行的结果分析下面程序执行的结果 MOV 23H,#0AH CLR ALOOP:ADD A,23H DJNZ 23H,LOOP SJMP$上述程序段的执行过程是:上述程序段的执行过程是:将将23H单元中的数连续相加,存至单元中的数连续相加,存至A中,中,每加一次,每加一次,23H单元中的数值减单元中的数值减1,直至,直至减到减到0,共加,共加(23H)次。次。条件转移类指令小结条件转移类指令小结指令助记符指令助记符说说 明明字节字节 2 22 23 33 32 23 3JZ relJNZ relCJNE A,#data,relCJNE Rn,#data,rel DJNZ Rn,
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。