单片机 指令系统与程序设计_第1页
单片机 指令系统与程序设计_第2页
单片机 指令系统与程序设计_第3页
单片机 指令系统与程序设计_第4页
单片机 指令系统与程序设计_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

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

文档简介

1、本章重点:本章重点:指令的寻址方式、功能、使用方法指令的寻址方式、功能、使用方法 程序设计的一般方法和技巧程序设计的一般方法和技巧讲授内容:MCS-51MCS-51单片机的寻址方式单片机的寻址方式 MCS-51MCS-51单片机指令分类单片机指令分类程序设计方法和算法分析程序设计方法和算法分析 应用程序设计举例应用程序设计举例第三章第三章 MCS-51 MCS-51单片机的指令系统与程序设计单片机的指令系统与程序设计高级语言高级语言:复习复习:一、汇编语言程序设计的意义一、汇编语言程序设计的意义什么是程序?什么是程序?为完成某项特定任务的一组指令的集合。为完成某项特定任务的一组指令的集合。计算

2、机按程序一条一条地依次执行指令,从而完成指定任务。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,用户要设计各种程序。要让计算机完成各项任务,用户要设计各种程序。汇编语言汇编语言: 机器语言:用二进制代码表示指令和数据,机器语言:用二进制代码表示指令和数据,CPU可直接识别。可直接识别。二、程序设计语言:二、程序设计语言:用助记符表示指令操作功能,用标号表示操作对象,与机用助记符表示指令操作功能,用标号表示操作对象,与机器语言一一对应。器语言一一对应。独立于机器独立于机器,面向过程面向过程,接近自然语言和数学表达式接近自然语言和数学表达式.第三章 3 - 2第一节

3、第一节 MCS51MCS51单片机的寻址方式单片机的寻址方式 MCS-51单片机的指令系统共有单片机的指令系统共有111条指令,条指令,7种寻址种寻址方式方式, ,共分为五大类:共分为五大类:数据传送类指令,算术运算类指令,数据传送类指令,算术运算类指令,逻辑运算类指令,控制转移类指令,位操作类指令逻辑运算类指令,控制转移类指令,位操作类指令n指令格式指令格式n1 1、指令所包含的内容、指令所包含的内容n 操作码:规定指令的操作功能操作码:规定指令的操作功能n 操作数:指令操作的具体对象(地址、数据)操作数:指令操作的具体对象(地址、数据)n2 2、指令格式、指令格式n 单字节指令:单字节指令

4、:n 双字节指令:双字节指令:n 三字节指令三字节指令MCS-51指令格式:指令格式:标号:标号: 操作码助记符操作码助记符 第一操作数第一操作数 ,第二操作数,第二操作数 ;注释;注释第三章 3 - 3在在MCS-51系列单片机的指令中,常用的符号系列单片机的指令中,常用的符号#data8#data8、#data16#data16:分别表示:分别表示8 8位、位、1616位立即数。位立即数。 directdirect:片内:片内RAMRAM单元地址(单元地址(8 8位),也可以指特殊功能寄存器的地址或位),也可以指特殊功能寄存器的地址或符号名称。符号名称。addr11addr11、addr1

5、6addr16:分别表示:分别表示1111位、位、1616位地址码。位地址码。relrel:相对转移指令中的偏移量,为:相对转移指令中的偏移量,为8 8位带符号数(补码形式)。位带符号数(补码形式)。bitbit:片内:片内RAMRAM中(可位寻址)的位地址。中(可位寻址)的位地址。A A:累加器:累加器A A;ACCACC则表示累加器则表示累加器A A的地址。的地址。RnRn:当前寄存器组的:当前寄存器组的8 8个工作寄存器个工作寄存器R0R7R0R7。RiRi:可用作间接寻址的工作寄存器,只能是:可用作间接寻址的工作寄存器,只能是R0R0、R1R1。:间接寻址的前缀标志。:间接寻址的前缀标

6、志。 当前指令存放的地址当前指令存放的地址(x) x中的内容中的内容第一节第一节 MCS51MCS51单片机的寻址方式单片机的寻址方式第三章 3 - 4一、立即寻址一、立即寻址立即寻址是指在指令中直接给出其操作数,该操作数称为立即数。为了立即寻址是指在指令中直接给出其操作数,该操作数称为立即数。为了与直接寻址指令中的直接地址相区别,在立即数前面必需加上前缀与直接寻址指令中的直接地址相区别,在立即数前面必需加上前缀“# #”。例如:例如:MOVA,#30H二、直接寻址二、直接寻址直接寻址是指在指令中直接给出存放数据的地址(注意:不是立即数直接寻址是指在指令中直接给出存放数据的地址(注意:不是立即

7、数,并且只限于并且只限于片内片内RAM范围范围)。直接寻址只能访问特殊功能寄存器、内)。直接寻址只能访问特殊功能寄存器、内部数据存储器和位地址空间。部数据存储器和位地址空间。例如:例如:MOV A,30H 比较以上两指令的区别比较以上两指令的区别第一节第一节 MCS51MCS51单片机的寻址方式单片机的寻址方式A30HA30H 5555H第三章 3 - 5 三、寄存器寻址三、寄存器寻址寄存器寻址是指指令中的操作数为寄存器中的内容。寄存器寻址是指指令中的操作数为寄存器中的内容。例如:例如:MOV MOV A A,R1R1四、寄存器间接寻址四、寄存器间接寻址寄存器间接寻址是指指令中的操作数在寄存器

8、的内容所指的地址单元中。寄存器间接寻址是指指令中的操作数在寄存器的内容所指的地址单元中。例如:例如:MOVR1,#30H;把立即数;把立即数30H送送R1寄存器寄存器MOVA,R1;把;把30H单元中的数送到单元中的数送到A中中比较以上两指令的区别比较以上两指令的区别AR1A30H 11(R1)11H第三章 3 - 6五、变址寻址五、变址寻址变址寻址用于访问程序存储器中的一个字节,该字节的地址是:基址寄存变址寻址用于访问程序存储器中的一个字节,该字节的地址是:基址寄存器(器(DPTR或或PC)的内容与变址寄存器)的内容与变址寄存器A中的内容之和。中的内容之和。例如:例如: MOV DPTR,#

9、3000H ;立即数;立即数3000H送送DPTR MOV A,#02H ;立即数;立即数02H送送A MOVC A,A+DPTR ;取;取ROM中中3002H单元中的数送单元中的数送A A(前)(前)3002H 55DPTR+A(后)(后)第三章 3 - 7六、相对寻址六、相对寻址 以当前值为基准,加上相对偏移量以当前值为基准,加上相对偏移量relrel形成转移地址形成转移地址转移范围:转移范围:以当前值起始地址,相对偏移在字以当前值起始地址,相对偏移在字节单元之间。节单元之间。相对寻址方式为相对转移指令所采用,转移的目的地址相对寻址方式为相对转移指令所采用,转移的目的地址为:为:目的地址目

10、的地址=转移指令所在地址转移指令所在地址+转移指令字节数转移指令字节数+rel计算方法计算方法PC目标目标=PC当前当前+rel=(PC指指+指令字节数指令字节数)+relrel=PC目标目标-(PC指指+指令字节数指令字节数) 例:例: 2000H 80 54 SIMP 54H 2000H 80 54 SIMP 54H 2000H 80542056HPC=2002HREL=54H+第三章 3 - 8七、位寻址七、位寻址位寻址是指对片内位寻址是指对片内RAMRAM的位寻址区(的位寻址区(20H2FH20H2FH)、可以位寻址的专用寄)、可以位寻址的专用寄存器的各位,并进行位操作的寻址方式。存器

11、的各位,并进行位操作的寻址方式。例如:例如:MOVMOVC C,00H00H;把;把20H20H单元中单元中D0D0位的值送位的值送C C位位 MOVMOVP1.0P1.0,C C;把;把C C位中的值送位中的值送P1P1口的口的D0D0位位 SETBSETB20H. 020H. 0;把;把00H00H位置位置1 1位地址的表示方法位地址的表示方法位名称位名称 例:例:CY、RS0寄存器名加序号寄存器名加序号 例:例:ACC.1、P0.1字节地址加序号字节地址加序号 例:例:20H.3直接位地址直接位地址 例:例:00H、 07H第三章 3 - 9操作数的操作数的7 7种寻址方式和寻址的空间种

12、寻址方式和寻址的空间寻址方式寻址方式相关寄存器相关寄存器寻址的空间寻址的空间立即寻址立即寻址程序存储器程序存储器ROM 直接寻址直接寻址片内片内RAM和和SFR寄存器寻址寄存器寻址R0R7,A,B,DPTRR0R7,A,B,DPTR寄存器间接寄存器间接寻址寻址R0,R1片内片内RAMR0,R1,DPTR片外片外RAM变址寻址变址寻址A+PC,A+DPTRROM区区相对寻址相对寻址PCROM区区位寻址位寻址可位寻址的可位寻址的SFR片内片内RAM20H2FHSFR中中可寻址位可寻址位第三章 3 - 10MCSMCS5151汇编语言指令格式如下:汇编语言指令格式如下:标号:操作码标号:操作码 操作

13、数操作数1 1,操作数,操作数2 2,操作数,操作数3 3 ;注释;注释 其中标号实际上为符号地址,表示这条指令在程序存其中标号实际上为符号地址,表示这条指令在程序存储器中的存放首地址,以字母开始,后可跟储器中的存放首地址,以字母开始,后可跟1818个字母或个字母或数字,但标号不能用操作码或专用符号。数字,但标号不能用操作码或专用符号。操作码规定了指令的具体操作。操作码规定了指令的具体操作。指令中的操作数为指令的具体操作对象指令中的操作数为指令的具体操作对象有些指令中有有些指令中有3 3个操作数,有些只有一个,有些无操作数,个操作数,有些只有一个,有些无操作数,仅有操作码。仅有操作码。第二节第

14、二节 MCS51MCS51单片机的指令分类单片机的指令分类第三章 3 - 12一、数据传送与交换类指令一、数据传送与交换类指令特点:特点:除第一操作数为除第一操作数为A的指令影响的指令影响P位外,其它并不影响标志位位外,其它并不影响标志位有三种传送指令有三种传送指令:MOV片内片内RAM和特殊功能寄存器之间的传送和特殊功能寄存器之间的传送MOVX片外片外RAM与与ACC之间的传送之间的传送MOVC程序存储器的数据送程序存储器的数据送ACC 1用于片内用于片内RAM传送的指令(传送的指令(16条)条) 1 1)以累加器)以累加器CC CC 为目的操作数为目的操作数 ,n n ; , direct

15、direct; , Ri Ri (R1R1,R0R0) , #data#data第二节第二节 MCS51MCS51单片机的指令分类单片机的指令分类第三章 3 - 132 2)以)以 RnRn 为目的操作数为目的操作数 n, An, A n, directn, direct n, #datan, #data 3 3)以直接地址为目的操作数)以直接地址为目的操作数 directdirect, directdirect, RnRn directdirect, #data#data directdirect, Ri Ri (R1R1,R0R0) directdirect, direct direct

16、; 4 4)以)以 寄存器间址寄存器间址 为目的操作数为目的操作数 RiRi, directdirect; RiRi, A A; RiRi, #data#data5 5)1616位数据送数据指针位数据送数据指针 DPTRDPTR DPTRDPTR,#Ddata16#Ddata16例如例如:MOV 30H,#7AH ;将立即数;将立即数7AH送片内送片内RAM 30H单元中单元中 MOV R0,#30H ;将立即数;将立即数30H送送R0寄存器寄存器 MOV A,R0 ;将;将R0指定的指定的30H中的数中的数7AH送送A中中MOV DPTR,#1000H;将;将1000H送送DPTR寄存器寄存

17、器练习:将练习:将R1R1中的内容送中的内容送R2R2第三章 3 - 14第三章 1-142用于片外用于片外RAM传送的指令(共传送的指令(共4条)条)执行过程中会使执行过程中会使/WR、/RD有效。有效。 片外片外RAM单元的地址为单元的地址为16位,一般用位,一般用DPTR间接寻址;也可使用间接寻址;也可使用Ri来来间接寻址(低间接寻址(低8 8位编址时)。位编址时)。1)外部外部RAMRAM低低256256字节单元与之间的传送字节单元与之间的传送 , i i i i, 例例: : 0 0, , 0 0;将外部;将外部RAMRAM单元内容单元内容)外部外部RAMRAM单元与之间的传送单元与

18、之间的传送 ,DPTR DPTR DPTR, DPTR, 例例: : DPTR, #2000HDPTR, #2000H ,DPTRDPTR;将外部;将外部RAMRAM中中2000H2000H单元内容单元内容AA思考:将片内思考:将片内RAM 50HRAM 50H单元内容单元内容 片外片外RAM 5000HRAM 5000H单元单元3用于用于ROM传送的指令(共传送的指令(共2条)条)MOVC A,A+DPTR;(A)(A)+DPTR)(A)(A)+DPTR))MOVC A,A+PC ;(A)(A)+(PC)(A)(A)+(PC) 以以PC的当前值为基址,的当前值为基址,A为变址为变址 例例3-

19、1:在:在ROM 1000H开始存有开始存有5个字节数,编程将第二个字节数取出个字节数,编程将第二个字节数取出送片内送片内RAM 30H单元中。程序段如下:单元中。程序段如下:MOV DPTR,#1000H ;置;置ROM地址指针(基址)地址指针(基址)DPTRMOV A,#01H ;表内序号送;表内序号送A(变址)(变址) MOVC A,A+DPTR ;从;从ROM 1000H单元中取数送到单元中取数送到AMOV 30H,A ;再存入内;再存入内RAM 30H中中ORG1000H ;伪指令,定义数表起始地址;伪指令,定义数表起始地址TAB: DB 55H,67H,9AH,;在;在ROM 10

20、00H开始的空间中开始的空间中 定义定义5单字节单字节 第三章 3 - 16例例3-2:设某数:设某数N已存于已存于20H单元(单元(N10),查表求),查表求N平方值,存入平方值,存入21H单元。单元。 程序段如下:程序段如下: MOV A,20H;取数;取数N ADD A,#01;加查表偏移量;加查表偏移量 MOVC A,A+PC;查表;查表 NOP TAB:DB 00H,01H,04H,09 ;定义数表;定义数表 由于由于PC为程序计数器,总是指向下一条指令的地址在执行第三条指令为程序计数器,总是指向下一条指令的地址在执行第三条指令“MOVC A,A+PC”时,在查表前应在时,在查表前应

21、在A累加器中加上查表偏移量。累加器中加上查表偏移量。 用用DPTRDPTR查表时,表格可以放在查表时,表格可以放在ROM的的64K范围,用范围,用MOVCA,A+PC指令时则必须把表格就放在该条指令下面开始的指令时则必须把表格就放在该条指令下面开始的255个字节的空间中。个字节的空间中。第三章 3 - 184交换指令(共交换指令(共5条)条)1 1)字节交换)字节交换 XCH A, Rn ; (A)(Rn)XCH A, Rn ; (A)(Rn) XCH A, direct XCH A, directXCHA,Ri思考:用不同的方法实现片内思考:用不同的方法实现片内RAM(20H)R1R1 有有

22、3条为整个字节相互交换,条为整个字节相互交换,XCHD指令为低指令为低4位相互交位相互交换,换,SWAP为为ACC中的高、低中的高、低4位互换。位互换。A30H 1155H55H11Ha7a4a3a02)半字节交换)半字节交换 XCHD A, Ri ; SWAP A例如:已知(例如:已知(A)=34H,(,(R6=29H 执行以下指令后,(执行以下指令后,(A)=? XCH A,R6; SWAP A第三章 3 - 19堆栈是在内堆栈是在内RAM开辟的一个数据的暂存空间,遵守开辟的一个数据的暂存空间,遵守“后进先出后进先出”原则操原则操作,其地址指针为作,其地址指针为SP,它指出栈顶的位置,复位

23、时,它指出栈顶的位置,复位时SP=07H。入栈:入栈:PUSH direct ;SP先加先加1,再将数据压栈。,再将数据压栈。出栈;出栈;POP direct ;数据先出栈,再;数据先出栈,再SP减减1。5堆栈操作指令(共堆栈操作指令(共2条)条)A88H例如,已知(例如,已知(A)=44H,(,(30H)=55H,执行以下程序段,执行以下程序段MOV SP,#5FH ;栈起点设置为;栈起点设置为5FHPUSH ACC ;A中的中的44H压到压到60H中保存中保存PUSH 30H ;30H中的中的55H压到压到61H中保存中保存POP 30H ;把;把61H中的中的55H弹出到弹出到30HPO

24、P ACC ;把;把60H中的中的44H弹出到弹出到A中中 PUSH ACCSPXX88H第三章 3 - 20指令运用举例指令运用举例: 例:将片内例:将片内RAM 30H单元与单元与40H单元中的内容互换。单元中的内容互换。方法方法1(直接地址传送法):(直接地址传送法): MOV31H,30H MOV30H,40H MOV40H,31H SJMP$方法方法2(间接地址传送法):(间接地址传送法): MOVR0,#40H MOVR1,#30H MOVA,R0 MOVB,R1 MOVR1,A MOVR0,B SJMP$第三章 3 - 22方法方法3(字节交换传送法):(字节交换传送法): MO

25、VA,30H XCHA,40H MOV30H,A SJMP$方法方法4(堆栈传送法):(堆栈传送法): PUSH30H PUSH40H POP30H POP40H SJMP$第三章 3 - 23传送类指令小结传送类指令小结片外片外程序程序存储器存储器ROMEPROM特殊功能特殊功能寄存器寄存器SFR片内片内RAM128字节字节片外片外数据数据存储器存储器RAMMOVC MOVXMOVPUSHPOPXCHXCHD(A)判断对错:判断对错:MOVRn,RnMOVRi,RiMOVRn,RiMOV#data,A。注意!注意!好容易好容易出错啊!出错啊!第三章 3 - 25例例:设设A中有中有 一个一个

26、BCD码常数,试用查表法获得其相应的码常数,试用查表法获得其相应的ASCII码码v解法解法I: MOV DPTR,#TABv MOVC A,.A+DPTRv v TAB:DB 30Hv DB 31Hv DB 32H,33H,34H,35H v 解法解法II: MOVC A,A+PC TAB:DB 30H,31H,32H,33H DB 34H,35H,36H,37H 第三章 3 - 27二、算术运算类指令二、算术运算类指令算术运算类指令有加、减、乘、除法指令,增算术运算类指令有加、减、乘、除法指令,增1和减和减1指令,十进制调整指指令,十进制调整指令,共令,共24条,使用时应注意判断各种结果对哪

27、些标志位(条,使用时应注意判断各种结果对哪些标志位(CY、OV、AC、P)产生影响。)产生影响。1.不带进位的加法指令不带进位的加法指令(4条)条)指令助记符为指令助记符为ADD,4条指令的第一操作数都是条指令的第一操作数都是A,第二操作数有,第二操作数有4种种寻址方式寻址方式 。1 1)不带进位加)不带进位加 ADDADD A,Rn A,Rn ;AA(A A)+ + (RnRn) ADDADD A,direct A,direct;AA(A A)+ +(directdirect) ADDADD A,Ri A,Ri ;AA(A A)+ + (RiRi) ADDADD A,#data A,#dat

28、a ;AA(A A)+data+data 练习练习3-3 98H+75H分析各标志位的置位情况分析各标志位的置位情况第三章 3 - 282 2)带进位加)带进位加 ADDCADDC A,Rn A,Rn ;AA(A A)+ +(RnRn)+(CY) +(CY) ADDC ADDC A,direct A,direct;AA(A A)+ +(directdirect)+(CY) +(CY) ADDC ADDC A,Ri A,Ri ;AA(A A)+(+((RiRi))+(CY) )+(CY) ADDC ADDC A,#data A,#data ;AA(A A)+data+data +(CY)+(CY

29、) 2.带进位的加法指令带进位的加法指令(4条)条)指令助记符为指令助记符为ADDC,比比ADD多了加多了加CY位的值(之前指令留下的位的值(之前指令留下的CY值),主要用于多字节的加法运算,结果也送值),主要用于多字节的加法运算,结果也送A,影响,影响AC、CY、OV、P位。位。 例如求例如求 5688H+2396H低字节用低字节用ADD指令,高字节用指令,高字节用ADDC指令指令第三章 3 - 29例例3-4:在内在内RAM 31HRAM 31H、30H30H中存有双字节数(高在中存有双字节数(高在31H31H、低在、低在30H30H中),中),编程把该双字节数与编程把该双字节数与R2R2

30、中单字节数相加,和存在内中单字节数相加,和存在内RAM 40HRAM 40H单元开始的单元开始的空间中(低在先)空间中(低在先)。 R031H30HCYCYR242H41H40HR1图 3-2 双 字 节 数 与 单 字 节 数 相 加 算 法+第三章 3 - 30MOV R0,#30H ;置被加数地址指针首址;置被加数地址指针首址MOVR1,#40H ;置和地址指针首址;置和地址指针首址MOVA, R0 ;取被加数低字节;取被加数低字节ADDA,R2 ;低字节相加,并产生进位;低字节相加,并产生进位CYMOVR1,A ;存和的低字节;存和的低字节INCR0 ;地址指针增;地址指针增1,指向,

31、指向31HINCR1 ;地址指针增;地址指针增1,指向,指向41HMOVA,R0 ;取被加数的高字节;取被加数的高字节ADDCA,#0 ;高字节与进位;高字节与进位CY相加,产生新的进位相加,产生新的进位 MOVR1,A ;存和中字节;存和中字节 INCR1 ;地址指针增;地址指针增1,指向,指向42HMOVA,#0 ;ADDC A,#0 ;把高位的进位;把高位的进位CY转到转到A中中 MOV R1,A ;存和的高字节,和可能为三字节数;存和的高字节,和可能为三字节数 3. 带借位减法指令(带借位减法指令(4条)条)指令助记符为指令助记符为SUBBSUBB。指令的功能都是第一操作数指令的功能都

32、是第一操作数A A的内容减去第二操作的的内容减去第二操作的内容,再减去上次的内容,再减去上次的CYCY值,然后把差存入值,然后把差存入A A中,同时产生新的中,同时产生新的ACAC、CYCY、OVOV、P P位的值。位的值。SUBB A,Rn SUBB A,Rn ;AA(A A)- -(RnRn)- -(CYCY)SUBB A,direct SUBB A,direct ;AA(A A)- -(directdirect)-(CY)-(CY) SUBB A,Ri SUBB A,Ri ;AA(A A)-(-((RiRi))-(CY)-(CY) SUBBA,#data;AA(A A)-data-(CY

33、)-data-(CY)注意:没有不带借位的减注意:没有不带借位的减单字节减法如何实现?单字节减法如何实现?CLRC;将前次CY清零 SUBB A,30H 10011000- -) 10000101 00010011结果:结果:(A)=13H,(CY)=0,(AC)=0,(OV)=04.乘法指令(乘法指令(1条)条) MULAB;BA(A)(B) 说明:当积大于说明:当积大于255(0FFH)时,即积的高字节)时,即积的高字节B不为不为0时,置时,置OV=1,否则,否则OV=0;CY位总是位总是0。5.除法指令(除法指令(1条)条) DIVAB;AA/B(商)(商)B余数余数说明:无符号数相除,

34、当除数(说明:无符号数相除,当除数(B)=0时,时,结果为无意义,并置结果为无意义,并置OV=1;CY位总是位总是0。6.加加1指令(指令(5条)条)助记符为助记符为INC,指令的功能是将操作数中的内容加指令的功能是将操作数中的内容加1。除对。除对A操作影响操作影响P外不影响任何标志。外不影响任何标志。INCA;(A)(A)+1INCRnINCdirectINCRiINCDPTR7.减减1指令(指令(4条)条) 注意:没有对注意:没有对DPTR的减的减1操作指令操作指令 DEC ADEC A ; (A)(A)1以下类同以下类同DEC RnDEC RnDEC directDEC directDE

35、C RiDEC Ri第二节第二节 MCS51MCS51单片机的指令分类单片机的指令分类 8.十进制调整指令(十进制调整指令(1条)条) ADD、ADDC指令都是对指令都是对8位二进制数进行加法运算,当两个位二进制数进行加法运算,当两个BCD码码数进行数进行加法时,必须增加一条加法时,必须增加一条DA A指令(对其结果进行调整),否则结果就会指令(对其结果进行调整),否则结果就会出错。出错。指令的调整原则是:若(指令的调整原则是:若(A0A3)9或(或(AC)=1,则低则低4位位(A0A3)+6调整;若(调整;若(A4A7)9或(或(CY)=1,则高则高4位(位(A4 A7)+6调整。调整。 问

36、题:问题:BCD码的减法如何实现调整?码的减法如何实现调整?注意:注意:1)DA指令只能跟在加法指令后面使用;指令只能跟在加法指令后面使用; 2)调整前参与运算的两数是)调整前参与运算的两数是BCD码数;码数; 3)DA指令不能与减法指令配对使用,但可以实现对指令不能与减法指令配对使用,但可以实现对A中压缩中压缩BCD数进行减一操作。数进行减一操作。例如:设(例如:设(A)=30H(压缩(压缩BCD码数),执行如下指令:码数),执行如下指令: ADD A,#99H ;实现了;实现了30 1 = 29的操作的操作 DA A 作业:作业:- - - - - 三三.逻辑运算与循环类指令逻辑运算与循环

37、类指令“与与”操作指令操作指令 、“或或”操作指令、操作指令、“异或异或”操作指令操作指令求反与清除指令、循环移位指令求反与清除指令、循环移位指令 特点特点是当是当A A作目的操作数(第一操作数)时,影响作目的操作数(第一操作数)时,影响P P位;带位;带进位的移位指令影响进位的移位指令影响CyCy位,其余都不影响位,其余都不影响PSWPSW。 逻辑逻辑“或或”运算指令(运算指令(6 6条)条)此类指令都是按位相此类指令都是按位相“或或”,其中有其中有4条指令的第一操作条指令的第一操作数都为数都为A,另外两条指令的,另外两条指令的第一操作数为第一操作数为direct。 逻辑或指令格式:逻辑或指

38、令格式: ,n n;(A) (A) (Rn) ,directdirect ,i i ,datadata direct,direct, direct, direct, datadata 用法:使某数位置位或拼接两数。用法:使某数位置位或拼接两数。 思考:将思考:将A A中中D5D5置置1 1,其余保持不变?,其余保持不变?若直接寻址是若直接寻址是I/O端口时,则进行读端口时,则进行读修修改改写的逻辑操作,具体是:从该端口锁存写的逻辑操作,具体是:从该端口锁存器读入原始口数据的值(而不是读引脚状态),器读入原始口数据的值(而不是读引脚状态),经修改后写到该输出口去经修改后写到该输出口去 。 逻辑逻

39、辑“与与”运算指令(运算指令(6 6条)条) 与与“ORL”ORL”指令指令类似,都是按位类似,都是按位“与与”,其中,其中4 4条指令的第条指令的第一一操作数为操作数为A A,两条指令的第一操作数为,两条指令的第一操作数为directdirect。 逻辑逻辑“与与”指令格式指令格式 ,n n;(A) (A)(Rn) ,directdirect ,i i ,datadata direct, direct, direct,data例:将例:将A A中高位清低位不变中高位清低位不变 ,用法:屏蔽某些数位用法:屏蔽某些数位思考:屏蔽某数符号位?思考:屏蔽某数符号位?练习:将的低位位送到口的低位,高位

40、不变。练习:将的低位位送到口的低位,高位不变。 0 0, ,0 0 ,0 0 , ,0 0 逻辑逻辑“异或异或”运算指令(运算指令(6 6条)条) 指令格式:指令格式: ,i i; (A) (A) (Rn) ,directdirect ,i i ,datadata direct,direct, direct,direct,datadata异或操作的用法:异或操作的用法:某位用某位用“0”异或不变;异或不变;用用“1”异或该位取反。异或该位取反。也称为也称为“指定位取反指定位取反”。例如:使例如:使P1口的低口的低2位为位为0,高,高2位取反,其余位不变。位取反,其余位不变。ANLP1,#111

41、11100B ;先对二位清;先对二位清0XRLP1,#11000000B ;再对二位取反;再对二位取反 求反指令(求反指令(1条)条) CPL A;对累加器;对累加器A的内容各位求反,结的内容各位求反,结果送回果送回A中,影响中,影响P位。位。 清清0指令(指令(1条)条) CLR A ;将累加器将累加器A的内容清的内容清0。注意:两条指令仅对A有效判断指令的对错: CLR R1 CLR R2 循环移位指令(循环移位指令(4条,条,仅对仅对A有效有效) 其中有两条不带其中有两条不带CY位的逐位循环移位一次指令,不影响位的逐位循环移位一次指令,不影响PSW。两条带。两条带CY位的逐位循环移位一次

42、指令,仅影响位的逐位循环移位一次指令,仅影响CY位。位。三三. . 逻辑运算与循环类指令逻辑运算与循环类指令 RL A RL A;左移;左移 RR ARR A;右移;右移 RLC ARLC A;带进位带进位CY的左移的左移 RRC ARRC A;带进位带进位CY的右移的右移 1 0 1 0 1 1 0 11第三章 3 - 44例:将双字节数(例:将双字节数(R2R2)()(R3R3)右移一位)右移一位 三三. . 逻辑运算与循环类指令逻辑运算与循环类指令 1 0 1 0 1 1 0 10RRC ACLR CMOV A,R2RRC AMOV R2,AMOV A,R3RRC A MOV R3,A0

43、 1Cy第三章 3 - 45四、控制程序转移类指令四、控制程序转移类指令 控制程序转移类指令控制程序转移类指令主要功能是控制程序转移到新的主要功能是控制程序转移到新的PC地址去执行。地址去执行。 指令的实质:找一个新的值指令的实质:找一个新的值PCPC ,从而改变程序执行从而改变程序执行方向。方向。分为四大类:分为四大类:无条件转移指令;无条件转移指令;条件转移指令;调用指令;返回指令条件转移指令;调用指令;返回指令。1.1.无条件转移指令(无条件转移指令(4 4条)条)(1 1)长转移指令长转移指令LJMP addr16 LJMP addr16 ;PC addr16PC addr16范围范围

44、 64K64K(2)绝对转移指令绝对转移指令AJMP addr11 ;PC100addr11指令中包含有指令中包含有11位的目的地址(位的目的地址(a10 a9 a8 a7 a6 a5 a4 a3 a2 a1)四、控制程序转移类指令四、控制程序转移类指令a 1 0a 9a 800001a 7a 6a 5a 4a 3a 2a 1a 0R O MP CA J M P a d d r 1 1程 序 :图 3 - 4 A J M P a d d r 1 1 的 目 标 地 址 形 成 示 意 图1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 01 1 1 1 0 0 0 0 0 0 0 0

45、 0 0 1 11 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0高 5 位H转移范围转移范围2K2K字节字节 PC PC 高高5 5位不变位不变 机器码为两字节机器码为两字节 a10 a9 a8 0 0 0 0 1a10 a9 a8 0 0 0 0 1 a7-a0 a7-a0 四、控制程序转移类指令四、控制程序转移类指令(3)短(相对)转移指令短(相对)转移指令SJMPrel;PCPC+2+rel其目的地址是由其目的地址是由PC中的当前值和指令的第二字节中带符号的相对地址中的当前值和指令的第二字节中带符号的相对地址相加而成的。因此本指令转移的范围为:下一条指令的前相加而成的。因此

46、本指令转移的范围为:下一条指令的前128或本指令后或本指令后127字节的范围内(字节的范围内(范围范围 -126+129-126+129) 实际应用时,实际应用时,addr16、addr11、rel一般用符号地址形式。一般用符号地址形式。(4)间接转移指令(又称散转指令)间接转移指令(又称散转指令)JMPA+DPTR;PC(A)+(DPTR目的地址由指针目的地址由指针DPTR和变址和变址A的内容之和形成,的内容之和形成,范围达范围达64K 。四、控制程序转移类指令四、控制程序转移类指令2条件转移指令(条件转移指令(8条)条)条件转移指令都是依据某种条件成立才转移(不成立则继续条件转移指令都是依

47、据某种条件成立才转移(不成立则继续顺序下去)的指令。此类指令顺序下去)的指令。此类指令均为相对寻址均为相对寻址指令。指令。范围:以下一条指令的首地址为中心的范围:以下一条指令的首地址为中心的128+127字节内。字节内。(1 1)累加器判零转)累加器判零转 JZ relJZ rel;A=0 A=0 转,转,PC=PC+2+relPC=PC+2+rel JNZ rel JNZ rel;A0A0转转(2 2)CYCY位条件判转位条件判转 JC relJC rel;CY=1 CY=1 转转PC=PC+2+relPC=PC+2+rel JNC rel JNC rel;CY=0 CY=0 转转四、控制程

48、序转移类指令四、控制程序转移类指令(3 3)数值比较转)数值比较转 均为三字节均为三字节 CJNE ACJNE A,#data#data,relrel CJNE A CJNE A,directdirect,relrel CJNE Rn CJNE Rn,#data #data ,relrel CJNE Ri,.#daata,rel CJNE Ri,.#daata,rel 指令功能为两数比较不相等指令功能为两数比较不相等 转移转移, ,操作过程为操作过程为第一数减第二数第一数减第二数 状态标志送状态标志送PSWPSW,但不改变原来的操作数,但不改变原来的操作数注意:参与比较的数为无符号数注意:参与

49、比较的数为无符号数四、控制程序转移类指令四、控制程序转移类指令(4 4)可寻址位条件判转)可寻址位条件判转 (三字节)(三字节)JB bitJB bit,relrel; (bitbit)=1 =1 转转JNB bitJNB bit,rel rel ;(;(bitbit)=0 =0 转转JBC bitJBC bit,rel rel ;(;(bitbit)=1 =1 转,转, 并将该位清零并将该位清零(5)循环控制指令)循环控制指令DJNZ DJNZ Rn,relDJNZ Rn,rel DJNZ direct,rel DJNZ direct,rel; 指令功能是把源操作数减指令功能是把源操作数减1

50、,结果送回原操作数中,再判,结果送回原操作数中,再判结果不为结果不为0就转到目的地去,否则继续下面一条指令执行。就转到目的地去,否则继续下面一条指令执行。 主要应用在循环结构的编程中,作循环结束控制用。主要应用在循环结构的编程中,作循环结束控制用。 四、控制程序转移类指令四、控制程序转移类指令条件转移指令的应用条件转移指令的应用例例1:根据:根据A中的数是大于中的数是大于/等于等于/小于小于64H这三种情况去执行这三种情况去执行三种不同的处理程序。三种不同的处理程序。CJNE A,#64H,NEQ ;不等则转到;不等则转到NEQEQ: ;执行相等的处理程序;执行相等的处理程序NEQ:JNC B

51、IG;大于则转到;大于则转到BIG去执行程序去执行程序LOW: ;否则执行小于的处理程序;否则执行小于的处理程序 LMP NEXTBIG: ;执行大于的处理程序;执行大于的处理程序四、控制程序转移类指令四、控制程序转移类指令例例2 2:比较两无符号数的大小:比较两无符号数的大小 求求R1R1、R2R2中较大的数,结果中较大的数,结果存存R3 R3 中。中。解:解: ORG 0000HORG 0000H AJMP MAIN AJMP MAIN ORG 0030H ORG 0030HMAINMAIN: MOV AMOV A,R1R1 CJNE A CJNE A,02H02H,NEXTNEXTNEX

52、TNEXT: JC/JNC DONE (?)JC/JNC DONE (?) MOV A MOV A,R2R2DONEDONE: MOV R3MOV R3,A A LP LP: SJMP JPSJMP JP END END 注意问题:注意问题: 四、控制程序转移类指令四、控制程序转移类指令例例3:判正负数:判正负数要求从要求从P1口输入一个数,若为正数将其存入口输入一个数,若为正数将其存入20H单元,为负数则取反后存单元,为负数则取反后存20H单元。单元。解:分析怎样判断数的正负?解:分析怎样判断数的正负?D7=1负数,负数,D7=0正数正数程序如下:程序如下:ORG0030HMAIN:MOVP

53、1,#0FFH;MOVA,P1JNBACC.7,STOR;正数;正数CPLASTOR:MOV20H,A;SJMP$判断数的正负的其他方法:判断数的正负的其他方法:a)RLCAJNCSTORb)ANLA,#80H;JZSTOR;四、控制程序转移类指令四、控制程序转移类指令3.子程序调用及返回指令(子程序调用及返回指令(4条)条)(1)长调用指令)长调用指令 LCALL addr16 ;PCPC+3,SPSP+1,(SP)PC710SPSP+1,(,(SP)PC158PCaddr16(2)绝对调用指令)绝对调用指令 ACALL addr11;PCPC+2,SPSP+1(SP)PC70SPSP+1,

54、(,(SP)PC158,PC100addr11 例:(例:(SPSP)=30H=30H 6100H ACALL 480H 6100H ACALL 480H 1) 1) (PCPC): 6100+2=6102H-: 6100+2=6102H-断点断点 2) 2) (PCPC)=6480H=6480H (SPSP)=32H =32H (SPSP)=61H=61H (SP)-1)=02H四、控制程序转移类指令四、控制程序转移类指令30h31h32h0261SP四、控制程序转移类指令四、控制程序转移类指令(3)子程序返回指令)子程序返回指令RET;PC158(SP),),SPSP-1;PC70(SP)

55、,),SPSP-1从堆栈中弹出(断点)地址值给从堆栈中弹出(断点)地址值给PC(先高后低,栈指针减(先高后低,栈指针减2),使程),使程序从该序从该PC值处开始执行程序。不影响值处开始执行程序。不影响PSW。(4)中断返回)中断返回 RETI ;PC158(SP),),SPSP-1;PC70(SP),),SPSP-1 除具有除具有RET指令的所有功能外,还将指令的所有功能外,还将自动清除优先级状态触发器自动清除优先级状态触发器。RETI指令用在中断服务子程序中,作最后一条返回指令。指令用在中断服务子程序中,作最后一条返回指令。 注意:不能用注意:不能用RETRET指令代替指令代替RETI。 4

56、空操作指令(空操作指令(1条)条)NOP;指令的执行时间为一个机器周期,占一个字节。指令的执行时间为一个机器周期,占一个字节。例如在延时子程序中微调延时时间;调试程序时用一些例如在延时子程序中微调延时时间;调试程序时用一些NOP来过渡;有些单片机应用系统中还应用它来实现软件来过渡;有些单片机应用系统中还应用它来实现软件抗干扰等。抗干扰等。四、控制程序转移类指令四、控制程序转移类指令1.位传送指令(位传送指令(2条)条)MOV CMOV C,bitbit; C(bit)MOV bitMOV bit,C C; bitC指令中必须有一个位操作数是布尔累加器指令中必须有一个位操作数是布尔累加器C,另一

57、个才可以是直接,另一个才可以是直接可寻址的位。可寻址的位。例:例:MOV P1.5,C;把;把C中的值送到中的值送到P1.5口线输出口线输出2.位修改指令(位修改指令(6条)条)CLR C CLR C ; C0CLR bit CLR bit ;(bit)0SETB C SETB C ;C1SETB bit SETB bit ;(bit)1CPL C CPL C ;C/CCPL bit CPL bit ; (bit)/(bit)五、位操作类指令五、位操作类指令这组指令用来实现对位清这组指令用来实现对位清0,取反,置取反,置1,不影响其它标志,不影响其它标志位。位。五、位操作类指令五、位操作类指令

58、3.位逻辑运算指令(位逻辑运算指令(4条)条)这组指令的第一操作数必须是这组指令的第一操作数必须是C,两位逻辑运算的结果送,两位逻辑运算的结果送C中,式中的斜杠是位取反,但并不影响操作数本身的值。中,式中的斜杠是位取反,但并不影响操作数本身的值。 ANL CANL C,bitbit; CC(bit)ANL CANL C,/bit/bit;CC/(bit)ORL CORL C,bitbit;CC(bit)ORL CORL C,/bit/bit; CC/(bit) LJMPLJMPPC64K AJMPAJMPPC+2 SJMPSJMPPC+2-128+127 JMPJMP A+DPTRPCPC+2

59、DPTR256小结小结:练习练习1、设(、设(SP)=0BH,(,(0AH)=23H,(,(0BH)=01H执行执行RET后后,分析执行过程与堆栈操作分析执行过程与堆栈操作. MOV (PC)=0123H(返回主程序)(返回主程序)结果结果: :(SP)=09H01 23HSP0BHSPSP0AH09H3456H外ROM内RAMPCPC 23H01H23H01H(PC)=LCALL 34H 56H MOV 执行结果:(执行结果:(SP)=09H,(,(09H)=21H,(,(08H)=03H, (PC)=3456H SP07HSPSP08H09H2100H3456H外ROM内RAMPC+3PC

60、2103HPC03H21H练习练习2、设(、设(SP)=07H,(,(PC)=2100H,子程序首地址为,子程序首地址为3456H,执行下列指令,执行下列指令,分析执行过程与堆栈操作分析执行过程与堆栈操作.LCALL3456HMOVA,20H用汇编语言编写程序用汇编语言编写程序,一般可分为以下几个步骤:一般可分为以下几个步骤:1)分析题意分析题意,确定算法确定算法;2)设计程序流程图设计程序流程图;3)确定数据结构:合理地选择和分配内存单元以及工作寄存确定数据结构:合理地选择和分配内存单元以及工作寄存器器;4)编写源程序:编写源程序:5)上机调试程序。上机调试程序。第三节第三节 程序设计方法程

温馨提示

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

评论

0/150

提交评论