收藏 分销(赏)

内核单片机汇编语言程序设计.pptx

上传人:a199****6536 文档编号:4740082 上传时间:2024-10-11 格式:PPTX 页数:141 大小:1.79MB 下载积分:20 金币
下载 相关 举报
内核单片机汇编语言程序设计.pptx_第1页
第1页 / 共141页
内核单片机汇编语言程序设计.pptx_第2页
第2页 / 共141页


点击查看更多>>
资源描述
12第第4章章51内核单片机汇编语言程序设计内核单片机汇编语言程序设计4.1、汇编指令格式、汇编指令格式4.2、寻址方式、寻址方式4.3、指令系统、指令系统4.4、汇编程序常用伪指令、汇编程序常用伪指令4.5、汇编语言程序设计、汇编语言程序设计3一、基本概念一、基本概念指令指令使单片机完成基本操作的命令。使单片机完成基本操作的命令。程序程序完成某项特定任务的指令的集合。完成某项特定任务的指令的集合。高级语言高级语言:汇编语言汇编语言:机器语言机器语言:程序设计语言:程序设计语言:用二进制代码表示指令和数据。用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。用助记符表示指令操作功能,用标号表示操作对象。独立于机器独立于机器,面向过程面向过程,接近自然语言和数学表达式。接近自然语言和数学表达式。第四章第四章51内核单片机汇编语言程序设计内核单片机汇编语言程序设计4 汇编程序功能汇编程序功能 源程序源程序 (汇编指令程序)(汇编指令程序)汇编汇编 目标程序目标程序(机器语言程序)(机器语言程序)汇编指令与机器码指令有一一对应的关系。汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。汇编程序是一种翻译程序,将源程序翻译成目标程序。(翻译)(翻译)手工汇编手工汇编 机器汇编机器汇编(常用)(常用)汇编的两种方式汇编的两种方式 5 关于机器汇编的说明关于机器汇编的说明两次扫描过程。两次扫描过程。第一次扫描:第一次扫描:检查语法错误,确定符号名字;检查语法错误,确定符号名字;建立使用的全部符号名字表;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。每一符号名字后跟一对应值(地址或数)。第二次扫描:第二次扫描:在第一次扫描基础上,将符号地址转换成地在第一次扫描基础上,将符号地址转换成地址(代真);址(代真);利用操作码表将助记符转换成相应的目标码。利用操作码表将助记符转换成相应的目标码。6源程序源程序目标程序目标程序地址地址 ORG 1000HORG 1000HSTARTSTART:MOV R0MOV 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第一次汇编第一次汇编第二次汇编第二次汇编1000A82F10027A001004E61005FB10060B100780NEXT100908100AB644NEXT100D0A100EDBLOOP10108A2A101280FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE7时间属性:指一条指令执行完毕所需要的时间时间属性:指一条指令执行完毕所需要的时间空间属性:指一条指令存储于程序存储器中所占的字节数空间属性:指一条指令存储于程序存储器中所占的字节数功能属性:指一条指令所对应的一个特定的操作功能功能属性:指一条指令所对应的一个特定的操作功能 指令的三种属性指令的三种属性 STC STC系列单片机采用了系列单片机采用了80C5180C51内核,其指令集与内核,其指令集与MCSMCS5151系列单片机完全相同,本章介绍的指令系系列单片机完全相同,本章介绍的指令系统可适用于所有统可适用于所有5151内核的单片机。内核的单片机。8指令的构成指令的构成指令指令=操作码操作码+操作数操作数操作码操作码表示该指令所能执行的操作功能。表示该指令所能执行的操作功能。操作数操作数表示参加操作的数的本身或操作数所在的地址。表示参加操作的数的本身或操作数所在的地址。汇编语言指令基本格式汇编语言指令基本格式标号:标号:操作码助记符操作码助记符 目的操作数目的操作数,源操作数,源操作数;注释;注释4.1汇编指令格式汇编指令格式9描述符号描述符号:Rn工作寄存器工作寄存器R0R7Ri间接寻址寄存器间接寻址寄存器R0、R1Direct直接地址,包括内部直接地址,包括内部128BRAM单元地址、单元地址、所有所有SFR地址。地址。#data8位立即数位立即数#data1616位立即数位立即数addr1616位目的地址位目的地址addr1111位目的地址位目的地址rel用补码表示的用补码表示的8位相对偏移量位相对偏移量bit可直接位寻址的位可直接位寻址的位10/bit指定位求反,再参与逻辑操作,但取反后不影指定位求反,再参与逻辑操作,但取反后不影响该位的原值响该位的原值(x)x中的内容中的内容(x)x中的地址中的内容中的地址中的内容表示操作流程,将箭尾一方内容送入箭头所指表示操作流程,将箭尾一方内容送入箭头所指一方的单元中去一方的单元中去当前指令地址当前指令地址114.2寻址方式寻址方式寻址方式寻址方式寻找操作数或寻找操作数所在存储寻找操作数或寻找操作数所在存储单元地址的方式单元地址的方式共七种寻址方式:共七种寻址方式:寄存器寻址寄存器寻址直接寻址直接寻址立即数寻址立即数寻址寄存器间接寻址寄存器间接寻址变址寻址变址寻址相对寻址相对寻址位寻址位寻址必须掌握必须掌握12操作数以常数的形式直接出现在指令中,操作数以常数的形式直接出现在指令中,用用“#”作前缀;作前缀;该常数与操作码一起存放在该常数与操作码一起存放在ROM中,可以立即得到并执行。中,可以立即得到并执行。例如:例如:MOVA,#52H74HA 立即数立即数操作码操作码程序存储器程序存储器PC+1PC52H4.2.1立即(数)寻址立即(数)寻址52H13例如:例如:MOVDPTR,#5678HDPTR由由两个两个特殊功能寄存器特殊功能寄存器DPH和和DPL组成组成90H56H78H56H78HPCPC+1PC+2操作码操作码低位立即数低位立即数高位立即数高位立即数程序存储器程序存储器SFRDPLDPH 注意:注意:1.1.只有源操作数只有源操作数能使用立即寻址方式。能使用立即寻址方式。2.2.立即数长度必须立即数长度必须小于或等于小于或等于目的操作数的长度。目的操作数的长度。14操作数存放在操作数存放在R0R7、A或或DPTR中;中;B寄存器在乘、除法指令中是寄存器寻址,在数据传送指令寄存器在乘、除法指令中是寄存器寻址,在数据传送指令中是直接寻址。中是直接寻址。其他其他SFR的寻址方式不属于寄存器寻址。的寻址方式不属于寄存器寻址。例如:例如:MOVA,R54.2.2寄存器寻址寄存器寻址101PC操作码操作码程序存储器程序存储器内部内部RAMR5AXXXXR6R71110115指令中直接给出操作数的地址,数据存放在该地址对应的存指令中直接给出操作数的地址,数据存放在该地址对应的存储单元中。储单元中。直接寻址方式可以访问的范围:直接寻址方式可以访问的范围:4.2.3直接寻址直接寻址片内片内RAM低低128B单元(单元(00H7FH)SFR(既可用单元地址形式给出,也可用寄存器符号的(既可用单元地址形式给出,也可用寄存器符号的形式给出)形式给出)注意:注意:直接寻址方式是访问特殊功能寄存器的唯一方法。直接寻址方式是访问特殊功能寄存器的唯一方法。16 MOVP0,A(P0代表符号地址,是直接寻址方式)代表符号地址,是直接寻址方式)例如:例如:MOVA,63H4.2.3直接寻址直接寻址74H63HPCPC+1操作码操作码直接地址直接地址程序存储器程序存储器内部内部RAM63HAXXMOV80H,A XX17可用作地址指针的工作寄存器是可用作地址指针的工作寄存器是R0、R1,以及,以及DPTR例如:例如:MOVA,R1;A(R1)PC操作码操作码程序存储器程序存储器内部内部RAMA11100114.2.4寄存器间接寻址寄存器间接寻址指令中寄存器的内容作为指令中寄存器的内容作为操作数存放的地址操作数存放的地址间接寻址寄存器前间接寻址寄存器前用用“”表示前缀表示前缀1R130H30H58H58H18使用该方式访问数据存储器时注意使用该方式访问数据存储器时注意:访问片内访问片内RAM只能用只能用R0和和R1作指针;作指针;若片内扩展若片内扩展RAM或片外或片外RAM仅有仅有256B单元时单元时,既可以,既可以用用R0或或R1作指针间接访问,也可用作指针间接访问,也可用DPTR作指针间接访问;作指针间接访问;大于大于256B时只能以时只能以DPTR作指针间接访问。作指针间接访问。19操作数地址操作数地址=变地址变地址+基地址基地址基地址寄存器基地址寄存器:DPTR或或PC;变址寄存器变址寄存器:A该寻址方式常用于访问该寻址方式常用于访问程序存储器程序存储器,查表查表。例如:例如:MOVCA,A+DPTRPC操作码操作码程序存储器程序存储器SFR32HALUA5H4.2.5变址寻址变址寻址10010011DPHDPL32A5H32A5HA23H+23H=32C8H32C8H2FH2FH设设DPTR=32A5H,A=23H20 用于相对转移指令中用于相对转移指令中以以当前当前PC值值作为基地址,与指令中给定的相对偏移量作为基地址,与指令中给定的相对偏移量rel相加,相加,以所得之和作为目的位置的地址以所得之和作为目的位置的地址当前当前PC值值源地址源地址转移指令所占的字节数转移指令所占的字节数(实际上是转移指令的下一条指令的地址)(实际上是转移指令的下一条指令的地址)rel:以补码表示的有符号单字节数(以补码表示的有符号单字节数(-128127),负数表示从),负数表示从当前地址向下转移,正数表示从当前地址向上转移。当前地址向下转移,正数表示从当前地址向上转移。4.2.6相对寻址相对寻址21PC操作码操作码程序存储器程序存储器PCALU2050HPC+12051HPC+2偏移量偏移量rel=08H例如:例如:JZ08H;rel为正数,从当前地址向上转移为正数,从当前地址向上转移当当A=0时,时,PCPC+2+rel/转移转移 当当A0时,时,PCPC+2/程序顺序执行程序顺序执行2052H205AH2052H08H+08H=205AHPC205AHXX2052H60H22PC操作码操作码程序存储器程序存储器PCALU2050HPC+12051HPC+2偏移量偏移量rel=F4H例如:例如:JZF4H;rel为负数,从当前地址向下转移为负数,从当前地址向下转移当当A=0时,时,PCPC+2+rel/转移转移 当当A0时,时,PCPC+2/程序顺序执行程序顺序执行2052H2046H2052HF4H+FFF4H=2046HPC2046HXX2052H60H23操作数是二进制位操作数是二进制位在指令中直接给出位地址,利用位处理器对某一位进行在指令中直接给出位地址,利用位处理器对某一位进行数据数据传送、逻辑运算传送、逻辑运算等操作等操作例如:例如:MOVC,07H;C(07H)PC操作码操作码程序存储器程序存储器C20H00PC+1PSWSFRX4.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条,条,包括:包括:普通传送指令普通传送指令、数据交换指令数据交换指令和和堆栈操作指令堆栈操作指令程序存程序存储器储器ROM特殊功能特殊功能寄存器寄存器SFR片内片内RAM128字节字节扩展数扩展数据存储据存储器器RAMMOVCMOVXMOVPUSHPOPXCHXCHD4.3指令系统指令系统4.3.1数据传送指令数据传送指令注意:注意:该类指令只有以该类指令只有以A为目的操作数的指令影响为目的操作数的指令影响PSW中的中的P标志位,其它数据传送指令对各标志位无影响。标志位,其它数据传送指令对各标志位无影响。26回忆操作数描述符:回忆操作数描述符:direct,Rn,Ri,#data,DPTR等。等。1)以以A为目的操作数的传送指令为目的操作数的传送指令MOVA,#dataMOVA,directMOVA,RnMOVA,RiMOVRn,#dataMOVRn,directMOVRn,A1 1、普通传送指令、普通传送指令片内片内RAM传送指令传送指令MOV;A(Rn);Adata;A(direct);A(Ri)2)以以Rn为目的操作数的传送指令为目的操作数的传送指令;RnA;Rndata;Rn(direct)27MOVdirect,RnMOVdirect,Ri4)以以Ri为目的操作数的传送指令为目的操作数的传送指令MOVRi,#data;(;(Ri)dataMOVRi,direct;(;(Ri)(direct)MOVRi,A;(;(Ri)()()MOVDPTR,#data16;唯一的唯一的16位数据传送指令。位数据传送指令。(direct)(A)MOVdirect,A;3)以以direct为目的操作数的传送指令为目的操作数的传送指令MOVdirect,#data(direct)dataMOVdirect,direct(direct)(direct)(direct)(Rn)(direct)(Ri)5)以以DPTR为目的操作数的传送指令为目的操作数的传送指令28MOVRn,RnMOVRi,RiMOVRn,RiMOV#data,A注意:注意:1 1)在数据传送指令中目的操作数和源操作数中不能)在数据传送指令中目的操作数和源操作数中不能 同时出现工作寄存器。同时出现工作寄存器。2 2)SFR只能用直接寻址方式访问。只能用直接寻址方式访问。3 3)片内)片内RAM高高128B(80H-FFH)只能用寄存器间只能用寄存器间 接寻址方式访问。接寻址方式访问。【例例4-1】写出将写出将R0的内容送到的内容送到R5中的程序段。中的程序段。MOVA,R0MOVR5,A29扩展数据存储器扩展数据存储器传送指令传送指令对对片内扩展片内扩展RAM或或片外扩展片外扩展RAM及及外部接口电路外部接口电路进行数进行数据传送的相关指令:据传送的相关指令:MOVXA,RiMOVXA,DPTRMOVXRi,AMOVXDPTR,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地址为地址为01E0H开始的开始的16个单元中的个单元中的内容传送到片内扩展内容传送到片内扩展RAM地址为地址为04FFH开始的单元中。开始的单元中。参考程序为:参考程序为:MOV R2,#10HMOV P2,#01HMOV R0,#0E0HMOV DPTR,#04FFHLOOP:ORLAUXR,#00000010BMOVXA,R0ANL AUXR,#11111101BMOVXDPTR,AINCR0INCDPTRDJNZR2,LOOPD7D6D5D4D3D2D1D0T0 x12T1x12 UART_M0 x6BRTR S2SMODBRTx12EXTRAM S1BRSEXTRAM=1时,访问片时,访问片外扩展外扩展RAM31程序存储器传送指令程序存储器传送指令MOVC(查表指令)(查表指令)MOVCA,A+DPTRMOVCA,A+PCMOVC含义是传送常数。含义是传送常数。(A)+(DPTR)或或PC当前值当前值=一个一个16位的地址位的地址,将该,将该ROM地址中地址中的内容的内容传送给传送给A。以以DPTR为基地址的指令,可在为基地址的指令,可在ROM的的64KB范围内查范围内查 表;(常用)表;(常用)以以PC为基地址的指令只能在为基地址的指令只能在(PC)+1为基点的为基点的256B范范 围内查表;(不推荐)围内查表;(不推荐)使用第一条指令前,需事先将表首地址存入使用第一条指令前,需事先将表首地址存入DPTR中,中,相对于表首偏移量存入相对于表首偏移量存入A寄存器中。寄存器中。32例如例如:(A)=30H,当前地址当前地址1000HMOVCA,A+PC;A(?H)例如例如:ORG 8000HMOV A,#30HMOVCA,A+PC;A(?H)ORG 8030HDB41H,42H,43H,44H,45H例如例如:(DPTR)=8100H,(A)=40HMOVCA,A+DPTR;A(?H)80331031阅读以下三个程序段阅读以下三个程序段,并回答并回答?的内容。的内容。814033【例例4-3】将将ROM02FFH单元的内容送片内单元的内容送片内RAM的的50H单元中。单元中。参考程序如下:参考程序如下:MOVA,#0MOVDPTR,#02FFHMOVCA,A+DPTRMOV50H,A34【例例4-4】设设data是一个是一个BCD码常数,试用查表法获得其相应的码常数,试用查表法获得其相应的ASCII码。将码。将09的的ASCII码组成一个表依次存放于程序存储器码组成一个表依次存放于程序存储器中以中以TAB为首地址的各单元中。为首地址的各单元中。参考程序如下:参考程序如下:MOVA,#dataMOVDPTR,#TABMOVCA,A+DPTR TAB:DB30H,31H,32HDB33H,34H,35H,36H,37H,38H,39H 352 2、数据交换指令、数据交换指令普通传送指令普通传送指令数据传送是单向的,传送后只有目的操作数变化。数据传送是单向的,传送后只有目的操作数变化。数据交换指令数据交换指令是双向传送,交换后两个操作数都变。是双向传送,交换后两个操作数都变。整字节交换指令整字节交换指令XCHA,Rn(A)(Rn)XCHA,direct(A)(direct)XCHA,Ri(A)(Ri)半字节交换指令半字节交换指令XCHDA,Ri(A3-0)(Ri)3-0)A寄存器高低半字节交换指令寄存器高低半字节交换指令SWAPA(A3-0)(A7-4)36【例例4-5】已知(已知(R0)30H,(,(A)65H,(,(30H)8FH,分析执行如下指令后分析执行如下指令后A与与30H单元中数据的变化。单元中数据的变化。XCHA,R0XCHDA,R0SWAPA;交换后,(;交换后,(A)=8FH,(,(30H)=65H;交换后,(;交换后,(A)=85H,(,(30H)=6FH;交换后(;交换后(A)=58H37【例例4-6】将片内将片内RAM30H和和31H单元中的单元中的ASCII码转换成压缩式码转换成压缩式BCD码存入码存入20H单元。其中单元。其中30H单元中的数值为低位,单元中的数值为低位,31H单元单元中的数值为高位。中的数值为高位。分析分析:09的的ASCII码的低码的低4位即是所对应的位即是所对应的BCD码。码。参考程序如下:参考程序如下:MOVR0,#30HMOVR1,#31HXCHDA,R1SWAPAXCHDA,R0XCHA,20H38(2)(SP)(direct)3、堆栈操作指令、堆栈操作指令PUSHdirectPOPdirectPUSHdirect指令执行中,机器自动进行两步操作:指令执行中,机器自动进行两步操作:(1)SP(SP)+1POPdirect指令执行中,机器也自动进行两步操作:指令执行中,机器也自动进行两步操作:(1)direct(SP)(2)SP(SP)1不影响任不影响任何标志位何标志位堆栈堆栈:按后进先出原则读写:按后进先出原则读写的特殊的特殊RAM区。在用户初始区。在用户初始化程序中要先给堆栈指针赋化程序中要先给堆栈指针赋初值,确定栈底位置。使用初值,确定栈底位置。使用指令:指令:MOVSP,#DATA394FH50H51H52HSP80HPSW=80H例:例:“PUSHPSW”指令的执行过程指令的执行过程执行前:执行前:SP=4FH执行后:执行后:SP=50H404FH50H51H52HSPSP80HPSW=H例:例:“POPPSW”指令的执行过程指令的执行过程80H执行前:执行前:SP=50H执行后:执行后:SP=4FH41【例例4-7】在程序存储器中从标号为在程序存储器中从标号为TAB1的单元开始依次存放的单元开始依次存放09的平方值,的平方值,R7中存有中存有09中的某个数,用查表指令取出中的某个数,用查表指令取出R7中中数据所对应的平方值并存入数据所对应的平方值并存入R7中,要求执行后中,要求执行后DPTR中的内容不中的内容不改变。改变。参考程序如下:参考程序如下:PUSHDPHPUSHDPLMOVA,R7MOVDPTR,#TAB1MOVCA,A+DPTRMOV R7,APOP DPLPOP DPHTAB1:DB00H,01H,04H,09H,42包括:加、包括:加、减、乘、除;增量、减量;十进制的减、乘、除;增量、减量;十进制的BCD码调整。码调整。1、加法指令、加法指令不带进位位加法指令不带进位位加法指令ADDA,#data;A(A)+dataADDA,direct;A(A)+(direct)ADDA,Rn;A(A)+(Rn)ADDA,Ri;A(A)+(Ri)无符号数相加无符号数相加时:若时:若C=1,(其值(其值 255 255)。)。有符号数相加有符号数相加时:若时:若OV=1OV=1,说明有溢出。说明有溢出。3.3.2算术运算类指令算术运算类指令43带进位位加法指令带进位位加法指令ADDCA,#data;A(A)+data+(CY)ADDCA,direct;A(A)+(direct)+(CY)ADDCA,Rn;A(A)+(Rn)+(CY)ADDCA,Ri;A(A)+(Ri)+(CY)ADD和和ADDC指令的目的操作数均是指令的目的操作数均是A寄存器。寄存器。ADD和和ADDC指令在执行时要影响指令在执行时要影响CY、AC、OV和和P标志位。标志位。OV仅用来判断有符号数运算是否正确。仅用来判断有符号数运算是否正确。常用常用ADD和和ADDC指令配合实现多字节加法运算。指令配合实现多字节加法运算。对于加法指令的说明对于加法指令的说明44【例例4-8】设(设(A)=28H,(,(R1)=7CH,分析执行指令,分析执行指令ADDA,R1后的结果。后的结果。001010000111110010100100结果为结果为:A=0A4H,CY=0,AC=1,P=1,OV=145【例例4-9】设双字节数设双字节数X存在片内存在片内RAM40H、41H单元,单元,Y存在存在42H、43H单元,编程求单元,编程求Z=X+Y,并存入片内,并存入片内RAM44H、45H、46H单元。(所有数据按高字节存于低地址单元的规则存放)单元。(所有数据按高字节存于低地址单元的规则存放)参考程序如下:参考程序如下:MOVA,41HADD A,43HMOV46H,AMOVA,40HADDCA,42HMOV45H,AMOV A,#00HADDCA,#00HMOV 44H,A462、减法指令、减法指令SUBBA,#data;A(A)-data-(CY)SUBBA,direct;A(A)-(direct)-(CY)SUBBA,Rn;A(A)-(Rn)-(CY)SUBBA,Ri;A(A)-(Ri)-(CY)5151指指令令系系统统只只有有带带借借位位的的减减法法指指令令,当当需需要要执执行行不不带带借借位位的的减减法法运运算算时时,可可先先通通过过“CLRC”指指令令,将将进进位位标标志志CY清零清零。SUBB指令在执行时要影响指令在执行时要影响CY、AC、OV和和P标志位。标志位。OV仅用来判断有符号数运算是否正确。仅用来判断有符号数运算是否正确。对于减法指令的说明对于减法指令的说明47【例例4-10】设(设(A)=52H,(,(R0)=0B4H,分析执行指令,分析执行指令CLRCSUBBA,R0后的结果。后的结果。010100101011010010011110结果为结果为:A=9EH,CY=1,AC=1,P=1,OV=148【例例4-11】两个双字节无符号数分别存放于寄存器两个双字节无符号数分别存放于寄存器R0R1及及R2R3中,试编程计算它们的差,结果存于寄存器中,试编程计算它们的差,结果存于寄存器R4R5中。其中中。其中R0和和R1中分别存放被减数的高中分别存放被减数的高8位和低位和低8位。位。R2和和R3中分别存放中分别存放减数的高减数的高8位和低位和低8位。差的高、低位。差的高、低8位分别存于寄存器位分别存于寄存器R4和和R5中。中。参考程序如下:参考程序如下:MOV A,R1CLRCSUBBA,R3MOV R5,AMOV A,R0SUBBA,R2MOV R4,A493、加、加1指令指令INCA;(;(A)(A)+1,以下类同。以下类同。INCRnINCdirectINCRiINCDPTRINC指令除了指令除了INCA要影响要影响P标标志位外,对其它标志位都没有影志位外,对其它标志位都没有影响。响。【例例4-12】设设(R0)=7EH,片内,片内RAM(7EH)=0FFH,(7FH)=40H(DPTR)=21FEH,分析逐条执行下列指令后各单元的内容。,分析逐条执行下列指令后各单元的内容。INCR0INCR0INCR0INCDPTRINCDPTR;使;使7EH单元的内容由单元的内容由0FFH变为变为00H;使;使R0的内容由的内容由7EH变为变为7FH;使;使7FH单元的内容由单元的内容由40H变为变为41H;使;使DPL为为FFH,DPH不变不变;使;使DPL为为00H,DPH变为变为22H504、减、减1指令指令DECA;(;(A)(A)-1,以下类同。以下类同。DECRnDECdirectDECRiDEC指令除了指令除了DECA要影响要影响P标志位外,对其它标志标志位外,对其它标志位都没有影响。位都没有影响。在在51内核单片指令系统中,内核单片指令系统中,没有没有“DECDPTR”指令指令。对于减对于减1指令的说明指令的说明515、乘、除法指令、乘、除法指令乘法指令乘法指令MULAB;(;(A)(B),),积的低积的低8位在位在A中,积的高中,积的高8位在位在;B中,中,CY总为总为0。当积。当积大于大于255时时(即(即B中不为中不为0);则;则置位置位OV标志。标志。51内核单片机乘、除法指令只针对无符号数运算。内核单片机乘、除法指令只针对无符号数运算。这两条这两条指令影响指令影响CY、OV和和P,其它标志位不受影响,其它标志位不受影响。除法指令除法指令DIVAB;(;(A)(B),),商在商在A中,余数在中,余数在B中。中。;(;(CY)总是总是0。;若除数(若除数(B)=0,则(则(OV)=1,否则(否则(OV)=0。52【例例4-13】试将试将A寄存器中的二进制数转换为寄存器中的二进制数转换为BCD码,结果的百码,结果的百位数存放于位数存放于31H单元,十位数和个位数压缩后存于单元,十位数和个位数压缩后存于30H单元。单元。参考程序如下:参考程序如下:MOV B,#100DIVABMOV 31H,AMOV A,#10XCHA,BDIVABSWAPAADDA,BMOV 30H,A53DAA;二二十进制调整指令。十进制调整指令。(A30)9 9时或(时或(ACAC)=1=1时,时,(A30)(A30)+6(A74)9 9或(或(C C)=1=1时,时,(A74)(A74)+6选择修正值的规则:选择修正值的规则:6、十进制调整指令、十进制调整指令执行过程中,执行过程中,CPU能根据加法运算后,能根据加法运算后,A中的值和中的值和PSW中的中的AC及及CY标志位的状况标志位的状况自动选择自动选择一个修正值(一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二与原运算结果相加,进行二十进制调整。十进制调整。DAA指令只能跟在加法指令后面使用。指令只能跟在加法指令后面使用。参加运算的两数是参加运算的两数是BCD码才有必要调整。码才有必要调整。54【例例4-14】设设A寄存器内存有寄存器内存有BCD码码56H,寄存器,寄存器R3内存有内存有BCD码码67H,执行,执行ADDA,R3指令后,结果应该是指令后,结果应该是123,但实际结果为:但实际结果为:0101011056+011001116710111101BDH需再执行指令需再执行指令DAA,对上面的结果进行调整,因高,对上面的结果进行调整,因高4位及低位及低4位数都大于位数都大于9,故需加,故需加66H。10111101+01100110加加66H调整调整10010001112355BCD码减法码减法方法:方法:减法可以转换为加法运算,将减数转换为减法可以转换为加法运算,将减数转换为十进制补码十进制补码,然后相加,再用然后相加,再用DAA指令进行调整。指令进行调整。例如:例如:80-30=80+-30补补=80+(100-30)=150结果中百位数字结果中百位数字1在在CY中,中,A寄存器中的寄存器中的50H即即80-30的的BCD码。码。在实际运算时,不能用一个字节表示十进制数在实际运算时,不能用一个字节表示十进制数100,可用,可用99+1表表示,即示,即10011001B+1=10011010B=9AH,因为因为9AH经过十进制调经过十进制调整后就是整后就是100。56十进制无符号数的减法运算可按以下步骤进行:十进制无符号数的减法运算可按以下步骤进行:第一步:求减数的第一步:求减数的十进制补码十进制补码(9AH-减数);减数);第二步:被减数与减数的十进制补码相加;第二步:被减数与减数的十进制补码相加;第三步:经第三步:经DAA指令调整后就得到所求的十进制减法运算结果。指令调整后就得到所求的十进制减法运算结果。【例例415】设设M1、M2、M3分别为十进制的被减数、分别为十进制的被减数、减数和减数和差的符号地址差的符号地址,编写减法运算程序。编写减法运算程序。CLRC;CY清清0MOV A,9AH;A9AHSUBBA,M2;求;求M2的十进制补码的十进制补码ADDA,M1;M1与与M2的十进制补码相加的十进制补码相加DAA;十进制调整;十进制调整MOV M3,A;差存入;差存入M3574.3.3逻辑运算指令逻辑运算指令该类指令除了带进位循环及该类指令除了带进位循环及A为第一操作数的指令影响为第一操作数的指令影响CY和和P外,其它指令不影响外,其它指令不影响PSW中的标志位。中的标志位。1.逻辑与指令逻辑与指令ANLA,#data;A(A)data,以下类同,以下类同ANLA,RnANLA,directANLA,RiANLdirect,#dataANLdirect,A【例例4-16】设当前设当前P1口输出口输出35H,使其高使其高4位输出位输出0,低,低4位不变。位不变。解;解;ANLP1,#0FH此做法称为此做法称为“屏蔽屏蔽”位。位。注意:注意:跟跟“0”相与可将该位清相与可将该位清0跟跟“1 1”相与该位保持不相与该位保持不变变582.逻辑或指令逻辑或指令ORLA,#data;A(A)data,以下类同,以下类同ORLA,RnORLA,directORLA,RiORLdirect,#dataORLdirect,A注意:注意:跟跟“1”相或可将该位置相或可将该位置1跟跟“0 0”相或该位保持不相或该位保持不变变【例例4-17】将将A中的低中的低3位送入位送入片内片内RAM30H单元低单元低3位,并位,并且保持且保持30H单元的高单元的高5位不变。位不变。解;解;ANLA,#07HANL30H,#0F8HORL30H,A这称为这称为“数位组合数位组合”。593.逻辑异或指令逻辑异或指令XRLA,#data;A(A)data,以下类同,以下类同XRLA,RnXRLA,directXRLA,RiXRLdirect,#dataXRLdirect,A注意:注意:跟跟“1”异或可取反异或可取反跟跟“0 0”异或保持不变异或保持不变【例例4-18】设(设(A)=0B5H=10110101B,执行下列操作:,执行下列操作:XRLA,#0FH;则则A的低的低4位取反,高位取反,高4位保位保持不变,(持不变,(A)=10111010B这称为这称为“指定位求反指定位求反”。604.A寄存器的清零和求反指令寄存器的清零和求反指令清零指令:清零指令:CLRA;A0求反指令:求反指令:CPLA;【例例4-18】双字节数求补码。一个双字节数求补码。一个16位正数位正数X存于存于R3(高(高8位)位)R2(低(低8位)中位)中,求求X的补码,并将结果仍存于的补码,并将结果仍存于R3、R2。参考程序如下:参考程序如下:MOVA,R2CPLAADDA,01HMOVR2,AMOVA,R3CPLAADDCA,00HMOVR3,A615.移位指令移位指令循环左移:循环左移:RLA循环右移:循环右移:RRA带进位位的循环左移:带进位位的循环左移:RLCA带进位位的循环右移:带进位位的循环右移:RRCAA.0A.7A.0A.7A.0A.7CYA.0A.7CY循环移位只能对循环移位只能对A寄存器进行,每次只能移动一位寄存器进行,每次只能移动一位对于某些数左移一位相当于乘以对于某些数左移一位相当于乘以2,右移一位相当于,右移一位相当于除以除以2。624.3.4控制转移类指令控制转移类指令作用:改变程序计数器作用:改变程序计数器PC的值,从而改变程序执行方向。的值,从而改变程序执行方向。分为四大类:分为四大类:无条件转移指令;条件转移指令;子程序调无条件转移指令;条件转移指令;子程序调用指令;返回指令。用指令;返回指令。1、无条件转移指令、无条件转移指令LJMPaddr16AJMPaddr11SJMPrelJMPA+DPTR63长转移指令长转移指令长转移指令长转移指令LJMPaddr16;转移目的地址转移目的地址PCaddr16,0000HFFFFH,64KB 长转移指令:长转移指令:长转移指令:长转移指令:LJMPAAAAHLJMPAAAAH;AAAAHAAAAHPCPCPC=0000HPC=0000HPC=AAAAHPC=AAAAH0000H0000H0001H0001HAAA9HAAA9HAAAAHAAAAH0002H0002H假设执行该指假设执行该指令前,令前,PCPC的值的值为为0000H0000H。注意注意注意注意:该指令可以转移到该指令可以转移到该指令可以转移到该指令可以转移到64 KB64 KB64 KB64 KB程序存储器中的任意位置。程序存储器中的任意位置。程序存储器中的任意位置。程序存储器中的任意位置。64绝对转移指令绝对转移指令绝对转移指令绝对转移指令PC高高5位位(保持不变保持不变)PC低低11位位A10A9A800 001A7A6A5A4A3A2A1A0操作码操作码(第一字节第一字节)操作数操作数(第二字节第二字节)程序计程序计数器数器PCAJMPAJMPaddr11addr11;PC+2PC+2PCPC,addr11addr11PC.10PC.0PC.10PC.0转移目的地址与(转移目的地址与(PC)+
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服