您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 模板/表格 > 51单片机汇编语言指令教程汇集
第二章:MCS-51单片机指令系统2.1概述2.2寻址方式2.3数据传送指令2.4算逻运算和移位指令2.5控制转移和位操作指令2.1:MCS-51指令系统的概述MCS-51共有111条指令,指令的长度和执行时间因不同的指令而各不相同。2.1.1指令格式2.1.2指令的三种表示形式2.1.3指令的字节数2.1.4指令的分类继续2.1.1指令格式:指令格式:既指令的结构形式。OPDATA或ADDRESS操作码操作数或操作数地址由操作码和操作数(或操作数地址)构成指令的结构。举例:MOVA,#0FFHADDA,R0返回指令的表示形式是识别指令的标志。1,二进制的表示形式:(以“累加器的内容+08H”为例)00100100B操作码OP(加法)00001000B操作数DATA(08H)特点:能被CPU直接识别、运行的形式。也称机器码、汇编语言的目标代码。缺点:不便于阅读、记忆和调试修改。2.1.2指令的三种表示形式:2,十六进制表示方式:它是对二进制形式的一种简化。00100100B24H00001000B08H在实验室等少数环境下,可以将这种形式作为输入程序的一种辅助手段。但是,这种形式的指令格式必须由对应的监控程序把它们翻译成二进制的“机器码”后存入程序存储器并运行。二进制表示的形式十六进制表示的形式3,指令的“助记符”方式(也称“汇编格式”):00100100B24H00001000B08HADDA,#08H1,这是一种由英文单词或字母、数字来表征指令功能的形式。是一种便于阅读、书写和交流的表示形式。2,这种“汇编”格式的指令必须把它“翻译”为二进制形式“机器码”后才能为CPU所识别和执行。3,三种不同的表示方法适用于不同的场合。本章内容都以汇编的形式介绍指令系统。二进制表示形式十六进制表示汇编格式返回2.1.3指令的字节数在MCS-51单片机的指令系统中,因指令操作码和操作数的不同,指令(在存储器中)长度也各不相同。分为单字节、双字节和三字节。单字节指令(49条):分无操作数、有操作数两种。无操作数:如INCDPTR10100011BINCA00000100B【特点】:操作数隐含在操作码中。含有操作数寄存器名称的单字节指令:如:MOVA,R011101000BMOVA,R111101001B【特点】:寄存器名以三位数代码的形式在指令的后三位。双字节指令(46条):指令的操作码和操作数各占一个字节。如:MOVA,#data01110100Bdata很明显:8位的操作数本身占据一个字节。程序存储器01110100datann+1mova,#data双字节指令在程序存储器的存放示意图三字节指令(16条):指令中的操作数为双字节。如:MOVDPTR,#data161001000B,data15-8,data7-0或者:指令中分别包含1个字节的操作数和1个字节的操作数地址。如:MOVdirect,#data举例:MOV20H,#0FFH10010000data15-8data8-0MOVdptr,#data16OP(75H)direct(20H)data(FFH)MOVdirect,#data三字节指令在存储器中存放的方式示意图指令的字节数与指令的运行时间指令的字节多是否意味着指令周期就长?指令字节数周期数指令说明MOVA,R011R0内容送累加器AMOVA,#0FFH21立即数FFH送AMOV20H,#30H32立即数30H送内存20h单元MULAB14乘法指令INCDPTR1116位寄存器DPTR加一从表中可见,指令的字节数与指令周期不是对等的关系返回2.1.4指令的分类MCS-51单片机的指令如果按功能划分可以分为五类:1,数据传送类指令:完成数据在单片机内部之间的传送。分为8位数和16位两种。除了奇偶位外,指令的执行对PSW无影响。2,算术运算指令:用于操作数之间的加、减、乘除运算。【特点】:多数情况下:操作数之一在累加器A中,结果也保留在A中,运算结果要影响PSW(进位标志、奇偶和溢出标志等)。3,逻辑操作和循环移位指令:操作数之间的逻辑加、逻辑与、取反和异或等操作。多数情况下一个操作数在A中,结果也存于A。移位指令分为左移、右移和带进位和不带进位几种情况。与算术类指令相比逻辑类指令基本不影响PSW的内容。4,控制转移类指令:条件转移、无条件转移,调用和返回。【特点】:通过修改程序指针PC的内容,使CPU转到另一处执行,从而改变程序的流向。5,位操作指令:位传送、位置位、位运算和位控制转移等操作。【特点】:按位操作而不是按字节的操作。位控转移的判断不是检测某一个字节而是对某一个位进行检测并决定是否进行程序转移。这类指令基本不影响PSW的内容。返回2.2寻址方式在指令的操作数位置上,用于表征、寻找操作数的方式定义为“寻址方式”。正确的理解、掌握寻址方式,是学习、使用指令的关键。在MCS-51单片机中,共使用了七种寻址方式。它们分别是:1,寄存器寻址5,变址寻址;2,直接寻址6,相对寻址;3,立即数寻址7,位寻址。4,寄存器间接寻址继续2.2.1寄存器寻址当所需要的操作数在内部某一个寄存器Rn中时,将此寄存器名Rn直接写在指令的操作数的位置上。如:MOVA,R7;将寄存器R7中的内容送累加器A中。MOV20H,R0;将寄存器R0中的数据送内存20H单元INCR1;将寄存器R1中的内容加一ADDA,R3;A的内容与寄存器R3的内容相加送A寄存器寻址方式的指令大多是单字节指令。指令本身并不带有操数,而是含有存放操作数的寄存器的3位代码。以MOVA,Rn为例,使用R7寄存器,所以rrr=111,既指令的机器码为:0EFH11101rrr操作码寄存器代码返回E8H~EFHMOVA,Rn2.2.2直接寻址指令本身含有操作数的8位或16位地址。既指令直接给出了操作数的地址。如:MOVA,30H;将RAM30H单元内容送累加器这里30H是操作数在RAM中的地址。很明显,直接寻址的指令长度是两个或三个字节。程序ROMOP30H数据RAM操作数xnn+130H累加器A直接寻址示意图使用直接寻址应注意的三个问题:1,指令助记符中direct是用16进制数表示的操作数地址。当地址恰好在SFR区域时,指令也可以用寄存器名来表示。如:MOVA,80H可以写成MOVA,P0后者用SFR中寄存器的名字取代它的物理地址80H。很明显,后者更容易阅读和交流,所以我们提倡使用SFR中寄存器名称来代替直接地址。如:MOVA,SBUF;串口数据缓冲器数据送AMOVIE,#00H;初始化中断允许寄存器MOVTH1,#0FEH;为定时器1赋初值尽管使用SFR的寄存器名称来取代直接地址,可以带来程序的可读性,但是在汇编时,仍要将寄存器名字转换为直接地址。2,当直接地址时在工作寄存器区中时,可以使用两种寻址方式来访问。如:MOVA,00H;将RAM中00H单元数据送累加器AMOVA,R0;将工作寄存器R0的内容送累加器A这里使用了不同的寻址方式,其指令的结构也不相同。前者是:11100101(0E5H)、00000000(00H)双字节。后者的机器码是:11101000(0E8H)单字节;在物理结构上,R0与RAM的00H单元恰好是同一单元,所以不同的指令而执行结果是一样的。类似的还有累加器A:INCA寄存器寻址方式(单字节);INCACC直接寻址方式(双字节);INC0E0H直接寻址方式(双字节)。3,在指令系统中:字节地址与位地址是完全不同的概念。前者用direct表示,而后者用bit表示,但在指令中都是用16进制表示的数。如:MOVA,20H;将RAM的20H单元内容送AMOVC,20H;将位寻址区中的位地址为20H位内容送PSW中的Cy中。片内RAM(20H-2FH)中的位寻址区结构图7F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837262524232221202F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002FH20H字节地址返回24H位地址返回前一次2.2.3立即寻址指令本身直接含有所需要的8位或16位的操作数。将此数称为“立即数”(使用#标明)。如:MOVA,#30H;将(8位)立即数送累加器AMOVDPTR,#2000H;16位立即数送DPTR积存器【注意】:MOVA,#30HMOVA,30H两者的区别。立即数寻址的指令长度为2或3个字节。74H30Hnn+1ROM累加器AMOVA,#30H指令执行流程90H20H00HROMDPTRMOVDPTR,#2000H指令的存储和执行返回2.2.4寄存器间接寻址指令中含有保存操作数地址的寄存器Ri。MOVA,@Ri(i=0、1)CPU首先根据指令中寄存器名Ri找到操作数地址,然后再从该地址中找到操作数x。如:MOVR0,#30H;立即数送R0寄存器MOVA,@R0;从RAM的H单元取数送累加器A【注意】MOVA,@R0和MOVA,R0指令的区别。ROM11100110RAMx30H30HR000H累加器A123使用寄存器间址指令时应注意的三个问题:1,间址寄存器Ri只能使用R0、R1寄存器(i=0、1)。2,间址方式不仅用于片内RAM,同样也适用于片外RAM。对于片内RAM使用Ri寄存器,寻址范围为00H~FFH。对于片外RAM,可以使用Ri,也可以使用DPTR做间址寄存器。两者区别在于后者寻址范围为0000H~FFFFH,两者都可以RAM和ROM。3,间址方式的指令不能访问SFR中的单元。如下面的程序是错误的:MOVR1,#80HMOVA,@R1(因为80H为SFR的物理地址)MCS-51片内、片外数据存储器示意图特殊功能寄存器SFR通用数据存储器80H7FH00HFFH片内数据存储器片外数据存储器256B个字节64KB个字节片外数据存储器64KB0000HFFFFH注意:1,访问片内RAM20H存储单元;MOVA,20H2,访问片外RAM存储单元;MOVR0,#20HMOVXA,@R03,尽管片内与片外的RAM单元的00H-FFH地址相重叠但由于指令的不同不会发生地址混乱。返回2.2.5变址寻址指令使用DPTR或PC中的内容作为基地址,再与累加器A的内容相加,其和作为操作数地址。如:MOVXA,@A+PC;PC内容与A的内容相加得操作数地址并将此操作数送AMOVXA,@A+DPTR;DPTR内容与A的内容相加得操作数地址并将此操作数送A使用变址指令时,要事先分别为A、DPTR赋值,以便获得操作数得地址。变址指令只适用于对ROM存储器得访问,如查表等。【举例】:已知ROM中0302H单元有一个数x,现要把它送到累加器A中,试编程。MOVDPTR,#0300H;立即数送DPTRMOVA,#02H;立即数送累加器AMOVCA,@A+DPTR;从ROM的00302单元取数送A变址寻址示意图02H0300HROMXALU0302H累加器ADPTR0300H+02H0302HMOVCA,@A+DPTR返回2.2.6相对寻址转移指令中使用的一种寻址方式。MCS-51单片机的指令系统中,有两类转移指令:相对转移(2个或3个字节)绝对转移(3个字节)。在绝对转移指令中,指令直接给出转移的目标地址(2字节地址),执行时将目标地址直接送给PC,从而控制程序转移;而相对转移指令在执行中是将PC值与指令中的8位偏移量进行相加,形成指令要转移的目标地址。SJMPrel由指令中有一个8位偏移量rel为带符号位的补码,所以控制程序转移的范围为+127~-128。54H2002H程序存储器ROM80H54HALU2056H累加器APC2002H+54H2
本文标题:51单片机汇编语言指令教程汇集
链接地址:https://www.777doc.com/doc-4005757 .html