51内核单片机汇编语言程序设计课件.ppt

上传人(卖家):三亚风情 文档编号:3293398 上传时间:2022-08-17 格式:PPT 页数:141 大小:2.96MB
下载 相关 举报
51内核单片机汇编语言程序设计课件.ppt_第1页
第1页 / 共141页
51内核单片机汇编语言程序设计课件.ppt_第2页
第2页 / 共141页
51内核单片机汇编语言程序设计课件.ppt_第3页
第3页 / 共141页
51内核单片机汇编语言程序设计课件.ppt_第4页
第4页 / 共141页
51内核单片机汇编语言程序设计课件.ppt_第5页
第5页 / 共141页
点击查看更多>>
资源描述

1、12第第4章章 51内核单片机汇编语言程序设计内核单片机汇编语言程序设计4.1、汇编指令格式、汇编指令格式4.2、寻址方式、寻址方式4.3、指令系统、指令系统4.4、汇编程序常用伪指令、汇编程序常用伪指令4.5、汇编语言程序设计、汇编语言程序设计3一、基本概念一、基本概念 指令指令使单片机完成基本操作的命令。使单片机完成基本操作的命令。程序程序完成某项特定任务的指令的集合。完成某项特定任务的指令的集合。高级语言高级语言:汇编语言汇编语言:机器语言机器语言:程序设计语言:程序设计语言:用二进制代码表示指令和数据。用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。用助记符表

2、示指令操作功能,用标号表示操作对象。独立于机器独立于机器,面向过程面向过程,接近自然语言和数学表达式。接近自然语言和数学表达式。第四章第四章 51内核单片机汇编语言程序设计内核单片机汇编语言程序设计4 汇编程序功能汇编程序功能 源程序源程序 (汇编指令程序)(汇编指令程序)汇编汇编 目标程序目标程序(机器语言程序)(机器语言程序)汇编指令与机器码指令有一一对应的关系。汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。汇编程序是一种翻译程序,将源程序翻译成目标程序。(翻译)(翻译)手工汇编手工汇编 机器汇编机器汇编(常用)(常用)汇编的两种方式汇编的两种方式

3、5 关于机器汇编的说明关于机器汇编的说明两次扫描过程。两次扫描过程。第一次扫描:第一次扫描:检查语法错误,确定符号名字;检查语法错误,确定符号名字;建立使用的全部符号名字表;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。每一符号名字后跟一对应值(地址或数)。第二次扫描:第二次扫描:在第一次扫描基础上,将符号地址转换成地在第一次扫描基础上,将符号地址转换成地 址(代真);址(代真);利用操作码表将助记符转换成相应的目标码。利用操作码表将助记符转换成相应的目标码。6源程序源程序 目标程序目标程序 地址地址 ORG 1000HORG 1000HSTARTSTART:MOV R0MO

4、V R0,2FH 2FH MOV R2 MOV R2,#00H#00H MOV A MOV A,R0 R0 MOV R3 MOV R3,A A INC R3 INC R3 SJMP SJMP NEXT NEXT LOOPLOOP:INC R0 INC R0 CJNE R0 CJNE R0,#44H#44H,NEXTNEXT INC R2 INC R2 NEXTNEXT:DJNZ R3DJNZ R3,LOOPLOOP MOV MOV 2AH2AH,R2 R2 SJMP$SJMP$END END 第一次汇编第一次汇编第二次汇编第二次汇编1000 A82F1002 7A001004 E61005 F

5、B1006 0B1007 80NEXT1009 08100A B644NEXT100D 0A100E DBLOOP1010 8A2A1012 80FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE7 时间属性:指一条指令执行完毕所需要的时间时间属性:指一条指令执行完毕所需要的时间 空间属性:指一条指令存储于程序存储器中所占的字节数空间属性:指一条指令存储于程序存储器中所占的字节数 功能属性:指一条指令所对应的一个特定的操作功能功能属性:指一条指令所对应的一个特定的操作功能 指令的三种属性指令的三种属性 STC STC系列单片机采用了系列单片机采用了80C518

6、0C51内核,其指令集与内核,其指令集与MCSMCS5151系列单片机完全相同,本章介绍的指令系系列单片机完全相同,本章介绍的指令系统可适用于所有统可适用于所有5151内核的单片机。内核的单片机。8 指令的构成指令的构成 指令指令=操作码操作码+操作数操作数 操作码操作码表示该指令所能执行的操作功能。表示该指令所能执行的操作功能。操作数操作数表示参加操作的数的本身或操作数所在的地址。表示参加操作的数的本身或操作数所在的地址。汇编语言指令基本格式汇编语言指令基本格式标号:标号:操作码助记符操作码助记符 目的操作数目的操作数,源操作数,源操作数;注释;注释4.1 汇编指令格式汇编指令格式9 描述符

7、号描述符号:Rn 工作寄存器工作寄存器R0 R7 Ri 间接寻址寄存器间接寻址寄存器R0、R1 Direct 直接地址,包括内部直接地址,包括内部128B RAM单元地址、单元地址、所有所有SFR地址。地址。#data 8位立即数位立即数#data 16 16位立即数位立即数 addr 16 16位目的地址位目的地址 addr 11 11位目的地址位目的地址 rel 用补码表示的用补码表示的 8位相对偏移量位相对偏移量 bit 可直接位寻址的位可直接位寻址的位 10 /bit 指定位求反,再参与逻辑操作,但取反后不影指定位求反,再参与逻辑操作,但取反后不影 响该位的原值响该位的原值 (x)x中

8、的内容中的内容(x)x中的地址中的内容中的地址中的内容 表示操作流程,将箭尾一方内容送入箭头所指表示操作流程,将箭尾一方内容送入箭头所指 一方的单元中去一方的单元中去 当前指令地址当前指令地址 114.2 寻址方式寻址方式 寻址方式寻址方式寻找操作数或寻找操作数所在存储寻找操作数或寻找操作数所在存储 单元地址的方式单元地址的方式 共七种寻址方式:共七种寻址方式:寄存器寻址寄存器寻址直接寻址直接寻址立即数寻址立即数寻址寄存器间接寻址寄存器间接寻址变址寻址变址寻址相对寻址相对寻址位寻址位寻址必须掌握必须掌握12 操作数以常数的形式直接出现在指令中,操作数以常数的形式直接出现在指令中,用用“#”作前

9、缀;作前缀;该常数与操作码一起存放在该常数与操作码一起存放在ROM中,可以立即得到并执行。中,可以立即得到并执行。例如:例如:MOV A,#52H74HA 立即数立即数操作码操作码程序存储器程序存储器PC+1PC52H4.2.1 立即(数)寻址立即(数)寻址52H13 例如:例如:MOV DPTR,#5678H DPTR由由两个两个特殊功能寄存器特殊功能寄存器DPH和和DPL组成组成90H56H78H56H78HPCPC+1PC+2操作码操作码低位立即数低位立即数高位立即数高位立即数程序存储器程序存储器SFRDPLDPH 注意:注意:1.1.只有源操作数只有源操作数能使用立即寻址方式。能使用立

10、即寻址方式。2.2.立即数长度必须立即数长度必须小于或等于小于或等于目的操作数的长度。目的操作数的长度。14 操作数存放在操作数存放在R0 R7、A或或DPTR中;中;B寄存器在乘、除法指令中是寄存器寻址,在数据传送指令寄存器在乘、除法指令中是寄存器寻址,在数据传送指令 中是直接寻址。中是直接寻址。其他其他SFR的寻址方式不属于寄存器寻址。的寻址方式不属于寄存器寻址。例如:例如:MOV A,R54.2.2 寄存器寻址寄存器寻址101PC操作码操作码程序存储器程序存储器内部内部RAMR5AXXXXR6R71110115 指令中直接给出操作数的地址,数据存放在该地址对应的存指令中直接给出操作数的地

11、址,数据存放在该地址对应的存 储单元中。储单元中。直接寻址方式可以访问的范围:直接寻址方式可以访问的范围:4.2.3 直接寻址直接寻址 片内片内RAM低低128B单元(单元(00H7FH)SFR(既可用单元地址形式给出,也可用寄存器符号(既可用单元地址形式给出,也可用寄存器符号的形式给出)的形式给出)注意:注意:直接寻址方式是访问特殊功能寄存器的唯一方法。直接寻址方式是访问特殊功能寄存器的唯一方法。16 MOV P0,A (P0代表符号地址,是直接寻址方式)代表符号地址,是直接寻址方式)例如:例如:MOV A,63H4.2.3 直接寻址直接寻址74H63HPCPC+1操作码操作码直接地址直接地

12、址程序存储器程序存储器内部内部RAM63HAXXMOV 80H,A XX17可用作地址指针的工作寄存器是可用作地址指针的工作寄存器是R0、R1,以及,以及DPTR例如:例如:MOV A,R1;A(R1)PC操作码操作码程序存储器程序存储器内部内部RAMA11100114.2.4 寄存器间接寻址寄存器间接寻址 指令中寄存器的内容作为指令中寄存器的内容作为操作数存放的地址操作数存放的地址 间接寻址寄存器前间接寻址寄存器前用用“”表示前缀表示前缀1R130H30H58H58H18 使用该方式访问数据存储器时注意使用该方式访问数据存储器时注意:访问片内访问片内RAM只能用只能用R0和和R1作指针;作指

13、针;若片内扩展若片内扩展RAM或片外或片外RAM仅有仅有256B单元时单元时,既可以,既可以用用R0或或R1作指针间接访问,也可用作指针间接访问,也可用DPTR作指针间接访问;作指针间接访问;大于大于256B时只能以时只能以DPTR作指针间接访问。作指针间接访问。19 操作数地址操作数地址=变地址变地址+基地址基地址 基地址寄存器基地址寄存器:DPTR 或或 PC;变址寄存器变址寄存器:A 该寻址方式常用于访问该寻址方式常用于访问程序存储器程序存储器,查表查表。例如:例如:MOVC A,A+DPTRPC操作码操作码程序存储器程序存储器SFR32HALUA5H4.2.5 变址寻址变址寻址1001

14、0011DPHDPL32A5H32A5HA23H+23H=32C8H32C8H2FH2FH设设DPTR=32A5H,A=23H20 用于相对转移指令中用于相对转移指令中 以以当前当前PC值值作为基地址,与指令中给定的相对偏移量作为基地址,与指令中给定的相对偏移量rel相加,相加,以所得之和作为目的位置的地址以所得之和作为目的位置的地址 当前当前PC值值 源地址源地址转移指令所占的字节数转移指令所占的字节数 (实际上是转移指令的下一条指令的地址)(实际上是转移指令的下一条指令的地址)rel:以补码表示的有符号单字节数(以补码表示的有符号单字节数(-128127),负数表示从),负数表示从当前地址

15、向下转移,正数表示从当前地址向上转移。当前地址向下转移,正数表示从当前地址向上转移。4.2.6 相对寻址相对寻址21PC操作码操作码程序存储器程序存储器PCALU2050HPC+12051HPC+2偏移量偏移量rel=08H 例如:例如:JZ 08H;rel为正数,从当前地址向上转移为正数,从当前地址向上转移 当当A=0时,时,PCPC+2+rel/转移转移 当当A0时,时,PCPC+2/程序顺序执行程序顺序执行2052H205AH2052H08H+08H=205AHPC205AHXX2052H60H22PC操作码操作码程序存储器程序存储器PCALU2050HPC+12051HPC+2偏移量偏

16、移量rel=F4H 例如:例如:JZ F4H;rel为负数,从当前地址向下转移为负数,从当前地址向下转移 当当A=0时,时,PCPC+2+rel/转移转移 当当A0时,时,PCPC+2/程序顺序执行程序顺序执行2052H2046H2052HF4H+FFF4H=2046HPC2046HXX2052H60H23 操作数是二进制位操作数是二进制位 在指令中直接给出位地址,利用位处理器对某一位进行在指令中直接给出位地址,利用位处理器对某一位进行数据数据 传送、逻辑运算传送、逻辑运算等操作等操作 例如:例如:MOV C,07H;C(07H)PC操作码操作码程序存储器程序存储器C20H00PC+1PSWS

17、FRX4.2.7 位寻址位寻址07H07XA2H24 两种位寻址区:两种位寻址区:(1 1)内部)内部RAM中的位寻址区:字节地址为中的位寻址区:字节地址为20H2FH;(2 2)SFR的可寻址位。的可寻址位。位地址的几种表示方法:位地址的几种表示方法:1 1)直接使用位地址;如:)直接使用位地址;如:PSW的位的位6可表示为可表示为0D6H 2 2)字节地址带位号;)字节地址带位号;或或0D0H.6 3 3)SFR名带位号;名带位号;或或PSW.6 4 4)位符号地址表示;)位符号地址表示;或或AC 25数据传送指令共数据传送指令共29条,条,包括:包括:普通传送指令普通传送指令、数据交换指

18、令数据交换指令和和堆栈操作指令堆栈操作指令程序存程序存储器储器ROM特殊功能特殊功能寄存器寄存器 SFR片内片内RAM128字节字节扩展数扩展数据存储据存储器器RAMMOVCMOVXMOV PUSHPOPXCHXCHD4.3 指令系统指令系统4.3.1 数据传送指令数据传送指令注意:注意:该类指令只有以该类指令只有以A为目的操作数的指令影响为目的操作数的指令影响PSW中的中的P标志位,其它数据传送指令对各标志位无影响。标志位,其它数据传送指令对各标志位无影响。26回忆操作数描述符:回忆操作数描述符:direct,Rn,Ri,#data,DPTR等。等。1)以以A为目的操作数的传送指令为目的操作

19、数的传送指令MOV A,#dataMOV A,directMOV A,RnMOV A,RiMOV Rn,#dataMOV Rn,directMOV Rn,A1 1、普通传送指令、普通传送指令片内片内RAM传送指令传送指令MOV;A(Rn);Adata;A(direct);A(Ri)2)以以Rn为目的操作数的传送指令为目的操作数的传送指令;Rn A;Rndata;Rn(direct)27MOV direct,RnMOV direct,Ri4)以以Ri为目的操作数的传送指令为目的操作数的传送指令MOV Ri,#data ;(;(Ri)dataMOV Ri,direct ;(;(Ri)(direct

20、)MOV Ri,A ;(;(Ri)()()MOV DPTR,#data16 ;唯一的唯一的16位数据传送指令。位数据传送指令。(direct)(A)MOV direct,A ;3)以以direct为目的操作数的传送指令为目的操作数的传送指令MOV direct,#data(direct)dataMOV direct,direct(direct)(direct)(direct)(Rn)(direct)(Ri)5)以以DPTR为目的操作数的传送指令为目的操作数的传送指令28 MOV Rn,Rn MOV Ri,Ri MOV Rn,Ri MOV#data,A 注意:注意:1 1)在数据传送指令中目的操

21、作数和源操作数中不能)在数据传送指令中目的操作数和源操作数中不能 同时出现工作寄存器。同时出现工作寄存器。2 2)SFR只能用直接寻址方式访问。只能用直接寻址方式访问。3 3)片内)片内RAM高高128B(80H-FFH)只能用寄存器间只能用寄存器间 接寻址方式访问。接寻址方式访问。【例例4-1】写出将写出将R0的内容送到的内容送到R5中的程序段。中的程序段。MOV A,R0MOV R5,A29扩展数据存储器扩展数据存储器传送指令传送指令 对对片内扩展片内扩展RAM或或片外扩展片外扩展RAM及及外部接口电路外部接口电路进行数进行数 据传送的相关指令:据传送的相关指令:MOVX A,Ri MOV

22、X A,DPTR MOVX Ri,A MOVX DPTR,A 执行过程中会使执行过程中会使/WR、/RD有效。有效。;A(Ri);A(DPTR);(Ri)A;(DPTR)A(读)(读)(读)(读)(写)(写)(写)(写)注意:注意:1 1)通过)通过DPTR间接寻址,可以对整个间接寻址,可以对整个64KB片外片外RAM访问。访问。2 2)通过通过Ri间接寻址,只能对扩展间接寻址,只能对扩展RAM的低的低256字节访问,字节访问,如果地址范围大于如果地址范围大于256B时,应谨防地址冲突。时,应谨防地址冲突。30【例例4-2】试编写一试编写一程序段,实现将片外程序段,实现将片外RAM 地址为地址

23、为01E0H开始的开始的16个单元中的个单元中的内容传送到片内扩展内容传送到片内扩展RAM 地址为地址为04FFH开始的单元中。开始的单元中。参考程序为:参考程序为:MOV R2,#10HMOV P2,#01HMOV R0,#0E0HMOV DPTR,#04FFH LOOP:ORL AUXR,#00000010BMOVX A,R0ANL AUXR,#11111101BMOVX DPTR,A INCR0INCDPTRDJNZ R2,LOOPD7D6D5D4D3D2D1D0T0 x12T1x12 UART_M0 x6BRTR S2SMODBRTx12EXTRAM S1BRSEXTRAM=1时,访问

24、片时,访问片外扩展外扩展RAM31程序存储器传送指令程序存储器传送指令MOVC(查表指令)(查表指令)MOVC A,A+DPTR MOVC A,A+PC MOVC 含义是传送常数。含义是传送常数。(A)+(DPTR)或或PC当前值当前值=一个一个16位的地址位的地址,将该,将该ROM地址中地址中的内容的内容传送给传送给 A。以以DPTR为基地址的指令,可在为基地址的指令,可在ROM的的64KB范围内查范围内查 表;(常用)表;(常用)以以PC为基地址的指令只能在为基地址的指令只能在(PC)+1为基点的为基点的256B范范 围内查表;(不推荐)围内查表;(不推荐)使用第一条指令前,需事先将表首地

25、址存入使用第一条指令前,需事先将表首地址存入DPTR中,中,相对于表首偏移量存入相对于表首偏移量存入A寄存器中。寄存器中。32例如例如:(A)=30H,当前地址当前地址1000HMOVC A,A+PC;A(?H)例如例如:ORG 8000HMOV A,#30H MOVC A,A+PC;A(?H)ORG 8030HDB 41H,42H,43H,44H,45H例如例如:(DPTR)=8100H,(A)=40H MOVCA,A+DPTR;A(?H)80331031阅读以下三个程序段阅读以下三个程序段,并回答并回答?的内容。的内容。814033【例例4-3】将将ROM 02FFH单元的内容送片内单元的

26、内容送片内RAM的的50H单元中。单元中。参考程序如下:参考程序如下:MOV A,#0MOV DPTR,#02FFHMOVC A,A+DPTRMOV 50H,A34【例例4-4】设设data是一个是一个BCD码常数,试用查表法获得其相应的码常数,试用查表法获得其相应的ASCII码。将码。将09的的ASCII码组成一个表依次存放于程序存储器码组成一个表依次存放于程序存储器中以中以TAB为首地址的各单元中。为首地址的各单元中。参考程序如下:参考程序如下:MOV A,#data MOV DPTR,#TAB MOVC A,A+DPTR TAB:DB 30H,31H,32H DB 33H,34H,35H

27、,36H,37H,38H,39H 352 2、数据交换指令、数据交换指令普通传送指令普通传送指令数据传送是单向的,传送后只有目的操作数变化。数据传送是单向的,传送后只有目的操作数变化。数据交换指令数据交换指令是双向传送,交换后两个操作数都变。是双向传送,交换后两个操作数都变。整字节交换指令整字节交换指令 XCH A,Rn (A)(Rn)XCH A,direct (A)(direct)XCH A,Ri (A)(Ri)半字节交换指令半字节交换指令 XCHD A,Ri (A3-0)(Ri)3-0)A寄存器高低半字节交换指令寄存器高低半字节交换指令 SWAP A (A3-0)(A7-4)36【例例4-

28、5】已知(已知(R0)30H,(,(A)65H,(,(30H)8FH,分析执行如下指令后分析执行如下指令后A与与30H单元中数据的变化。单元中数据的变化。XCH A,R0XCHDA,R0SWAPA;交换后,(;交换后,(A)=8FH,(,(30H)=65H;交换后,(;交换后,(A)=85H,(,(30H)=6FH;交换后(;交换后(A)=58H37【例例4-6】将片内将片内RAM 30H和和31H单元中的单元中的ASCII码转换成压缩码转换成压缩式式BCD码存入码存入20H单元。其中单元。其中30H单元中的数值为低位,单元中的数值为低位,31H单单元中的数值为高位。元中的数值为高位。分析分析

29、:09的的ASCII码的低码的低4位即是所对应的位即是所对应的BCD码。码。参考程序如下:参考程序如下:MOV R0,#30H MOV R1,#31H XCHD A,R1 SWAP A XCHD A,R0 XCH A,20H 38 (2)(SP)(direct)3、堆栈操作指令、堆栈操作指令 PUSH direct POP direct PUSH direct 指令执行中,机器自动进行两步操作:指令执行中,机器自动进行两步操作:(1)SP(SP)+1 POP direct 指令执行中,机器也自动进行两步操作:指令执行中,机器也自动进行两步操作:(1)direct(SP)(2)SP (SP)1

30、不影响任不影响任何标志位何标志位堆栈堆栈:按后进先出原则读写:按后进先出原则读写的特殊的特殊RAM区。在用户初始区。在用户初始化程序中要先给堆栈指针赋化程序中要先给堆栈指针赋初值,确定栈底位置。使用初值,确定栈底位置。使用指令:指令:MOV SP,#DATA394FH50H51H52HSP80HPSW=80H例:例:“PUSH PSW”指令的执行过程指令的执行过程执行前:执行前:SP=4FH执行后:执行后:SP=50H404FH50H51H52HSPSP80HPSW=H例:例:“POP PSW”指令的执行过程指令的执行过程80H执行前:执行前:SP=50H执行后:执行后:SP=4FH41【例例

31、4-7】在程序存储器中从标号为在程序存储器中从标号为TAB1的单元开始依次存放的单元开始依次存放09的平方值,的平方值,R7中存有中存有09中的某个数,用查表指令取出中的某个数,用查表指令取出R7中中数据所对应的平方值并存入数据所对应的平方值并存入R7中,要求执行后中,要求执行后DPTR中的内容不中的内容不改变。改变。参考程序如下:参考程序如下:PUSH DPHPUSH DPL MOV A,R7 MOV DPTR,#TAB1 MOVC A,A+DPTR MOV R7,A POP DPL POP DPH TAB1:DB 00H,01H,04H,09H,42包括:加、包括:加、减、乘、除;增量、减

32、量;十进制的减、乘、除;增量、减量;十进制的BCD码调整。码调整。1、加法指令、加法指令不带进位位加法指令不带进位位加法指令 ADD A,#data ;A(A)+data ADD A,direct ;A(A)+(direct)ADD A,Rn ;A(A)+(Rn)ADD A,Ri ;A(A)+(Ri)无符号数相加无符号数相加时:若时:若C=1,(其值(其值 255 255)。)。有符号数相加有符号数相加时:若时:若OV=1OV=1,说明有溢出。说明有溢出。3.3.2 算术运算类指令算术运算类指令43带进位位加法指令带进位位加法指令 ADDC A,#data ;A(A)+data+(CY)ADD

33、C A,direct ;A(A)+(direct)+(CY)ADDC A,Rn ;A(A)+(Rn)+(CY)ADDC A,Ri ;A(A)+(Ri)+(CY)ADD和和ADDC指令的目的操作数均是指令的目的操作数均是A寄存器。寄存器。ADD和和ADDC指令在执行时要影响指令在执行时要影响CY、AC、OV和和P标志位。标志位。OV仅用来判断有符号数运算是否正确。仅用来判断有符号数运算是否正确。常用常用ADD和和ADDC指令配合实现多字节加法运算。指令配合实现多字节加法运算。对于加法指令的说明对于加法指令的说明44【例例4-8】设(设(A)=28H,(,(R1)=7CH,分析执行指令,分析执行指

34、令ADD A,R1后的结果。后的结果。0010 1000 0111 1100 1010 0100结果为结果为:A=0A4H,CY=0,AC=1,P=1,OV=145【例例4-9】设双字节数设双字节数 X 存在片内存在片内RAM 40H、41H单元,单元,Y存在存在42H、43H单元,编程求单元,编程求 Z=X+Y,并存入片内,并存入片内RAM 44H、45H、46H单元。(所有数据按高字节存于低地址单元的规则存放)单元。(所有数据按高字节存于低地址单元的规则存放)参考程序如下:参考程序如下:MOV A,41HADD A,43HMOV 46H,AMOV A,40H ADDCA,42H MOV 4

35、5H,A MOV A,#00H ADDC A,#00H MOV 44H,A 462、减法指令、减法指令SUBB A,#data;A(A)-data-(CY)SUBB A,direct;A(A)-(direct)-(CY)SUBB A,Rn;A(A)-(Rn)-(CY)SUBB A,Ri ;A(A)-(Ri)-(CY)51 51指令系统指令系统只有带借位的减法只有带借位的减法指令,指令,当当需要执行不带借需要执行不带借位的减法运算位的减法运算时,可先通过时,可先通过“CLR C”指令,指令,将进位标志将进位标志CY清零清零。SUBB指令在执行时要影响指令在执行时要影响CY、AC、OV和和P标志位

36、。标志位。OV仅用来判断有符号数运算是否正确。仅用来判断有符号数运算是否正确。对于减法指令的说明对于减法指令的说明 47【例例4-10】设(设(A)=52H,(,(R0)=0B4H,分析执行指令,分析执行指令CLR C SUBB A,R0 后的结果。后的结果。0101 0010 1011 0100 1001 1110结果为结果为:A=9EH,CY=1,AC=1,P=1,OV=148【例例4-11】两个双字节无符号数分别存放于寄存器两个双字节无符号数分别存放于寄存器R0 R1及及R2 R3中,试编程计算它们的差,结果存于寄存器中,试编程计算它们的差,结果存于寄存器R4 R5中。其中中。其中R0和

37、和R1中分别存放被减数的高中分别存放被减数的高8位和低位和低8位。位。R2和和R3中分别存放中分别存放减数的高减数的高8位和低位和低8位。差的高、低位。差的高、低8位分别存于寄存器位分别存于寄存器R4和和R5中。中。参考程序如下:参考程序如下:MOV A,R1 CLRC SUBBA,R3 MOV R5,A MOV A,R0 SUBBA,R2 MOV R4,A 493、加、加1指令指令INC A ;(;(A)(A)+1 ,以下类同。以下类同。INC RnINC directINC RiINC DPTR INC指令除了指令除了INC A要影响要影响P标标志位外,对其它标志位都没有影志位外,对其它标

38、志位都没有影响。响。【例例4-12】设设(R0)=7EH,片内,片内RAM(7EH)=0FFH,(7FH)=40H(DPTR)=21FEH,分析逐条执行下列指令后各单元的内容。,分析逐条执行下列指令后各单元的内容。INCR0INCR0INCR0 INCDPTRINCDPTR;使;使7EH单元的内容由单元的内容由0FFH变为变为00H;使;使R0的内容由的内容由7EH变为变为7FH;使;使7FH单元的内容由单元的内容由40H变为变为41H;使;使DPL为为FFH,DPH不变不变;使;使DPL为为00H,DPH变为变为22H504、减、减1指令指令DEC A ;(;(A)(A)-1,以下类同。以下

39、类同。DEC RnDEC direct DEC Ri DEC指令除了指令除了DEC A要影响要影响P标志位外,对其它标志标志位外,对其它标志位都没有影响。位都没有影响。在在51内核单片指令系统中,内核单片指令系统中,没有没有“DEC DPTR”指令指令。对于减对于减1指令的说明指令的说明 515、乘、除法指令、乘、除法指令 乘法指令乘法指令 MUL AB ;(;(A)()(B),),积的低积的低8位在位在A中,积的高中,积的高8位在位在 ;B中,中,CY总为总为0。当积。当积大于大于255时时(即(即B中不为中不为0);则;则置位置位OV标志。标志。51内核单片机乘、除法指令只针对无符号数运算

40、。内核单片机乘、除法指令只针对无符号数运算。这两条这两条指令影响指令影响CY、OV和和P,其它标志位不受影响,其它标志位不受影响。除法指令除法指令 DIV AB ;(;(A)()(B),),商在商在A中,余数在中,余数在B中。中。;(;(CY)总是总是0。;若除数(若除数(B)=0,则(则(OV)=1,否则(否则(OV)=0。52【例例4-13】试将试将A寄存器中的二进制数转换为寄存器中的二进制数转换为BCD码,结果的百码,结果的百位数存放于位数存放于31H单元,十位数和个位数压缩后存于单元,十位数和个位数压缩后存于30H单元。单元。参考程序如下:参考程序如下:MOV B,#100 DIVAB

41、 MOV 31H,A MOV A,#10 XCHA,B DIVAB SWAPA ADDA,B MOV 30H,A 53DA A ;二二 十进制调整指令。十进制调整指令。(A3 0)9 9时或(时或(ACAC)=1=1时,时,(A3 0)(A3 0)+6(A7 4)9 9或(或(C C)=1=1时,时,(A7 4)(A7 4)+6 选择修正值的规则:选择修正值的规则:6、十进制调整指令、十进制调整指令 执行过程中,执行过程中,CPU能根据加法运算后,能根据加法运算后,A中的值和中的值和PSW中的中的AC及及CY标志位的状况标志位的状况自动选择自动选择一个修正值(一个修正值(00H、06H、60H

42、、66H)与原运算结果相加,进行二与原运算结果相加,进行二十进制调整。十进制调整。DA A指令只能跟在加法指令后面使用。指令只能跟在加法指令后面使用。参加运算的两数是参加运算的两数是BCD码才有必要调整。码才有必要调整。54【例例4-14】设设A寄存器内存有寄存器内存有BCD码码56H,寄存器,寄存器R3内存有内存有BCD码码67H,执行,执行ADD A,R3指令后,结果应该是指令后,结果应该是123,但实际结果为:但实际结果为:0101 0110 56 +0110 0111 67 1011 1101 BDH 需再执行指令需再执行指令 DA A,对上面的结果进行调整,因高,对上面的结果进行调整

43、,因高4位及低位及低4位数都大于位数都大于9,故需加,故需加66H。1011 1101 +0110 0110 加加66H调整调整 1 0010 0011 12355 BCD码减法码减法方法:方法:减法可以转换为加法运算,将减数转换为减法可以转换为加法运算,将减数转换为十进制补码十进制补码,然后相加,再用然后相加,再用DA A指令进行调整。指令进行调整。例如:例如:80-30=80+-30补补=80+(100-30)=150结果中百位数字结果中百位数字1在在CY中,中,A寄存器中的寄存器中的50H即即80-30的的BCD码。码。在实际运算时,不能用一个字节表示十进制数在实际运算时,不能用一个字节

44、表示十进制数100,可用,可用99+1表表示,即示,即10011001B+1=10011010B=9AH,因为因为9AH经过十进制调经过十进制调整后就是整后就是100。56 十进制无符号数的减法运算可按以下步骤进行:十进制无符号数的减法运算可按以下步骤进行:第一步:求减数的第一步:求减数的十进制补码十进制补码(9AH-减数);减数);第二步:被减数与减数的十进制补码相加;第二步:被减数与减数的十进制补码相加;第三步:经第三步:经DA A指令调整后就得到所求的十进制减法运算结果。指令调整后就得到所求的十进制减法运算结果。【例例415】设设M1、M2、M3 分别为十进制的被减数、分别为十进制的被减

45、数、减数和减数和差的符号地址差的符号地址,编写减法运算程序。编写减法运算程序。CLRC;CY清清0MOV A,9AH;A 9AH SUBBA,M2;求;求M2的十进制补码的十进制补码ADDA,M1;M1与与M2的十进制补码相加的十进制补码相加DAA;十进制调整;十进制调整MOV M3,A;差存入;差存入M3574.3.3 逻辑运算指令逻辑运算指令 该类指令除了带进位循环及该类指令除了带进位循环及A为第一操作数的指令影响为第一操作数的指令影响CY和和P外,其它指令不影响外,其它指令不影响PSW中的标志位。中的标志位。1.逻辑与指令逻辑与指令ANL A,#data;A(A)data,以下类同,以下

46、类同ANL A,Rn ANL A,direct ANL A,RiANL direct,#dataANL direct,A【例例4-16】设当前设当前P1口输出口输出35H,使其高使其高4位输出位输出0,低,低4位不变。位不变。解;解;ANL P1,#0FH 此做法称为此做法称为“屏蔽屏蔽”位。位。注意:注意:跟跟“0”相与可将该位清相与可将该位清0 跟跟“1 1”相与该位保持不相与该位保持不变变582.逻辑或指令逻辑或指令ORL A,#data;A(A)data,以下类同,以下类同ORL A,Rn ORL A,direct ORL A,RiORL direct,#dataORL direct,

47、A注意:注意:跟跟“1”相或可将该位置相或可将该位置1 跟跟“0 0”相或该位保持不相或该位保持不变变【例例4-17】将将A中的低中的低3位送入位送入片内片内RAM 30H单元低单元低3位,并位,并且保持且保持30H单元的高单元的高5位不变。位不变。解;解;ANLA,#07HANL30H,#0F8HORL30H,A 这称为这称为“数位组合数位组合”。593.逻辑异或指令逻辑异或指令XRL A,#data;A(A)data,以下类同,以下类同XRL A,Rn XRL A,direct XRL A,RiXRL direct,#dataXRL direct,A注意:注意:跟跟“1”异或可取反异或可取

48、反 跟跟“0 0”异或保持不变异或保持不变【例例4-18】设(设(A)=0B5H=10110101B,执行下列操作:,执行下列操作:XRLA,#0FH;则则A的低的低4位取反,高位取反,高4位保位保持不变,(持不变,(A)=10111010B 这称为这称为“指定位求反指定位求反”。604.A寄存器的清零和求反指令寄存器的清零和求反指令 清零指令:清零指令:CLR A;A0 求反指令:求反指令:CPL A;【例例4-18】双字节数求补码。一个双字节数求补码。一个 16 位正数位正数X存于存于 R3(高(高 8 位)位)R2(低(低 8 位)中位)中,求求X的补码,并将结果仍存于的补码,并将结果仍

49、存于R3、R2。参考程序如下:参考程序如下:MOVA,R2 CPLA ADDA,01H MOVR2,A MOVA,R3 CPLA ADDCA,00H MOVR3,A A()A615.移位指令移位指令 循环左移:循环左移:RL A 循环右移:循环右移:RR A 带进位位的循环左移:带进位位的循环左移:RLC A 带进位位的循环右移:带进位位的循环右移:RRC AA.0A.7A.0A.7A.0A.7CYA.0A.7CY 循环移位只能对循环移位只能对 A寄存器进行,每次只能移动一位寄存器进行,每次只能移动一位 对于某些数左移一位相当于乘以对于某些数左移一位相当于乘以2,右移一位相当于,右移一位相当于

50、 除以除以2。624.3.4 控制转移类指令控制转移类指令作用:改变程序计数器作用:改变程序计数器PC的值,从而改变程序执行方向。的值,从而改变程序执行方向。分为四大类:分为四大类:无条件转移指令;条件转移指令;子程序调无条件转移指令;条件转移指令;子程序调用指令;返回指令。用指令;返回指令。1、无条件转移指令、无条件转移指令 LJMP addr16 AJMP addr11 SJMP rel JMP A+DPTR 63 LJMP addr16 ;转移目的地址转移目的地址 PC addr16,0000H FFFFH,64KB假设执行该指假设执行该指令前,令前,PCPC的值的值为为0000H000

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(51内核单片机汇编语言程序设计课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|