收藏 分销(赏)

MCS-51单片机指令系统和汇编语言程序示例.pdf

上传人:曲**** 文档编号:13304414 上传时间:2026-02-26 格式:PDF 页数:137 大小:14.66MB 下载积分:12 金币
下载 相关 举报
MCS-51单片机指令系统和汇编语言程序示例.pdf_第1页
第1页 / 共137页
MCS-51单片机指令系统和汇编语言程序示例.pdf_第2页
第2页 / 共137页


点击查看更多>>
资源描述
#肆 2经“单上人述 金逢典也 泣健诲1青厘 毛M 粉*8*械CS-51臬,元软了,髭和汇编得雷殁唐示例3.1 MCS-51单片机指令系统概述3.2 寻址方式3.3 数据传送类指令3.4 算术运算类指令3.5 逻辑运算及移位指令3.6 控制转移类指令3.7 子程序调用与返回指令3.8 位操作类指令3.9 汇编程序格式与伪指令3.10 汇编程序设计示例si%s-夕单片机招令系疡和汇编语言程序示例3.1 MCS61单片机指令系统概述3.1.1 指令、指令系统的概念指令是使计算机内部执行的一种操作,提供给用户编程使用 的一种命令。由构成计算机的电子器件特性所决定,计算机只能 识别二进制代码。以二进制代码来描述指令功能的语言,称之为 机器语言。由于机器语言不便被人们识别、记忆、理解和使用,因此给每条机器语言指令赋予助记符号来表示,这就形成了汇编 语言。也就是说,汇编语言是便于人们识别、记忆、理解和使用 的一种指令形式,它和机器语言指令一一对应,也是由计算机的 硬件特性所决定的。第M至阳至-57单片机捐令系疣和汇编语言程序示例,计算机能够执行的全部操作所对应的指令集合,称为这种 计算机的指令系统。从指令是反应计算机内部的一种操作来看,指令系统全面展示出了计算机的操作功能,也就是它的工作原 理;从用户使用的角度来看,指令系统是提供给用户使用计算 机功能的软件资源。要让计算机处理问题,首先要编写程序。编写程序实际上是从指令系统中挑选一个指令子集的过程。因 此,学习指令系统既要从编程使用的角度掌握指令的使用格式 及每条指令的功能;又要掌握每条指令在计算机内部的微观操 作过程,即工作原理,从而进一步加深对硬件组成原理的理解。M李阳纥-夕单片机器令系饶和汇编语言程序示例都指令一般有功能、时间和空间三种属性。功能属性是指每 条指令都对应一个特定的操作功能;时间属性是指一条指令执 行所用的时间,一般用机器周期来表示;空间属性是指一条指 令在程序存储器中存储所占用的字节数。这三种属性在使用中 最重要的是功能,但时间、空间属性在有些场合也要用到。如 一些实时控制应用程序中,有时需要计算一个程序段的确切执 行时间或编写软件延时程序,都要用到每条指令的时间属性;在程序存储器的空间设计,或相对转移指令的偏移量计算时就 要用到指令的空间属性。方回至 他坐二迅多先但尊史嚏典也泣健诲1壅厘去曳 w指令的描述形式有两种:机器语言形式和汇编语言形式。现在描述计算机指令系统及实际应用中主要采用汇编语言形式。采用机器语言编写的程序称之为目标程序。采用汇编语言编写 的程序称之为源程序。计算机能够直接识别并执行的只有机器 语言。汇编语言程序不能被计算机直接识别并执行,必须经过 一个中间环节把它翻译成机器语言程序,这个中间过程叫做汇 编。汇编有两种方式:机器汇编和手工汇编。机器汇编是用专 门的汇编程序,在计算机上进行翻译;手工汇编是编程员把汇 编语言指令逐条翻译成机器语言指令。现在主要使用机器汇编,但有时也用到手工汇编。M李阳纥-夕单片机器令系饶和汇编语言程序示例都3.1.2 MCS-51单片机指令系统及其指令格式MCS-51单片机指令系统具有功能强、指令短、执行快等特 点,共有H1条指令。从功能上可划分成数据传送、算术操作、逻辑操作、程序转移位操作等五大类;从空间属性上分为单字 节指令(49条)、双字节指令(46条)和最长的三字节指令(只有16 条)。从时间属性上可分成单机器周期指令(64条)、双机器周期 指令(45条)和只有乘、除法两条4个机器周期的指令。可见,MCS-51单片机指令系统在存储空间和执行时间方面具有较高的 效率。si阳生-夕单片机相令系疡和汇编谙言程序示例指令系统中的指令描述了不同的操作,不同操作对应不同 的指令。但结构上,每条指令通常由操作码和操作数两部分组 成。操作码表示计算机执行该指令将进行何种操作,操作数表 示参加操作的数的本身或操作数所在的地址。MCS-51单片机 的指令有无操作数、单操作数、双操作数三种情况。汇编语言 指令有如下的格式:标号:操作码助记符目的操作数电源操作数;注释司四孝.2经“单上也卷金嚏典犯氾肉便 室驾之 先例蒯指令系统中的指令描述了不同的操作,不同操作对应不同 的指令。但结构上,每条指令通常由操作码和操作数两部分组 成。操作码表示计算机执行该指令将进行何种操作,操作数表 示参加操作的数的本身或操作数所在的地址。MCS-51单片机 的指令有无操作数、单操作数、双操作数三种情况。汇编语言 指令有如下的格式:标号:操作码助记符目的操作数,源操作数;注释M李阳纥-夕单片机器令系饶和汇编语言程序示例为便于后面的学习,在这里先对描述指令的一些符号的约 定意义作以说明:(1)Ri和Rn:表示当前工作寄存器区中的工作寄存器,i取 0或1,表示R0或RI。n取07,表示R0R7。(2)#data:表示包含在指令中的8位立即数。(3)#datal6:表示包含在指令中的16位立即数。(4)rel:以补码形式表示的8位相对偏移量,范围为-128127,主要用在相对寻址的指令中。阳纥-夕单片机器令系饶和汇编语言程序示例 事什-二-二-福(5)addrl6和addrll:分别表示16位直接地址和H位直接地址。(6)direct:表示直接寻址的地址。(7)bit:表示可位寻址的直接位地址。(8)(X):表示X单元中的内容。(9)(X):表示以X单元的内容为地址的存储器单元内容,即(X)作地址,该地址单元的内容用(X)表示。(10)/和一符号:“表示对该位操作数取反,但不影响该 位的原值。表示操作流程,将箭尾一方的内容送入箭头 所指另一方的单元中去。M左阳纪目单片机捐令系疣和汇编语言程序示例3.2 寻址方式3.2.1立即寻址操作数直接出现在指令中,紧跟在操作码的后面,作为指令 的一部分与操作码一起存放在程序存储器中,可以立即得到并执 行,不需要经过别的途径去寻找,故称为立即寻址。汇编指令中,在一个数的前面冠以r符号作前缀,就表示该数为立即寻址。例如:MOV A,#30H指令中30H就是立即数。这一条指令 的功能是执行将立即数30H传送到累加器A中的操作。该指令操作 码的机器代码为74H,占用一个字节存储单元,立即数30H存放在 紧跟在其后的一个字节存储单元,成为指令代码的一部分。整条 指令的机器码为74H 30H。都&M至阳纥-夕单片机器令系饶和汇编语言程序示例3.23 寄-,在指令选定的某寄存器中存放或读取操作数,以完成指令规 定的操作,称为寄存器寻址。例如:MOV A,R0指令中源操作数和目的操作数都是寄存 器寻址。该指令的功能是把工作寄存器R0中的内容传送到累加器A 中,如R0中的内容为30H,则执行该指令后A的内容也为30H。寄存器寻址按所选定的工作寄存器R0R7进行操作,指令机器 码的低3位的八种组合ooo,ooi,,no,in分别指明所用的工 作寄存器RO,R1,,R6,R7o 如:MOVA,Rn(n=07),这8条 指令对应的机器码分别为E8HEFH。在汇编指令中,累加器A作为寄存器寻址的操作数,但在机器 码中无需指明,立由潮作和隋令-孝阳纥-夕单片机器令系饶和汇编语言程序言例3.2.3 寄存器间接寻址都由指令指出某一寄存器的内容作为操作数地址的寻址方法,称为寄存器间接寻址。这里需要强调的是:寄存器中的内容不是 操作数本身,而是操作数的地址,到该地址单元中才能得到操作 数。寄存器起地址指针的作用。例如:MOVA,R1指令的源操作数是寄存器间接寻址。该 指令的功能是将以工作寄存器R1中的内容为地址的片内RAM单元 的数据传送到A中去。例如:若R1中的内容为80H,片内RAM地 址为80H的单元中的内容为2FH,则执行该指令后,片内RAM 80H单元的内容2FH被送到A中。寄存器间接寻址示意图如图3.1所巽第M至如S-57单片机相令系疫和汇编语言程信示例图3.1寄存器间接寻址示意图.对经“单先但尊金逢典 也谴 10H,(1OHOOH(P1CAH,分析以下程序执行后各单元及寄存器、P2 口的内容。MOV R0,#3 OHMOV A,R0MOV RI,AMOV B,R1MOV R1,PlMOV P2,PlMOV 10H,#20H;(RO)-30H;(A)一(RO);(Rl)-(A);(B)T(R1);(Rl)K(Pl);(P2)-(P1);(1 OH)-20H执行上述指令后的结果为:(RO尸30H,(Rl)=(A)=40H,(B)=10H,(4OH)=(P1)=(P2)=CAH,(10H)=20Ho瑞芦H至一遥经“争先但尊金步鬼在 鱼1驾4蒯3.3.2 片内特殊传送指令1.堆栈操作指令堆栈操作有进栈和出栈,即压入和弹出数据,常用于保存或 恢复现场。进栈指令用于保存片内RAM单元(低128字节)或特殊 功能寄存器SFR的内容;出栈指令用于恢复片内RAM单元(低128 字节)或特殊功能寄存器SFR的内容。该类指令共有如下两条指令:M李阳纥-夕单片机器令系饶和汇编语言程序示例都PUSH direct;(SP)(SP)+1修改指针,使其指向栈顶上的一个存数单元 bsp)direct把直接地址单元的内容压入SP所指单元内(direct)(SP)+1)把栈顶的数据弹出到直接寻址单元中去POP direct;(SP)一(SP)-l修改指针,指向新栈顶这两条指令都是双字节指令,机器码分别为:CO direct 和DO direct oM李阳纥-夕单片机器令系饶和汇编语言程序示例建例2若在外部程序存储器中2000H单元开始依次存放09的平 方值,数据指针(DPTR)=3A00H,用查表指令取得2003H单元的 数据后,要求保持DPTR中的内容不变。完成上述功能的程序如下:MOV A,#03HPUSH DPHPUSH DPLMOV DPTR,#2000HMOVC A,A+DPTRPOP DPLPOP DPH;(A)-03H;保护DPTR高8位入栈;保护DPTR低8位入栈;(DPTR)-2000H;(A)一(2000H+03H);弹出DPTR低8位;弹出DPTR高8位执行结果:(A)=09H,(DPTR)=3A00Ho2.数据交换指令数据传送指令一般都是将操作数自源地址单元传送到目 的地址单元,指令执行后,源地址单元的操作数不变,目的 地址单元的操作数则修改为源地址单元的操作数。交换指令 数据作双向传送,涉及传送的双方互为源地址、目的地址,指令执行后每方的操作数都修改为另一方的操作数。因此,两操作数均未冲掉、丢失。数据交换指令共有如下5条指令:名经“单生但尊金小鬼也 已健诲 相唉 毛则都指令助记符XCH A,directXCH A,RiXCH A,RnXCHD A,RiSWAP A操作功能注释;(A)(direct);(A)”(Ri);(A)一(Rn);(A3o)一(Ri)3o;(A7 4)一(A3 o)机器码(H)C5 directC6 C7C8 CFD6、D7C5 direct例3 设(R0)=30H,30H=4AH,(A)=28H,贝执行XCH A,R0后,结果为(A)=4AH,(30H)=28Ho执行XCHD A,R0后,结果为(A)=2AH,(30H)=48H。执行SWAP A后,结果为(A)=82H。瑞芦占主 迫怨二怒史L尊金嚏丸W立级至1驾之 毛fN3.3.3 片外数据存储器数据传送指令MCS-51单片机CPU对片外扩展的数据存储器RAM或I/O 口进 行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来 完成。这类指令共有以下4条单字节指令,指令操作码助记符都为 MOVX。指令助记符MOVX A,DPTRMOVX A,Ri MOVX DPTR,A MOVX Ri,A机器码(H)E6E2、E3FOF2、F3操作功能注释;(A)一(DPTR);(A)一(Ri);(DPTR)一(A);(Ri)-(A)舞法 迫给二剑臬史!淮 令逢鬼也江邈遹 OFHo相应的程序如下:MOV A,#09HADD A,#0FHMOVC A,A+PC;(A)-09H;用加法指令进行地址调整;(A)一(A)+(PC)+1)执行结果为:(PC)=1FF1H,(A51Ho如果用以DPTR为基址寄存器的查表指令,其程序如下:MOV DPTR,2000HMOV A,09H;置表首地址MOVC A,A+DPTR为孝 必经“单先蛆尊宪嚏典在近更至1 nA去五3.4算术运算类指令3.4.1 力口、减法指令操作码助记符源操作数目的操作数操作码助记符操作数不带进位加法指令:带进位加法指令:带借位减法指令:ADDADDCSUBB#dataRn Ri direct加1指令:减1指令:(b)图3.4加减法指令形式结构图 加城法指令关系图;(b)加编祥?孝 邈经“单身!述 金逢逸 也氾卷遹室驾员,M表3.2加减法指令表指令助记符操作功能注释机器码(H)字节数机器 周期数ADD A,#data(A)(A)+data24 data21ADD A,Rn(A)-(A)+(Rn)n=O,l,7282F11ADD A,Ri(A)-(A)+(Ri)i=0 或 126、2711ADD A,direct(A)-(A)+(direct)25 direct21ADDC A,#data(A)-(A)+data+CY34 data21ADDC A,Rn(A)-(A)+(Rn)+CY n=O,l,7383F11ADDC A,Ri(A)-(A)+(Ri)+CY i=0 或 136、3711ADDC A,direct(A)-(A)+(direct)+CY35 direct21SUBB A,#data(A)-(A)-dataCY94 data21SUBB A,Rn(A)-(A)-(Rn)-CY n=OJ,7989F11SUBB A,Ri(A)-(A)-(Ri)-CY i=0 或 196、9711SUBB A,direct(A)-(A)(direct)CY95 direct21INC A(A)r A)+10411INC Rn(Rn)(Rn)+1 n=OJ,708 OF11INC Ri(Ri)-(Ri)+1 i=0 或 106、071;1INC direct(direct)*(direct)+105 direct22INC DPTR(DPTR)-(DPTR)+1A311DEC A(A)-(A)-11411DEC Rn(Rn)-(Rn)-1 n=O,l,7181F11DEC Ri(Ri)(Ri)1 i=0 或 116、1711bnrtlDEC direct(direct)(direct)-115 direct22瑞声H孝经“单先但尊宪嚏典 也 氾肉便J驾之 虫M 卓例6设(A)=49H,(R0)=6BH,分析执行指令ADD A,RO正 的结果。结果为:(A)=B4H,OV=1,CY=0,AC=1,P=0。例7设(A尸C3H,数据指针低位(DPL尸ABH,CY=1,分析 执行指令ADDCA,DPL后的结果。结果为:(A尸6FH,CY=1,AC=0,P=0。例8设(A)=52H,(R0)=B4H,分析执行如下指令后的结果CLRC;是位操作指令,是进位位清零SUBB A,R0结果为:(A尸9EH,CY=1,AC=1,OV=1,P=L都簪法名给二号先但尊金嚏逸也 泣健诲1青唉 毛刊例 9 设(R0)=7EH,(7EH)=FFH,(7FH)=38H,(DPTR)=1OFEH,分析逐条执行下列指令后各单元的内容。INC R0;使7EH单元内容由FFH变为OOHINC RO;使R0的内容由7EH变为7FHINC R0;使7FH单元内容由38H变为39HINC DPTR;使DPL为FFH,DPH不变INC DPTR;使DPL为OOH,DPH为 UHINC DPTR;使DPL为01H,DPH不变隼工重 必经“单身!述 金逸逸 也用J遗言强左翦例3.4.2 十进制调整指令DA A;j若(Ah。9或(AC)=1,则(A.一(Abo+O6H 若(A)749或(CY尸 1,则(A)74-(A)74+06H若AC=1,CY=1同时发生,或者高4位虽等于9但低4位修正 后有进位,则A应加66H修正。十进制调整指令是一条对二-十进制的加法进行调整的指令。它是一条单字节指令,机器码为D4H。两个压缩BCD码按二进制 相加,必须在加法指令ADD、ADDC后,经过本指令调整后才能 得到正确的压缩BCD码和数,实现十进制的加法运算。M孝一学经“单上班箜空逸逸 台化J造 宜相厘 毛fL 却例10对BCD码力口法65+58-DBH,进行十进制调整。参考程序如下:MOV A,#65H;(A)-65ADD A,#58H;(A)(A)+58DA A;十进制调整si%s-夕单片机招令系疡和汇编语言程序示例执行结果:(A)=(23)bcd,(CY)=1,即 65+58=123。01100101 65+01011000101111014-01100110n I0010001158BDH加66H调整123使用时应注意:DA指令不能对减法进行十进制调整。做减 法运算时,可采用十进制补码相加,然后用DAA指令进行调整。例如70-20=70+20补=70+(100-20)=70+80=1 50机内十进制补码可采用:x补=9AH-|x例11设片内RAM30H,31H单元中分别存放着两位BCD码 表示的被减数和减数,两数相减的差仍以BCD码的形式存放在 32H单元中。可用下面的程序实现:CLRCMOVA,#9AHSUBB A,31H;求减数的十进制补码ADDA,30H;作十进制补码加法DAA;进行BCD调整MOV32H,A;将BCD码的差送存32H单元假港阳纥一夕单片机器令系饶和汇编语言程序示例3.4.3 乘、除法指令都MUL AB;(B)-(A)X(B)158(A)一(A)X(B)70 机器码:A4H、CY-0乘法指令的功能是把累加器A和寄存器B中的两个8位无符号 数相乘,将乘积16位数中的低8位存放在A中,高8位存放在B中。若乘积大于FFHQ55),则溢出标志0V置1,否则OV清零。乘法 指令执行后进位标志CY总是零,即CY=O。第M李及4S-夕单片机捐令系疣和汇编语言程序示例都2.除法指令DIV AB;J(A)-(A)+(B)之商,(B)-(A)+(B)之余数(CY)-0,(OV)-O机器码:84H除法指令的功能是把累加器A中的8位无符号整数除以寄存 器B中的8位无符号整数,所得商存于累加器A中,余数存于寄 存器B中,进位标志位CY和溢出标志位OV均被清零。若B中的 内容为0时,溢出标志OV被置1,即OV=1,而CY仍为0。.第M李阳任57单片机器令系疫以汇播错等梃格不倒3.5 逻辑运算及移位指令操作码助记符源操作数目的操作数“异或”指令:“与”指令:“或”指令:操作码助记符源操作数目的操作数图3.5逻辑指令形式结构图(a)与加、减法指令寻址方式相同的逻辑指令;(b)与加、减法指令寻址方式不同的逻辑指令寄M至阳军-夕单片机器令系饶和汇编语言程序示例都表3.3逻辑操作指令表指令助记符操作功育m注释机器码(H)字节数机器 周期数ANLA,#data(A)(A)A data54 data21ANLA,Rn(A)-(A)A(Rn)n=O,l,7585Fg 11ANLA,Ri(A)-(A)A(Ri)i=0 或 156、5711ANLA,direct(A)-(A)A(direct)55 direct 1 11ANLdirect,A(direct)(direct)A(A)52 direct)2!1ANLdirect,#data(direct)(direct)Adata53 direct data32ORLA,#data(A)(A)V data44 data21ORLA,Rn(A)-(A)V(Rn)n=0,748UF11ORLA,Ri(A)-(A)V(Ri)i=0 或 146、4711ORLA,direct t J(A)-(A)V(direct)45 direct21ORLdirect,A(direct)(direct)V(A)42 direct21ORLdirect,#data(direct)(direct)Vdata43 direct data32寄M至阳军-夕单片机器令系饶和汇编语言程序示例都表3.3逻辑操作指令表XRLXRLA,#dataA,Rn(A)(A)data(A)-(A)(Rn)n=O,l,764 data68WF211LXRLA,Ri(A)-(A)(Ri)1=0 或 166、67;II.XRLA,direct(A)(A)(direct)65 directI 1 1XRLdirect,A(direct)*-(direct)(A)62 directi!1XRLdirect,#data(direct)(direct)data63 direct data32CPLA(A)-A取反F411CLRA:(A)一。累加器AE4J1RLA不带进位左移E 至231 i.1 iL一,累加器ARRA不带进位右移03I1累加器ARLCA带进位左移KB133J I1累加器ARRCA带进位右移1311例12(PlC5H=11000101B,屏蔽Pl 口高4位而保留低4位。执行指令:ANL Pl,#OFH结果为:(PD=05H=00000101B。逻辑“或”指令常用来使字节中某些位置”:T,其它位保 持不变。则欲置位的位用”1”与该位相或,保留不变的位用“0 与该位相或。都M李阳纥-夕单片机器令系饶和汇编语言程序示例例 13 若(A尸COH,(R0)=3FH,(3FH尸OFH,执行指令:ORL A,R0结果为:(AACFH=noonnB。逻辑“异或指令常用来使字节中某些位进行取反操作,其 它位保持不变。欲某位取反该位与相异或;欲某位保留则该 位与“0”相异或。还可利用异或指令对某单元自身异或,以实现 清零操作。强M至阳生-夕单片机器令系饶和汇编语言程序示例都例14若(A尸B5H=10H0101B,执行下列操作:XRL A,#OFOH;A的高4位取反,低4位保留,(A)=01000101B=45HMOV 30H,A;(30H)=45HXRL A,30H;自身异或使A清零用移位指令还可以实现算术运算,左移一位相当于原内容 乘以2,右移一位相当于原内容除以2,但这种运算关系只对某 些数成立(请读者自行思考)。第M点如CS-57单片机猾令系疣和汇褊语言福海示例例 15 设(A)=5AH=90,且CY=O,则执行指令RL A后,(A尸B4H=90。执行指令RR A后,(A)=2DH=45。执行指令RLC A后,(A尸B4H=90。执行指令 RRCA后,(A)=2DH=45。瑞符H至 型怨二常无的尊金小鬼西亚遹登,则3.6 控制转移类指令3.6.1 无条件转移指令表3.4无条件转移指令指令助记符操作功能注释:机器码(H):字节数机器 周期数LJMP addrl6(PC)*(PC)+3(PC)-addrl 602 addh58 add”3.iAJMP addrl i(PC)(PC)+2(PCg)-addrlla loaga8OOOOl addr7o12SJMP rel(PC)-(PC)+2(PC)*-(PC)+rel80 reli t2JMP A+DPTR(PC)-(A)+DPTR73123%经“单上如尊金小嵬台注电磴室驾员毛刊翻1.LJMP(长转指令)LJMP指令执行后,程序无条件地转向16位目标地址(addrl6)处执行,不影响标志位。由于指令中提供16位目标地 址,所以执行这条指令可以使程序从当前地址转移到64KB程 序存储器地址空间的任意地址,故得名为“长转移”。该指令的 缺点是执行时间长,字节多。si阳纥一夕单片机猾令系疣和汇编语言程图示例2.AJMP(绝对转移指令)都AJMP的机器码是由n位直接地址addrll和指令操作码00001,按下列分布组成的:a10 a9 a8 0 0 0 0 1a7 26 24 23 a?a。该指令执行后,程序转移的目的地址是由AJMP指令所在位置 的地址PC值加上该指令字节数2,构成当前PC值。取当前PC值的 高5位与指令中提供的H位直接地址形成转移的目的地址,即转移目的地址(PC)PC15 PC14 PC13 PC12 PCna10 a9 a8 a7 a6 a5 a4 a3 a2 为 a0M李阳纥-夕单片机器令系饶和汇编语言程序示例e由于n位地址的范围是00000000000uiiniini,即2KB范围,而目的 地址的高5位是由PC当前值,所以程序可转移的位置只能是和PC当前值在同一 2KB范围内。本指令转移可以向前也可以向后,指令执行后不影响状态标志 位。例如:若AJMP指令地址(PC尸2300H。执行指令AJMP 0FFH后,结果为:转移目的地址(PC尸20FFH,程序向前转到20FFH单元开始执行。又如:若AJMP指令地址(PC尸2FFFH。执行指令AJMP 0FFH后,结果为:转移目的地址(PC尸30FFH,程序向后转到30FFH单元开始执行。由上可见:若addrll相同,贝IJAJMP指令的机器码相同,但转移的目的地址却可能不同,这是因为转移的目的地址是由PC当前值的高5位与adckll共同决定的。都为M李阳纥-夕单片机猾令系疣和汇编语言程图示例3.SJMP(相对短转指令)指令的操作数用8位带符号数补码表示,占指令的一个字 节。因为8位补码的取值范围为-128+127,所以该指令的转移 范围是:相对PC当前值向前转128字节,向后转127字节。即转移目的地址=SJMP指令所在地址+2+rel如在2100H单元有SJMP指令,若rel=5AH(正数),则转移目 的地址为215cH(向后转);若rel=FOH(负数),则转移目的地址 为20F2H(向前转)。M孝久S-夕单片机招令系疡和汇编语言程序示例 感用汇编语言编程时,指令中的相对地址rel往往用欲转移至的 地址的标号(符号地址)表示。机器汇编时,能自动算出相对地址 值;但手工汇编时,需自己计算相对地址值rel。rel的计算公式如 下:向前转移:rel=FEH-(SJMP指令地址与目的地址差的绝对值)向后转移:rel=FEH-(SJMP指令地址与目的地址差的绝对值)-2若rel=FEH,即目的地址就是SJMP指令的地址,在汇编指令 中的偏移地址可用$符号表示。若在程序的末尾加上SJMP$(机 器码为80FEH),则程序就不会再向后执行,造成单指令的无限循 环,进入等待状态。一.一.h一 二;-三 _ _-.-y =-_ 一 4.JMPA+DPTR(相对长转移指令)它是以数据指针DPTR的内容为基址,以累加器A的内容 为相对偏移量,在64 KB范围内无条件转移。该指令的特点是 转移地址可以在程序运行中加以改变。例如,当DPTR为确定 值,根据A的不同值就可以实现多分支的转移。该指令在执行 后不会改变DPTR及A中原来的内容。右湾迫给二型史!述 金小逸 在KJ遗 -D;(CY)-BVD;运算结果送入Pl.5RETPkOPL1Pl.2PL3Pl.4PL5图3.6硬件逻辑电路图瑞静H至 图里“争先也卷 宪嚏鬼 衣 氾肉接1羽遹 13.9 汇编程序格式与伪指令1.汇编程序格式汇编程序是指令系统的一个子集,只要指令按格式书写就 构成了程序的基本格式。在程序中指令书写具有如下格式:标号:操作码助记符源操作数,目的操作数;注释标号用在指令的前边,必须跟“:,表示符号地址。一般在程序中有特定用途的地方加标号,如转移目标执行指令的前面 需加标号,并不是所有指令前面都需要加标号。si%s-夕单片机招令系疡和汇编语言程序示例2.伪指令伪指令不要求计算机做任何操作,也没有对应的机器码,不产生目标程序,不影响程序的执行,仅仅是能够帮助进行汇 编的一些指令。它主要用来指定程序或数据的起始位置,给出 一些连续存放数据的地址或为中间运算结果保留一部分存储空 间以及表示源程序结束等等。不同版本的汇编语言,伪指令的 符号和含义可能有所不同,但基本用法是相似的。下面介绍几 种常用的伪指令。都M李阳纥-夕单片机器令系饶和汇编语言程序示例1)设置目标程序起始地址伪指令ORG格式:符号:ORG地址(十六进制表示)该伪指令的功能是规定其后面的目标程序或数据块的起始 地址。它放在一段源程序(主程序、子程序)或数据块的前面,说 明紧跟在其后的程序段或数据块的起始地址就是ORG后面给出 的地址。例如:ORG 2000HSTART:MOV A,#7FHM李阳纥-夕单片机器令系饶和汇编语言程序示例都2)结束汇编伪指令END格式:符号:ENDEND是汇编语言源程序的结束标志,表示汇编结束。在 END以后所写的指令,汇编程序都不予处理。一个源程序只 能有一个END命令,否则就有一部分指令不能被汇编。如果 END前面加标号的话,则应与被结束程序段的起始点的标号 一致,以表示结束的是哪一个程序段。M李阳纥-夕单片机器令系饶和汇编语言程序示例都3)定义字节伪指令DB格式:标号:DB项或项表其中项或项表指一个字节数据,用逗号分开的字节数据串,或以引号括起来的字符串。该伪指令的功能是把项或项表的数 据(字符串按字符顺序以ASCII码)存入从标号地址开始的连续 存储单元中。例如:ORG 2000HTABI:DB 30H,8AH,7FH,73DB 5,A,BCDM李阳纥-夕单片机器令系饶和汇编语言程序示例 嘲由于ORG 2000H,所以TAB1的地址为2000H,因止匕 以上伪指令经汇编后,将对2000H开始的连续存储单元赋值:(2000H 尸 30H(2001H)=8AH(2002H)=7FH(2003H)=49H(2004H)=35H(2005H)=41H(2006H 尸 42H(2007H)=43H(2008H 尸 44H;十进制数73以十六进制数存放;35H是数字5的ASCII码;41H是字母A的ASCII码;42H是字符串BCD中B的ASCII码;43H是字符串BCD中C的ASCII码;44H是字符串BCD中D的ASCII码si阳生-夕单片机猾令系疡和汇编语言程序示例4)定义字伪指令DW格式:标号:DW项或项表DW伪指令与DB相似,但用于定义字的内容。项或项表指所 定义的一个字(两个字节)或用逗号分开的字串。汇编时,机器自 动按高8位先存入,低8位在后的格式排列。例如:ORG 1500HTAB2:DW 1234H,80H汇编以后:(1500H尸 12H,(1501H)=34H,(1502H)=00H,(1503H)=80H都净对 避空“单先但尊宪嚏典也江曼诲 *参考程序如下:MOV RO,#ADR1MOV RI,#ADR2MOV R2,#L CLR CLOOP:MOV A,R0;通过RO间址,取得被加数的一;个字节ADDC A,R1;通过R1间址,取得加数的一个字;节,与被加数的相应字节相加MOV R0,A;加得的和通过R0间址放回原被;加数单元INC R0;修改指针,指向下一个相加的数INC R1DJNZ R2,LOOP;循环实现多字节数相加M李阳纥-夕单片机器令系饶和汇编语言程序示例例23将RI、R2、R3、R4四个工作寄存器中的BCD码数据 依次相加,要求中间计算结果与最后的和都仍为BCD码,且存 入片内RAM。设四个工作寄存器中的BCD码数据相加后其和仍为2位BCD 码,无溢出;(R1)+(R2)后的和存入片内RAM的30H单元,再加(R3)后的和存入31H单元,总的和存入32H单元。则主程序为:ORG 0050HMOV RO,#30HMOV A,RI都簪法名给二号先但尊金嚏逸也 泣健诲1青唉 毛刊ADD A,R2ACALL SUBADD A,R3ACALL SUBADD A,R4ACALL SUB子程序为:ORG 01A0H;(R1)+(R2);调用子程序进行BCD调整,并存和;(R1)+(R2)+(R3);(R1)+(R2)+(R3)+(R4);十进制调整与存和子程序SUB:MOV R7,A;保护累加器A的内容,以便返回主程序继续使用DA AMOV R0,A;把当前和调整成BCD码后存入R0所指单元INC RO;调整地址指针MOV A,R7;恢复累加器A的内容,使A中仍为调用子程序时的和RET;返主M李阳纥-夕单片机器令系饶和汇编语言程序示例都例24使双字节数依次右移1位。设该双字节数的高字节已在工作寄存器R2中,低字节已在累 加器A中,则下列程序可满足要求:SETB C;C预置 1XCH A,R2;R2与A内容交换,高字节进AJB A.7,ELSE;A.7(原R2第7位)为1转,否则C清零CLR CELSE:RRC A;A(原R2内容)带C循环右移1位,移位后原R2第7位的值;保持不变,原R2零位则进CXCH A,R2;移位后原R2内容自A交换回R2,A内容自R2交换回A,;准备移位RRC A;低字节带C(原R2零位)循环右移1位,A.0则移入C后丢失依次右移1位相当于原数除以2。程序中开始时将C置1,以 后又根据R2第7位是否为1而进行分支,目的是用C的值使R2第7 位保持不变,使该程序段可适合于处理带符号的双字节数。都赞M孝阳军一夕单片机器令系饶和汇编语言程序示例例25多字节数求补。设该多字节数由低字节到高字节依次存放在片内RAM的以 30H为起始地址的区域中,求补后放回原处,则相应的程序为:ORG 1000HMOV R2,#LHMOV RO,#3OHMOV A,R0CPL AADD A,#1 MOV R0,ADEC R2;R2作循环计数器,放置待处理字节数;R0作为地址指针,指向待处理首数的地址;自片内RAM 30H单元取最低字节;最低字节取反;求补时最低字节取反后再加1;最低字节取反后送存;已处理一个字节,待处理字节数减1强M至阳生-夕单片机器令系饶和汇编语言程序示例都NEXT:INC RO;调整地址指针,指向下一个字节MOV A,R0;取下一个字节CPL A;非最低字节求补时只需取反ADDC A,#0;本条指令真正用意是计及处理前一个字节时可能有的进位MOV R0,A;本字节处理后送存DJNZ R2,NEXT;循环处理多字节求补用工至 如S-夕单上逆述 先逢逸也五维 直相遹毛f七.种一例茄讦自前Mi入南季审中正薮、负薮、零的个数。海设RO、RI、R2三个工作寄存器分别为统计正数、负数、零的 个数的计数器。完成本任务的流程框图如图3.8所示。图3,gJ列26流程框图-一 一 一 l-一邓M李阳军一夕单片机器令系饶和汇编语言程序示例START:CLR AMOV RO,AMOV RI,AMOV R2,AENTER:MOV A,PlJZ ZEROJB P1.0,NEGINC ROSJMP ENTERZERO:INC R2;自Pl 口取一个数;该数为0,转ZERO;该数为负,转NEG;该数不为0、不为负,;循环自P1 口取数;零计数器加1则必为正数,R0内容加1SJMP ENTERNEG:INC RI;负数计数器加1SJMP ENTERM李阳纥-夕单片机器令系饶和汇编语言程序示例例27双字节无符号数乘法子程序设计。都算法:两个双字节无符号数分别放在R7、R6和R5、R4中。由于MCS-51单片机指令中只有8位数的乘法指令MUL,用它来 实现双字节数乘法时,可把乘数分解为:(R7)(R6)=(R7)28+(R6)(R5)(R4)=(R5)28+(R4)则这两个数的乘积可表示为:(R7)(R6)(R5)(R4)=(R7)28+(R6)(R5)28+(R4)=(R7)(R5)216+(R7)(R4)28+(R6)(R5)28+(R6)(R4)=(R04)(R03)(R02)(ROI)显然,我们将(R6)(R4)放入(R()2)(R0i)中,将(R7)(R4)和(R6)(R5)累加到(R03)(R02)中,再将(R7)(R5)累加到(RO,(R()3)中即可得至U乘积结果。入口:(R7R6户被乘数,(R5R4)=乘数,(R0户乘积的低位 字节地址指针。出口:(R0)=乘积的高位字节地址指针,指向32位积的高8位。工作寄存器:R3、R2存放部分积,R1存放进位位。都si阳纥一夕单片机猾令系疣和汇编语言程图
展开阅读全文

开通  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 

客服