资源预览内容
第1页 / 共120页
第2页 / 共120页
第3页 / 共120页
第4页 / 共120页
第5页 / 共120页
第6页 / 共120页
第7页 / 共120页
第8页 / 共120页
第9页 / 共120页
第10页 / 共120页
亲,该文档总共120页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第二章:MCS-51单片机指令系统2.1 概述2.2 寻址方式2.3 数据传送指令2.4 算逻运算和移位指令2.5 控制转移和位操作指令2.1:MCS-51指令系统的概述MCS-51共有111条指令,指令的长度和执行 时间因不同的指令而各不相同。l2.1.1 指令格式l2.1.2 指令的三种表示形式l2.1.3 指令的字节数l2.1.4 指令的分类继续2.1.1 指令格式:指令格式:既指令的结构形式。OPDATA 或 ADDRESS操作码操作码操作数或操作数地址操作数或操作数地址由操作码和操作数(或操作数地址)构成指令的结构。举例:MOV A,#0FFHADD A,R0返回指令的表示形式是识别指令的标志。l1,二进制的表示形式:(以“累加器的内容+08H”为例)00100100B 操作码 OP (加法)00001000B 操作数DATA(08H)特点: 能被CPU直接识别、运行的形式。也称机器码、汇编 语言的目标代码。 缺点:不便于阅读、记忆和调试修改。2.1.2 指令的三种表示形式:l2,十六进制表示方式:它是对二进制形式的一种简化。00100100B 24H 00001000B 08H在实验室等少数环境下,可以将这种形式作为输入程 序的一种辅助手段。但是,这种形式的指令格式必须由 对应的监控程序把它们翻译成二进制的“机器码”后存入 程序存储器并运行。二进制表示的形式 十六进制表示的形式l3,指令的“助记符”方式(也称“汇编格式” ):00100100B 24H00001000B 08H ADD A,#08H1,这是一种由英文单词或字母、数字来表征指令功能 的形式。是一种便于阅读、书写和交流的表示形式。2,这种 “汇编”格式的指令必须把它“翻译”为二进制形 式“机器码”后才能为CPU所识别和执行。3,三种不同的表示方法适用于不同的场合。本章内容都以汇编的形式介绍指令系统。二进制表示形式 十六进制表示 汇编格式返回2.1.3 指令的字节数在MCS-51单片机的指令系统中,因指令操作码和操作 数的不同,指令(在存储器中)长度也各不相同。分为单字节、双字节和三字节。l单字节指令(49条):分无操作数、有操作数两种。无操作数:如 INC DPTR 10100011BINC A 00000100B【特点】:操作数隐含在操作码中。含有操作数寄存器名称的单字节指令:如:MOV A,R0 11101000BMOV A,R1 11101001B【特点】:寄存器名以三位数代码的形式在指令的后三位 。l双字节指令(46条):指令的操作码和操作数各占一个字节。 如 :MOV A,#data 01110100B data很明显:8位的操作数本身占据一个字节。 程序存储器01110100datann+1movmov a,#dataa,#data双字节指令在程序存储器的存放示意图l三字节指令(16条):指令中的操作数为双字节。如:MOV DPTR,#data16 1001000B,data15-8,data7-0或者:指令中分别包含1个字节的操作数和1个字节的操 作数地址。如:MOV direct,#data 举例:MOV 20H,#0FFH 10010000 data15-8 data8-0MOV dptr,#data16OP (75H) direct (20H) data (FFH)MOV direct,#data三字节指令在存储器中存放的方式示意图指令的字节数与指令的运行时间l指令的字节多是否意味着指令周期就长?指 令字节数周期数指令说明MOV A,R011R0内容送累加器AMOV A,#0FFH21立即数FFH送AMOV 20H,#30H32立即数30H送内存20h单元MUL AB14乘法指令INC DPTR1116位寄存器DPTR加一从表中可见,指令的字节数与指令周期不是对等的关系返回2.1.4 指令的分类MCS-51单片机的指令如果按功能划分可以分为五类: l1,数据传送类指令:完成数据在单片机内部之间的传送 。分为8位数和16位两种。除了奇偶位外,指令的执行对PSW无影响。l2,算术运算指令:用于操作数之间的加、减、乘除运算 。 【特点】:多数情况下:操作数之一在累加器A中,结果 也保留在A中,运算结果要影响PSW(进位标志、奇偶 和溢出标志等)。l3,逻辑操作和循环移位指令:操作数之间的逻辑加、逻 辑与、取反和异或等操作。多数情况下一个操作数在A 中,结果也存于A。移位指令分为左移、右移和带进位 和不带进位几种情况。与算术类指令相比逻辑类指令基 本不影响PSW的内容。l4,控制转移类指令:条件转移、无条件转移,调用和返回 。【 特点】:通过修改程序指针PC的内容,使CPU转到另 一处执行,从而改变程序的流向。l5,位操作指令:位传送、位置位、位运算和位控制转移 等操作。 【 特点】:按位操作而不是按字节的操作。位控转移的 判断不是检测某一个字节而是对某一个位进行检测并决定 是否进行程序转移。这类指令基本不影响PSW的内容。返回2.2 寻址方式l在指令的操作数位置上,用于表征、寻找操作数的方式定 义为“寻址方式”。l正确的理解、掌握寻址方式,是学习、使用指令的关键。l在MCS-51单片机中,共使用了七种寻址方式。 它们分别是:1,寄存器寻址 5,变址寻址; 2,直接寻址 6,相对寻址;3,立即数寻址 7,位寻址。 4,寄存器间接寻址 继续2.2.1寄存器寻址l当所需要的操作数在内部某一个寄存器Rn中时,将此寄存 器名Rn直接写在指令的操作数的位置上。如:MOV A,R7 ;将寄存器R7中的内容送累加器A中。MOV 20H,R0 ;将寄存器R0中的数据送内存20H单元 INC R1 ;将寄存器R1中的内容加一ADD A,R3 ;A的内容与寄存器R3的内容相加送A寄存器寻址方式的指令大多是单字节指令。指令本身并不 带有操数,而是含有存放操作数的寄存器的3位代码。以 MOV A,Rn为例,使用R7寄存器,所以rrr=111,既指令的机 器码为:0EFH1 1 1 0 1 r r r操作码寄存器代码返回E8HEFHMOV A,RnMOV A,Rn2.2.2 直接寻址l指令本身含有操作数的8位或16位地址。既指令直接 给出了操作数的地址。如:MOV A,30H ;将RAM30H单元内容送累加器这里30H是操作数在RAM中的地址。l很明显,直接寻址的指令长度是两个或三个字节。程序ROMOP 30H数据RAM操作数xn n+130H累加器A直接寻址示意图使用直接寻址应注意的三个问题:l1,指令助记符中direct是用16进制数表示的操作数地址。当地址恰好在SFR区域时,指令也可以用寄存器名来表示 。如:MOV A,80H 可以写成 MOV A,P0 后者用SFR中寄存器的名字取代它的物理地址80H 。很明显,后者更容易阅读和交流,所以我们提倡使用 SFR中寄存器名称来代替直接地址。如:MOV A,SBUF ;串口数据缓冲器数据送AMOV IE,#00H ;初始化中断允许寄存器MOV TH1,#0FEH ;为定时器1赋初值尽管使用SFR的寄存器名称来取代直接地址,可以 带来程序的可读性,但是在汇编时,仍要将寄存器名字 转换为直接地址。l2,当直接地址时在工作寄存器区中时,可以使用两种寻 址方式来访问。 如:MOV A,00H ;将RAM中00H单元数据送累加器AMOV A,R0 ;将工作寄存器R0的内容送累加器A这里使用了不同的寻址方式,其指令的结构也不相同。前者是:11100101(0E5H)、00000000(00H) 双字节 。后者的机器码是:11101000(0E8H) 单字节;在物理结构上,R0与RAM的00H单元恰好是同一单 元,所以不同的指令而执行结果是一样的。类似的还有累加器A: INC A 寄存器寻址方式(单字节);INC ACC 直接寻址方式(双字节);INC 0E0H 直接寻址方式(双字节)。 l3,在指令系统中:字节地址与位地址是完全不同的概念 。前者用direct表示,而后者用bit 表示,但在指令中都是 用16进制表示的数。如:MOV A,20H ;将RAM的20H单元内容送AMOV C,20H ;将位寻址区中的位地址为20H位内容 送PSW 中的Cy中。片内 RAM(20H-2FH)中的位寻址区结构图7F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837262524232221202F2E2D2C2B2A29282726252423222120 1F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002FH20H字节地址返回24H位地址返回前一次2.2.3立即寻址l指令本身直接含有所需要的8位或16位的操作数。将此数称为“立即数”(使用#标明)。如:MOV A,#30H ;将(8位)立即数送累加器A MOV DPTR,#2000H ;16位立即数送DPTR积存器【注意】:MOV A,#30H MOV A,30H 两者的区别 。 l立即数寻址的指令长度为2或3个字节。74H30Hnn+1ROM累加器AMOV A,#30H 指令执行流程90H 20H 00HROMDPTRMOV DPTR,#2000H指令的存储和执行返回2.2.4 寄存器间接寻址l指令中含有保存操作数地址的寄存器Ri。MOV A,Ri ( i=0、1)CPU首先根据指令中寄存器名Ri找到操作数地址,然后 再从该地址中找到操作数 x。如:MOV R0,#30H ;立即数送R0寄存器MOV A,R0 ;从RAM的H单元取数送累加器A 【注意】MOV A,R0 和 MOV A,R0 指令的区别。ROM11100110RAMx30H30HR000H累加器A123使用寄存器间址指令时应注意的三个问题:1,间址寄存器Ri只能使用R0、R1寄存器(i=0、1)。2,间址方式不仅用于片内RAM,同样也适用于片外RAM。对于片内RAM使用Ri寄存器,寻址范围为00HFFH。对于片外RAM,可以使用Ri,也可以使用DPTR做间址 寄存器。两者区别在于后者寻址范围为0000HFFFFH ,两者都可以RAM和ROM。3,间址方式的指令不能访问SFR中的单元。如下面的程 序是错误的:MOV R1,#80HMOV A,R1 (因为80H为SFR的物理地址 )MCS-51 片内 、片外 数据存储器示意图特殊功能 寄存器 SFR通用数据 存储器80H 7FH00HFFH片内数据存储器 片外数据存储器 256B个字节 64KB个字节片外数据 存储器 64KB0000HFFFFH注
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号