您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第三章汇编语言程序设计.
3.1指令系统概述本章内容:3.280C51的寻址方式3.3指令集3.4汇编语言程序设计第3章80C51的指令系统计算机只有硬件是不能工作的,需要配置相应的软件。软件是用各种语言编写的程序,软件的基础是计算机的指令系统。+5VC3R1KRSTXTAL1XTAL2C1C212MHZ89S51VCCR2D1P1.0如图:单片机89S51接复位和时钟电路构成最小系统,在P1.0口上接发光二极管,当P1.0给低电平时D1亮,给高电平时D1灭。相应程序:MOVP1,#00H;灯亮ACALLdelay;延时MOVP1,#01H;灯灭ACALLdelay3.1指令系统概述返回一、指令与指令系统1、指令:计算机提供给用户的具有特定功能的操作命令。用二进制表示并存储。例如:11101000表示将寄存器R0的数据传送到累加器A2、指令系统:所有指令的集合。3、指令系统是计算机生产商在设计计算机时定义的,每种计算机都有自己的指令系统,无通用性。二、指令分类MCS-51共有111条指令1、按指令功能分为:♦数据传送(29条)♦算术运算(24条)♦逻辑运算(24条)♦控制转移(17条)♦位操作指令(17条)2、按指令执行时间分:♦64条指令执行时间为一个机器周期♦45条指令执行时间为两个机器周期♦乘、除法指令执行时间为四个机器周期。当主频为12MHz时,典型指令执行时间为1us。返回三、指令编码格式[标号]:操作码[操作数];注释标号:表示指令的符号地址,可作为转移的目标地址。操作码:用来规定该指令要执行的操作性质。操作数:表示在执行过程中所完成的操作对象,根据指令功能,可有0、1、2、3个操作数。注释:方便用户阅读。MCS-51系统有下列三种指令编码格式1、单字节指令(49条)743070opcode格式2:格式1:000——R0001——R1010——R2011——R3100——R4101——R5110——R6111——R7opcodereg返回2、双字节指令(45条)格式:数据或地址opcodedata或direct3、三字节指令(17条)格式:opcodedata或directdata或direct操作码数据或地址数据或地址操作码返回例如:•一字节指令空操作NOP的编码格式为:•两字节指令MOVA,#40H的编码格式为:数据传送指令MOVA,R1的编码格式为:00000000111010010111010001000000立即数40H操作码操作码返回•三字节指令MOV20H,#3AH的编码格式为:操作码75H操作数的地址20H立即数3AH011101010010000000111010MOVDPTR,#1000H的编码格式为:100100000001000000000000操作码90H操作数高八位10H操作数低八位00H返回3.280C51的寻址方式寻找操作数或指令的地址的方式。寻址方式有七种1、立即寻址2、寄存器寻址3、直接寻址4、寄存器间接寻址、5、基址寄存器加变址寄存器寻址6、相对寻址7、位寻址。计算机寻址方式的优劣,直接影响执行程序的速度。一、立即数寻址操作数是常数,立即数与操作码一起存放在程序存储器中,当取出指令时立即数也取出,可以立即执行。在汇编指令中,立即数前面以“#”符号作前缀。例如:MOVA,#30H其功能是把立即数30H(00110000B)送给累加器A,其中源操作数30H就是立即数。指令执行后累加器A中的内容为30H。0111010000110000程序存储区PC00110000操作码立即数ACC二、直接寻址直接寻址是指数据存放在存储器单元中,在指令中直接提供存储器单元的地址。在MCS-51系统中,这种寻址方式针对的是片内数据存储器和特殊功能寄存器。例如:MOVA,30H指令中30H是片内RAM的存储单元,指令的功能是把片内数据存储器30H单元的内容送给累加器A。如图30H中存放的数据为0BCH(10111100),指令执行后累加器A的内容为0BCH。01110100程序存储区PC00110000操作码立即数片内RAM区1011110010111100ACC30H注意直接寻址和立即数寻址的区别:在MCS-51中,数据前面不加“#”是指存储单元地址而不是常数,为直接寻址;立即数寻址时常数前面要加符号“#”。对于特殊功能寄存器,在指令中使用时往往通过特殊功能寄存器的名称使用,而特殊功能寄存器名称实际就是特殊功能寄存器单元的符号地址,因此它们是直接寻址。例如:MOVA,P0其功能是把P0口的内容送给累加器A。P0是特殊功能寄存器P0口的符号地址,该指令在翻译成机器码时,P0就转换成直接地址80H。三、寄存器寻址操作数在某个寄存器中,使用时在指令中直接提供寄存器的名称,这种寻址方式称为寄存器寻址。采用寄存器寻址的寄存器可以是:1、工作寄存器R0-R72、累加器A和寄存器B3、数据指针DPTR。例如:MOVA,R5其功能是把R5寄存器中的数送给累加器A。如指令执行前R5中的内容为0BCH,则指令执行后累加器A中的内容为0BCH。11101101程序存储区PC操作码片内RAM区1011110010111100ACCR5四、寄存器间接寻址数据存放在存储器单元中,而存储器单元的地址存放在某个寄存器中,在指令中通过提供存放存储器单元地址的寄存器来寻址并使用对应的存储单元。形式为@寄存器名。例如:MOVA,@R0该指令的功能是将以工作寄存器R0中的内容为地址的片内RAM单元的数据传送到累加器A中。指令的源操作数是寄存器间接寻址。若R0中的内容为60H,片内RAM60H地址中元的内容为00H,则执行该指令后,累加器A的内容为00H。PCE6HROMR060H60H00HACC00HRAM能实现这种寻址方式的寄存器有:R0、R1、DPTR。访问的数据是片内数据存储器和片外数据存储器。(1)访问片内数据存储器:用R0和R1做指针间接访问;MCS-51单片机片内数据存储器容量128B,由于R0和R1都是8位寄存器,2的8次方最大可以访问256个字节。(2)访问片外数据存储器时,低端的256字节单元,可以用以R0或R1做指针间接访问,也可用DPTR(16位)做指针间接访问,而高端的字节单元(地址范围超过了256)则只能以DPTR做指针间接访问。(3)对于片内RAM和片外RAM的低端256字节都可以用R0和R1做指针访问,如何判断是访问片内的数据存储器还是访问片外的数据存储器?在MCS-51指令系统中是采用不同的指令来区别,片内RAM访问用MOV指令,片外RAM访问用MOVX指令,应用时必须特别注意。例如:MOVR,#40HMOVA,@R0;将片内RAM40H单元的内容送AMOVXA,@R0;将片外RAM40H单元的内容送A五、变址寻址变址寻址是指操作数的地址由基址寄存器的地址加上变址寄存器的地址得到。在MCS-51系统中,它是以数据指针寄存器DPTR或程序计数器PC为基址,累加器A为变址,两者相加得到存储单元的地址,所访问的存储器为程序存储器。这种寻址方式通常用于访问程序存储器中的表格型数据,表首单元的地址为基址,用DPTR或PC存放,访问的单元相对于表首的位移量为变址,用累加器A存放,两者相加得到访问单元的地址。例如:MOVCA,@A+PCMOVCA,@A+PC其功能是将程序寄存器PC的内容和累加器A中的内容相加作为程序存储器的地址,从对应的单元中取出内容送到累加器A中。指令中,源操作数的寻址方式为变址寻址,设指令执行前程序寄存器PC的值为2000H,累加器A的值为0E0H,程序存储器20E0H单元的内容为47H,则指令执行后,累加器A中的内容由0E0H变为47H。(47H)E0H47H程序存储区...2000HALU20E0HAPC变址寻址可以用数据指针寄存器DPTR作基址,也可以用程序计数器PC作基址,两者的区别将会在后面介绍。六、相对寻址相对寻址用在程序控制转移时,它的功能是使程序转移到要求的目的地址位置。相对寻址是以当前程序计数器PC值加上指令中给出的偏移量rel得到目的位置的地址。使用相对寻址时要注意以下两点。(l)当前PC值是指取出转移指令执行后的PC值,它等于转移指令的地址加上转移指令的字节数,实际上是转移指令的下一条指令的地址。例如,转移指令的地址为1005H,转移指令的长度为两个字节,则当前PC值为1007H。(2)偏移量rel是8位有符号数,以补码表示,它的取值范围为-128~+127。当为负值时向前转移,当为正数时间后转移。相对寻址的目的地址为:目的地址=PC当前值(转移指令的地址1005H十转移指令的字节数2)+rel=1007H+relPC01000000程序存储区...ALU100000000F87...PC→1005PC→1006PC→1007操作码偏移量1007七、位寻址位寻址是指操作数是二进制位的寻址方式。在MCS-51单片机中有一个独立的位处理器,有多条位处理指令,能够进行各种位运算。位处理的操作对象是各种可寻址位。对它们的访问是通过提供相应的位地址来处理的。在MCS-51系统中,位地址的表示可以用以下几种方式。(l)直接位地址(寻址范围00H~0FFH)。例如:20H。(2)字节地址带位号。例如20H.3表示20H字节单元的3位。(3)特殊功能寄存器名带位号。例如P0.l表示P0口的1位。(4)位符号地址。例如TR0,是定时/计数器T0的启动位。寻址方式符号表示寻址存储空间寄存器寄存器名R0~R7、A、B、DPTR寄存器@R0,@R1内部RAM00H~7FH间接@DPTR外部RAM64KB基址加@A+PC程序存储器变址@A+DPTR相对寻址rel程序存储器位寻址片内RAM的位寻址区(20H~2FH)、SFR立即#data(#20H)程序存储器直接direct(40H)片内RAM低128字节和SFR寻址方式、符号表示与寻址存储空间返回寻址方式举例:(1)MOVA,#20H;立即数寻址A20HMOVP1,#0FFHP1FFH(2)MOVR1,A;寄存器寻址R1(A)(3)ADDA,40H;直接寻址A(A)+(40H)(4)MOVR7,@R0;寄存器间接A((R0))MOVXA,@DPTR(5)MOVCA,@A+PC;基址变址A((A)+(PC))(6)JZL1;相对寻址(A)=0,转移到标号L1的语句执行(7)MOVC,P1.7;位寻址C(P1.7)返回3.3指令系统指令系统按功能分为5大类:1、数据传送(29条)2、算术运算(24条)3、逻辑运算(24条)4、控制转移(17条)5、位操作指令(17条)一、数据传送类指令格式:MOV目标,源;目标源(1)指令中有数据源地址和传送数据目的地址,传送方向由源地址中的数据传送到目的地址中,源地址中的内容不变。(2)数据传送类指令的执行结果不影响程序状态寄存器(PSW)中的各标志位。返回1.内部数据传送指令数据传送在单片机内部进行,不通过外部总线,传送速度快。(1)立即数送累加器、寄存器、存储器MOVA,#30H;A←30HMOVR0,#FFH;R0←FFHMOV40H,#05H;(40H)←05HMOV@R0,#10H;(R0)←10HMOVDPTR,#2000H;DPTR←2000H返回(2)累加器和寄存器、存储器;寄存器和存储器MOVA,R7;A←(R7)MOVR2,A;R2←AMOVA,40H;A←(40H)MOV@R0,A;(R0)←AMOVR5,20H;R5←(20H)(3)存储器与存储器MOV@R0,20H;(R0)←(20H)MOV20H,@R0;(20H)←(R0)MOV40H,20H;(40H)←(20H)例1:说明指令的寻址方式和执行后的结果MOVA,#10HMOV#20,AMOVR7,#50HMOVR7,#2000HMOVA,R1MOV@R1,@R0MOV12H,AMOVCA,@R7MOV40H,#10HMOVR6,50HMOV@R1,#20HMOVDPTR,#2000HMOV@R0,20HMO
本文标题:第三章汇编语言程序设计.
链接地址:https://www.777doc.com/doc-2121529 .html