第3章89S51单片机指令系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020/4/1913.1指令格式和寻址方式3.2指令分类介绍3.351指令系统汇总第3章指令系统单片机原理及应用一、汇编语言指令格式:[标号:]操作码操作数1,操作数2[;注释]换行表示一条指令结束。例:LOOP:MOVA,#40H;取参数1.标号:指令的符号地址。2.操作码:指明指令功能。3.操作数:指令操作对象。数据、地址、寄存器名及约定符号。4.注释行:说明指令在程序中的作用。操作码和操作数是指令主体。MOV—move传送XCH—exchange交换ANL—andlogic与逻辑运算XRL—exclusiveor异或运算MUL—multiply乘法RR—rotateright右循环SJMP—shortjump短跳转RET—return子程序返回3.1指令格式和寻址方式2020/4/193二、机器语言指令格式:操作码[操作数1][操作数2]有单字节、双字节和三字节指令。汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。举例:汇编语言:机器语言:MOVA,R0E8HMOVR6,#32H7E32HMOV40H,#64H754064H111010000111111000110010011101010100000001100100三、指令寻址方式(一)操作数类型:位(bit)─位寻址区中的一位二进制数据字节(Byte)─8位二进制数据字(Word)─16位双字节数据(二)寻址方式:1.立即寻址方式:指令中给出实际操作数据(立即数),一般用于为寄存器或存储器赋常数初值。举例:8位立即数:MOVA,#40H;A40H16位立即数:MOVDPTR,#2100H;DPTR2100H2020/4/1952.直接寻址方式:指令操作数是存储器单元地址,数据放在存储器单元中。MOVA,40H;A(40H)直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。41H78H40H56H例:设存储器两个单元的内容如图所示,执行指令MOVA,40H后A=?思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同?56H3.寄存器寻址方式:4.寄存器间接寻址方式:指令的操作数为寄存器名,寄存器中为数据地址。存放地址的寄存器称为间址寄存器或数据指针。例:MOVA,@R0;A((R0))设指令执行前A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A=?,R0=?,(40H)=?34H40H34H01000000AR00010000041H67H40H34HR0→A20HR040H例:MOVA,R0;A(R0)设指令执行前A=20H,R0=40H,执行指令后,A=?,R0=?指令操作数为寄存器名,数据在寄存器中。40H40H5.变址间接寻址方式:例:MOVCA,@A+DPTR;A((A+DPTR))设指令执行前A=09H,DPTR=2000H,存储器单元内容如图所示。执行指令后,A=?DPTR=?12H2000H2008H89H2009H12H数据在存储器中,指令给出的寄存器中为数据的基地址和偏移量。数据地址=基地址+偏移量。说明:1、只对程序存储器;2、指令形式:MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR2020/4/198指令给出位地址。一位数据在存储器位寻址区。(1)内部RAM中的位寻址区:字节地址为20H~2FH;(2)专用寄存器的可寻址位:11个(83位)表示方法:1)直接使用位地址;如:PSW的位6可表示为0D6H2)位名称表示;或AC3)字节地址加位数表示;或0D0H.64)专用寄存器符号加位数表示。或PSW.6例:MOVC,40H;Cy(位地址40H)设指令执行前Cy=1,位地址40H存储器单元如图,执行指令后,Cy=?29H0110001028H11010110位寻址区06.位寻址方式:7.相对寻址方式:目的地址=转移指令地址+转移指令字节数+rel(rel为偏移量)当前PC值加上指令中规定的偏移量rel,构成实际的操作数地址例:SJMPrel操作:跳转到的目的地址=当前16位PC值+rel注意:1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;2)符号“rel”表示“偏移量”,是一个带符号的单字节数,范围是:-128~+127(80H~7FH)。在实际编程中,“rel”通常用标号代替。2020/4/1910指令功能分类:数据传送、数据操作、布尔处理、程序控制。3.2.1数据传送指令实现寄存器、存储器之间的数据传送。一、内部传送指令:片内数据存储器数据传送。二、外部传送指令:片外数据存储器数据传送。三、交换指令:片内数据存储器数据传送。四、堆栈操作指令:片内数据存储器数据传送。五、查表指令:程序存储器数据传送。3.2指令分类介绍(一)内部传送指令:习题:找出配对指令,实现反向传送。指令机器码:11101rrrE8~EF11100101nE5n1110011iE6、E701110100d74d10101rrrn1010011in85n1n290d1d2MOVA,Rn;A←(Rn),Rn=R0~R7MOVA,direct;A←(direct)MOVA,@Ri;A←((Ri)),Ri=R0、R1MOVA,#data;A←dataMOVRn,direct;Rn←(direct)MOV@Ri,direct;(Ri)←(direct)MOVdirect1,direct2;(direct1)←(direct2)MOVDPTR,#d1d2;DPTR←d1d2实现片内数据存储器中数据传送。指令格式:MOV目的操作数,源操作数寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。例:MOVA,#30HMOV4FH,AMOVR0,#20HMOV@R0,4FHMOV21H,20H习题:用两种寻址方式实现,将片内RAM60H单元的数据传送给累加器A。解:MOVA,#60H(×)MOVR0,#60H(√)MOVA,@R0;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30HMOVR0,60HMOVA,@R0(×)解:MOVA,60H(√)结果A=32H顺序执行下列指令序列,求每一步执行结果。2020/4/1913说明:只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。1.一条指令中不能同时出现两个工作寄存器:非法指令:MOVR1,R2MOVR2,@R02.间址寄存器只能使用R0、R1。非法指令:MOVA,@R23.SFR区只能直接寻址,不能用寄存器间接寻址。非法指令:MOVR0,#80HMOVA,@R04.指令表(P70):B:指令字节数,M:机器周期数2020/4/1914(二)外部RAM传送指令:(MOVX)指令格式:MOVX目的操作数,源操作数寻址方式:片外数据存储器用寄存器间址方式。1.DPTR作16位数据指针,寻址64KB片外RAM空间:MOVXA,@DPTR;A←((DPTR))(读)MOVX@DPTR,A;(DPTR)←A(写)2.Ri作8位数据指针,寻址256B片外RAM空间(页内寻址):MOVXA,@Ri;A←((P2Ri))(读)MOVX@Ri,A;(P2Ri)←A(写)实现片外数据存储器和A累加器之间的数据传送。例:实现片外数据存储器数据传送(2000H)(2100H)。MOVDPTR,#2000HMOVXA,@DPTRMOVDPTR,#2100HMOVX@DPTR,A片外RAM地址内容2000HX…DPTR→2100H片外RAM地址内容2000HX…DPTR→2100HX习题:将片外RAM0000H单元的数据传送到片内RAM的60H单元。;DPTR=2000H;A=X;DPTR=2100H;(2100H)=X片外数据存储器不能直接寻址。下列为非法指令:MOVXA,2000HMOVX2100H,2000H思考题:为什么对DPTR的数据传送使用内部传送指令?2020/4/1916(三)ROM传送指令(查表指令):(MOVC)1.DPTR为基址寄存器:MOVCA,@A+DPTR;A((A+DPTR))(读)查表范围为64KB程序存储器任意空间,称为远程查表指令。2.PC为基址寄存器:MOVCA,@A+PC;A((A+PC))(读)常数表只能在查表指令后256B范围内,称为近程查表指令。实现从程序存储器读取数据到A累加器,只能使用变址间接寻址方式。多用于查常数表程序,可直接求取常数表中的函数值。P49:例1:以查表方法把累加器中的十六进制数转换为ASCII码,并送回累加器中。外部ROM2004H31H...46H30H2005H...2000HPCPC2003H2012H32HRETINCAMOVC2001H2002H十六进制与ASCII码对应十六进制ASCII码30H31H45H46H01EF......程序如下:指令地址源程序ORG2000H2000HBA:INCA2001MOVCA,@A+PC2002RET2003DB30H2004DB31H2005DB32H……2011DB45H2012DB46H例2:程序:ORG1000HSQU:MOVDPTR,#3000H;确定表首地址(基地址)MOVA,20H;取X(变量:偏移量)MOVCA,@A+DPTR;查表求Y=X2MOV21H,A;保存Y(结果)RET;子程序结束…;其它程序段ORG3000H;常数表格首地址TAB:DB00,01,04,09,…,225;平方表ENDAA内部RAM21H20H......X(变量)Y(结果)XY外部ROM3000H0001...225...3001H...1000HPC90H00H30HDPTR方法1:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要求查表求Y,存入片内RAM21H单元。指令地址源程序ORG1000H;程序起始地址1000HSQU:MOVA,20H;取X1002HADDA,#3;修正偏移量1004HMOVCA,@A+PC;查表求Y=X2(PC=1005H)1005HMOV21H,A;存结果1007HRET;子程序结束1008HTAB:DB00,01,04…;平方表100BHDB09,…,225思考题:当0≤X≤255时,如何用查表法编程求Y=X2。AA内部RAM21H20H......X(变量)Y(结果)XYPCPC外部ROM1008H0001...225...1009H...1000HE5H20H方法2:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要求查表求Y,存入片内RAM21H单元。例2:2020/4/1920(四)交换指令:1.字节交换指令XCHA,Rn;A(Rn)XCHA,@Ri;A((Ri))XCHA,direct;A(direct)片内RAM地址内容2BH35H2AH38H…20H习题:将片内RAM60H单元与61H单元的数据交换。例:设A=29H,执行指令XCHA,2AH后,A=?,(2AH)=?38H29HXCH60H,61H;←对吗?29H不对!!实现片内RAM区的数据双向传送。2.半字节交换指令:XCHDA,@Ri;A0~3((Ri))0~3SWAPA;A4~7A0~3例:将片内RAM2AH和2BH单元中的ASCII码转换成压缩式BCD码存入20H单元。压缩式BCD码千位百位十位个位片内RAM地址内容2BH35H2AH38H…20H58H单字节BCD0000千位0000百位0000十位0000个位习题:交换片内RAM40H单元和41H单元的低半字节。A30H010100000101100050H58HMOVA,#0MOVR0,#2AHMOVR1,#2BHXCHDA,@R0SWAPAXCHDA,@R1XCHA,20H0011000005H0000000000H0000010120HR1A0101100058H30H00110000R0AA35H00110

1 / 57
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功