《单片机汇编语言指令教程汇集.ppt》由会员分享,可在线阅读,更多相关《单片机汇编语言指令教程汇集.ppt(120页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机汇编语言指令教程汇集 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望2.1:MCS-51指令系统的概述 MCS-51 MCS-51共有共有111111条指令,指令的长度和执行时条指令,指令的长度和执行时间因不同的指令而各不相同。间因不同的指令而各不相同。2.1.1 2.1.1 指令格式指令格式2.1.22.1.2 指令的三种表示形式指令的三种表示形式2.1.3 2.1.3 指令的字节数指令的字节数2.1.42.1.4 指令的分类指令的分类继续2.1.1 指令
2、格式:指令格式:既指令的结构形式。指令格式:既指令的结构形式。OPOPDATADATA 或或 ADDRESSADDRESS操作码操作码操作数或操作数地址操作数或操作数地址由操作码和操作数(或操作数地址)构成指令的结构。举例:MOV A,#0FFH ADD A,R0返回指令的表示形式是识别指令的标志。指令的表示形式是识别指令的标志。1 1,二进制的表示形式:,二进制的表示形式:(以(以“累加器的内容累加器的内容+08H+08H”为例)为例)00100100B 00100100B 操作码操作码 OP OP(加法)(加法)00001000B 00001000B 操作数操作数DATADATA(08H0
3、8H)特点:特点:能被能被CPUCPU直接识别、运行的形式。也称机器码、汇编语直接识别、运行的形式。也称机器码、汇编语 言的目标代码。言的目标代码。缺点:缺点:不便于阅读、记忆和调试修改。不便于阅读、记忆和调试修改。2.1.2 指令的三种表示形式:2 2,十六进制表示方式:,十六进制表示方式:它是对二进制形式的一种简化。它是对二进制形式的一种简化。00100100B 00100100B 24H24H 00001000B 00001000B 08H08H 在实验室等少数环境下,可以将这种形式作为输入程序在实验室等少数环境下,可以将这种形式作为输入程序的一种辅助手段。但是,这种形式的指令格式必须由
4、对应的一种辅助手段。但是,这种形式的指令格式必须由对应的监控程序把它们翻译成二进制的的监控程序把它们翻译成二进制的“机器码机器码”后存入程序后存入程序存储器并运行。存储器并运行。二进制表示的形式 十六进制表示的形式3 3,指令的,指令的“助记符助记符”方式(也称方式(也称“汇编格式汇编格式”):):00100100B00100100B 24H24H 00001000B 00001000B 08H 08H ADD AADD A,#08H#08H 1 1,这是一种由,这是一种由英文单词英文单词或或字母字母、数字数字来表征指令功能的来表征指令功能的 形式。是一种便于阅读、书写和交流的表示形式。形式。
5、是一种便于阅读、书写和交流的表示形式。2 2,这种,这种“汇编汇编”格式的指令必须把它格式的指令必须把它“翻译翻译”为二进制为二进制形式形式 “机器码机器码”后才能为后才能为CPUCPU所识别和执行。所识别和执行。3 3,三种不同的表示方法适用于不同的场合。,三种不同的表示方法适用于不同的场合。本章内容都以汇编的形式介绍指令系统。本章内容都以汇编的形式介绍指令系统。二进制表示形式 十六进制表示 汇编格式返回2.1.3 指令的字节数 在在MCS-51MCS-51单片机的指令系统中,因指令操作码和操作数单片机的指令系统中,因指令操作码和操作数的不同,指令(在存储器中)长度也各不相同。的不同,指令(
6、在存储器中)长度也各不相同。分为单字节、双字节和三字节。分为单字节、双字节和三字节。单字节指令(单字节指令(4949条)条):分分无操作数无操作数、有操作数有操作数两种。两种。无操作数:无操作数:如如 INC DPTR 10100011B INC DPTR 10100011B INC A 00000100B INC A 00000100B 【特点特点】:操作数隐含在操作码中。:操作数隐含在操作码中。含有含有操作数寄存器名称操作数寄存器名称的单字节指令:的单字节指令:如:如:MOV AMOV A,R0 11101R0 11101000000B B MOV AMOV A,R1R1 11101111
7、01001001B B 【特点特点】:寄存器名以三位数代码的形式在指令的后三位。:寄存器名以三位数代码的形式在指令的后三位。双字节指令(双字节指令(4646条):条):指令的操作码和操作数各占一个字节。指令的操作码和操作数各占一个字节。如:如:MOV A,#data 01110100B dataMOV A,#data 01110100B data 很明显:很明显:8 8位的操作数本身占据一个字节。位的操作数本身占据一个字节。程序存储器程序存储器0111010001110100datadatann+1mov a,#datamov a,#data双字节指令在程序存储器的存放示意图三字节指令(三字节
8、指令(1616条):条):指令中的操作数为双字节。如:指令中的操作数为双字节。如:MOV DPTR,#data16MOV DPTR,#data16 1001000B,data15-8,data7-01001000B,data15-8,data7-0 或者:指令中分别包含或者:指令中分别包含1 1个字节的操作数和个字节的操作数和1 1个字节的操作个字节的操作数地址。如:数地址。如:MOV direct,#dataMOV direct,#data 举例:举例:MOV 20H,#0FFHMOV 20H,#0FFH 1001000010010000data15-8data15-8data8-0data
9、8-0MOV dptr,#data16OP (75H)OP (75H)direct(20H)direct(20H)data (FFH)data (FFH)MOV direct,#data三字节指令在存储器中存放的方式示意图指令的字节数与指令的运行时间指令的字节多是否意味着指令周期就长?指令的字节多是否意味着指令周期就长?指指 令令字节数字节数周期数周期数指令说明指令说明 MOV A MOV A,R0R01 11 1R0R0内容送累加器内容送累加器A AMOV AMOV A,#0FFH#0FFH2 21 1立即数立即数FFHFFH送送A AMOV 20HMOV 20H,#30H#30H3 32
10、2立即数立即数30H30H送内存送内存20h20h单元单元MUL ABMUL AB1 14 4乘法指令乘法指令INC DPTRINC DPTR1 11 11616位寄存器位寄存器DPTRDPTR加一加一从表中可见,指令的字节数与指令周期不是对等的关系返回2.1.4 指令的分类 MCS-51 MCS-51单片机的指令如果按功能划分可以分为五类:单片机的指令如果按功能划分可以分为五类:1,1,数据传送类指令:数据传送类指令:完成数据在单片机内部之间的传送。完成数据在单片机内部之间的传送。分为分为8 8位数和位数和1616位两种。除了奇偶位外,指令的执行对位两种。除了奇偶位外,指令的执行对 PSW
11、PSW无影响。无影响。2,2,算术运算指令:算术运算指令:用于操作数之间的加、减、乘除运算。用于操作数之间的加、减、乘除运算。【特点特点】:多数情况下:操作数之一在累加器:多数情况下:操作数之一在累加器A A中,结果中,结果也保留在也保留在A A中,运算结果要影响中,运算结果要影响PSWPSW(进位标志、奇偶和(进位标志、奇偶和溢出标志等)。溢出标志等)。3,3,逻辑操作逻辑操作和和循环移位指令:循环移位指令:操作数之间的逻辑加、逻辑操作数之间的逻辑加、逻辑与、取反和异或等操作。多数情况下一个操作数在与、取反和异或等操作。多数情况下一个操作数在A A中,中,结果也存于结果也存于A A。移位指令
12、分为左移、右移和带进位和不带。移位指令分为左移、右移和带进位和不带进位几种情况。与算术类指令相比逻辑类指令基本不影响进位几种情况。与算术类指令相比逻辑类指令基本不影响PSWPSW的内容。的内容。4,4,控制转移类指令:控制转移类指令:条件转移、无条件转移,调用和返回。条件转移、无条件转移,调用和返回。【特点特点】:通过修改程序指针:通过修改程序指针PCPC的内容,使的内容,使CPUCPU转到另一转到另一处执行,从而改变程序的流向。处执行,从而改变程序的流向。5 5,位操作指令:,位操作指令:位传送、位置位、位运算和位控制转移等位传送、位置位、位运算和位控制转移等操作。操作。【特点特点】:按位操
13、作而不是按字节的操作。位控转移的判:按位操作而不是按字节的操作。位控转移的判断不是检测某一个字节而是对某一个位进行检测并决定是断不是检测某一个字节而是对某一个位进行检测并决定是否进行程序转移。否进行程序转移。这类指令基本不影响这类指令基本不影响PSWPSW的内容。的内容。返回2.2 寻址方式在指令的操作数位置上,用于在指令的操作数位置上,用于表征、寻找操作数的方式表征、寻找操作数的方式定义定义为为“寻址方式寻址方式”。正确的理解、掌握寻址方式,是学习、使用指令的关键正确的理解、掌握寻址方式,是学习、使用指令的关键。在在MCS-51MCS-51单片机中,共使用了七种寻址方式。单片机中,共使用了七
14、种寻址方式。它们分别是:它们分别是:1,1,寄存器寻址寄存器寻址 5,5,变址寻址变址寻址;2,2,直接寻址直接寻址 6,6,相对寻址相对寻址;3,3,立即数立即数寻址寻址 7,7,位寻址位寻址。4,4,寄存器间接寻址寄存器间接寻址 继续2.2.1寄存器寻址当所需要的当所需要的操作数操作数在内部某一个寄存器在内部某一个寄存器RnRn中时,将此寄存器中时,将此寄存器名名RnRn直接写在指令的操作数的位置上。如:直接写在指令的操作数的位置上。如:MOV A,MOV A,R7 R7 ;将寄存器;将寄存器R7R7中的内容送累加器中的内容送累加器A A中。中。MOV MOV 20H,20H,R0R0 ;
15、将寄存器;将寄存器R0R0中的数据送内存中的数据送内存20H20H单元单元 INCINC R1 R1 ;将寄存器;将寄存器R1R1中的内容加一中的内容加一 ADD A,ADD A,R3 R3 ;A A的内容与寄存器的内容与寄存器R3R3的内容相加送的内容相加送A A 寄存器寻址方式的指令大多是单字节指令。指令本身并不带寄存器寻址方式的指令大多是单字节指令。指令本身并不带有操数,而是含有存放操作数的有操数,而是含有存放操作数的寄存器的寄存器的3 3位代码。位代码。以以MOV MOV A,RnA,Rn为例,使用为例,使用R7R7寄存器,所以寄存器,所以rrr=111,rrr=111,既指令的机器码
16、为:既指令的机器码为:0EFH0EFH1 1 1 0 1 r r r操作码寄存器代码返回E8HEFHMOV A,RnMOV A,Rn2.2.2 直接寻址l l指令本身含有操作数的指令本身含有操作数的8 8位或位或1616位地址。既指令位地址。既指令直接直接给给出了操作数的地址。如:出了操作数的地址。如:MOV A,MOV A,30H30H ;将将RAM30HRAM30H单元内容送累加器单元内容送累加器 这里这里30H30H是操作数在是操作数在RAMRAM中的地址。中的地址。l l很明显,直接寻址的指令长度是两个或三个字节。很明显,直接寻址的指令长度是两个或三个字节。程序程序ROMROMOPOP
17、30H30H数据数据RAMRAM操作数操作数x xnn+130H累加器A直接寻址示意图使用直接寻址应注意的三个问题:1,1,指令助记符中指令助记符中directdirect是用是用1616进制数表示的操作数地址。进制数表示的操作数地址。当地址恰好在当地址恰好在SFRSFR区域时区域时,指令也可以用寄存器名来表示。指令也可以用寄存器名来表示。如:如:MOV A,80HMOV A,80H 可以写成可以写成 MOV A,P0MOV A,P0 后者用后者用SFRSFR中寄存器的名字取代它的物理地址中寄存器的名字取代它的物理地址80H80H。很明显,后者更容易阅读和交流,很明显,后者更容易阅读和交流,所
18、以我们提倡使用所以我们提倡使用SFRSFR中寄存器名称来代替直接地址中寄存器名称来代替直接地址。如:如:MOV A,SBUFMOV A,SBUF ;串口数据缓冲器数据送;串口数据缓冲器数据送A A MOV IE,#00H MOV IE,#00H ;初始化中断允许寄存器;初始化中断允许寄存器 MOV TH1,#0FEHMOV TH1,#0FEH ;为定时器;为定时器1 1赋初值赋初值 尽管使用尽管使用SFRSFR的寄存器名称来取代直接地址,可以带的寄存器名称来取代直接地址,可以带来程序的可读性,但是在汇编时,仍要将寄存器名字转换来程序的可读性,但是在汇编时,仍要将寄存器名字转换为直接地址。为直接
19、地址。2,2,当直接地址时在工作寄存器区中时,可以使用两种寻址当直接地址时在工作寄存器区中时,可以使用两种寻址方式来访问。方式来访问。如:如:MOV A,00HMOV A,00H ;将;将RAMRAM中中00H00H单元数据送累加器单元数据送累加器A A MOV A,R0MOV A,R0 ;将工作寄存器;将工作寄存器R0R0的内容送累加器的内容送累加器A A 这里使用了不同的寻址方式,其指令的结构也不相同。这里使用了不同的寻址方式,其指令的结构也不相同。前者是:前者是:11100101(0E5H)11100101(0E5H)、0000000000000000(00H00H)双字节。双字节。后者
20、的机器码是:后者的机器码是:11101000(0E8H)11101000(0E8H)单字节单字节;在物理结构上,在物理结构上,R0R0与与RAMRAM的的00H00H单元恰好是同一单元,单元恰好是同一单元,所以不同的指令而执行结果是一样的。所以不同的指令而执行结果是一样的。类似的还有累加器类似的还有累加器A A:INC AINC A 寄存器寻址方式(单字节);寄存器寻址方式(单字节);INC ACCINC ACC 直接寻址方式(双字节);直接寻址方式(双字节);INC 0E0HINC 0E0H 直接寻址方式(双字节)。直接寻址方式(双字节)。3,3,在指令系统中:在指令系统中:字节地址字节地址
21、与与位地址位地址是完全不同的概念。是完全不同的概念。前者用前者用directdirect表示,而后者用表示,而后者用bit bit 表示,但在指令中都是用表示,但在指令中都是用1616进制表示的数。进制表示的数。如:如:MOV A,20H MOV A,20H ;将;将RAMRAM的的20H20H单元内容送单元内容送A A MOV C,20H MOV C,20H ;将位寻址区中的位地址为;将位寻址区中的位地址为20H20H位内容送位内容送 PSW PSW 中的中的CyCy中。中。片内 RAM(20H-2FH)中的位寻址区结构图7F7F7E7E7D7D7C7C7B7B7A7A79797878777
22、776767575747473737272717170706F6F6E6E6D6D6C6C6B6B6A6A69696868676766666565646463636262616160605F5F5E5E5D5D5C5C5B5B5A5A59595858575756565555545453535252515150504F4F4E4E4D4D4C4C4B4B4A4A49494848474746464545444443434242414140403F3F3E3E3D3D3C3C3B3B3A3A39393838373726262525242423232222212120202F2F2E2E2D2D2C2
23、C2B2B2A2A29292828272726262525242423232222212120201F1F1E1E1D1D1C1C1B1B1A1A19191818171716161515141413131212111110100F0F0E0E0D0D0C0C0B0B0A0A09090808070706060505040403030202010100002FH20H字节地址返回24H位地址返回前一次2.2.3立即寻址指令本身直接含有所需要的指令本身直接含有所需要的8 8位或位或1616位的操作数。位的操作数。将此数称为将此数称为“立即数立即数”(使用(使用#标明)。如:标明)。如:MOV A,#
24、30HMOV A,#30H ;将(;将(8 8位)立即数送累加器位)立即数送累加器A A MOV DPTR,#2000H MOV DPTR,#2000H ;1616位立即数送位立即数送DPTRDPTR积存器积存器 【注意】【注意】:MOV A,#30HMOV A,#30H MOV A,30HMOV A,30H 两者的区别。两者的区别。立即数寻址的指令长度为立即数寻址的指令长度为2 2或或3 3个字节。个字节。74H74H30H30Hnn+1ROM累加器AMOV A,#30H 指令执行流程90H90H20H20H00H00HROMDPTRMOV DPTR,#2000H指令的存储和执行返回2.2.
25、4 寄存器间接寻址指令中含有指令中含有保存操作数地址的保存操作数地址的寄存器寄存器RiRi。MOV A,Ri (i=0 MOV A,Ri (i=0、1)1)CPU CPU首先根据指令中寄存器名首先根据指令中寄存器名RiRi找到操作数地址,然后再找到操作数地址,然后再从该地址中找到操作数从该地址中找到操作数 x x。如:如:MOV R0,#30H MOV R0,#30H ;立即数送;立即数送R0R0寄存器寄存器 MOV A,R0 MOV A,R0 ;从;从RAMRAM的的H H单元取数送累加器单元取数送累加器A A【注意】【注意】MOV A,R0MOV A,R0 和和 MOV A,R0MOV A
26、,R0 指令的区别。指令的区别。ROMROM111001111100110 0RAMRAMx x30H30H30HR000H累加器A123使用寄存器间址指令时应注意的三个问题:1,1,间址寄存器间址寄存器RiRi只能使用只能使用R0R0、R1R1寄存器(寄存器(i=0i=0、1 1)。)。2,2,间址方式不仅用于片内间址方式不仅用于片内RAMRAM,同样也适用于片外,同样也适用于片外RAMRAM。对于片内对于片内RAMRAM使用使用RiRi寄存器,寻址范围为寄存器,寻址范围为00H00HFFHFFH。对于片外对于片外RAMRAM,可以使用,可以使用RiRi,也可以使用,也可以使用DPTRDPT
27、R做间址寄做间址寄存器。两者区别在于后者寻址范围为存器。两者区别在于后者寻址范围为0000H0000HFFFFHFFFFH,两,两者都可以者都可以RAMRAM和和ROMROM。3 3,间址方式的指令不能访问,间址方式的指令不能访问SFRSFR中的单元。如下面的程序中的单元。如下面的程序是错误的:是错误的:MOV R1,#80HMOV R1,#80H MOV A,R1 MOV A,R1 (因为(因为80H80H为为SFRSFR的物理地址)的物理地址)MCS-51 片内、片外 数据存储器示意图 特殊功能寄存器SFR通用数据存储器80H7FH00HFFH片内数据存储器 片外数据存储器256B个字节
28、64KB个字节片外数据存储器64KB0000HFFFFH注意:1,访问片内RAM20H存储单元;MOV A,20H2,访问片外RAM存储单元;MOV R0,#20HMOVX A,R03,尽管片内与片外的RAM单元 的00H-FFH地址相重叠但由于指令的不同不会发生地址混乱。返回2.2.5 变址寻址指令使用指令使用DPTRDPTR或或PCPC中的内容作为基地址,再与累加器中的内容作为基地址,再与累加器A A的内容相加,其和作为操作数地址。如:的内容相加,其和作为操作数地址。如:MOVX A,A+PC MOVX A,A+PC ;PCPC内容与内容与A A的内容相加得操作数地址的内容相加得操作数地址
29、 并将此操作数送并将此操作数送A A MOVX A,A+DPTRMOVX A,A+DPTR;DPTRDPTR内容与内容与A A的内容相加得操作数的内容相加得操作数 地址并将此操作数送地址并将此操作数送A A使用变址指令时,要事先分别为使用变址指令时,要事先分别为A A、DPTRDPTR赋值,以便获赋值,以便获得操作数得地址。得操作数得地址。变址指令只适用于对变址指令只适用于对ROMROM存储器得访问,如查表等。存储器得访问,如查表等。【举例】:【举例】:已知已知ROMROM中中0302H0302H 单元有一个数单元有一个数x x,现要把它送到,现要把它送到累加器累加器A A中,试编程。中,试编
30、程。MOV DPTR,#0300H MOV DPTR,#0300H ;立即数送;立即数送DPTRDPTR MOV A,#02H MOV A,#02H ;立即数送累加器;立即数送累加器A A MOVC A,A+DPTR MOVC A,A+DPTR ;从;从ROMROM的的0030200302单元取数送单元取数送A A变址寻址示意图02H0300HROMROM X XALU0302H累加器ADPTR0300H+02H0302HMOVC A,A+DPTRMOVC A,A+DPTR返回2.2.6 相对寻址转移指令中使用的一种寻址方式。转移指令中使用的一种寻址方式。MCS-51MCS-51单片机的指令单
31、片机的指令系统中,有两类转移指令:系统中,有两类转移指令:相对转移(相对转移(2 2个或个或3 3个字节)个字节)绝对转移(绝对转移(3 3个字节)。个字节)。在在绝对转移指令绝对转移指令中中,指令直接给出转移的目标地址,指令直接给出转移的目标地址(2 2字节地址),执行时将目标地址直接送给字节地址),执行时将目标地址直接送给PCPC,从而控,从而控制程序转移;制程序转移;而而相对转移指令相对转移指令在执行中是将在执行中是将PCPC值与指令中的值与指令中的8 8位偏位偏移量进行相加,形成指令要转移的目标地址。移量进行相加,形成指令要转移的目标地址。SJMP relSJMP rel由指令中有一个
32、由指令中有一个8 8位偏移量位偏移量 relrel 为带符号位的补码,所以控为带符号位的补码,所以控制程序转移的范围为制程序转移的范围为+127+127-128-128。54H2002H程序存程序存储器储器ROMROM80H80H54H54H ALU2056H累加器APC2002H+54H2056H操作码偏移量例如:SJMP 54H ;(80H、54H)2000H2002H(LOOP1)相对寻址使用中应注意的问题相对寻址使用中应注意的问题 与绝对寻址相比,相对寻址具有很好的与绝对寻址相比,相对寻址具有很好的“浮动性浮动性”,因此是编程人员普遍使用的一种寻址方式。因此是编程人员普遍使用的一种寻址
33、方式。使用时,要注意使用时,要注意3 3点:点:1,CPU1,CPU进行地址计算时,进行地址计算时,PCPC取值是执行本指令后的地址取值是执行本指令后的地址值。以上面的例子说明:值。以上面的例子说明:指令本身的首地址是指令本身的首地址是2000H,2000H,执行完后变为执行完后变为2002H(2002H(既既下一条指令的首地址)。下一条指令的首地址)。如果使用三字节的相对转移指令,则如果使用三字节的相对转移指令,则PC=PC+3PC=PC+3。返回上一页2,2,偏移量的计算:偏移量的计算:rel=rel=目标地址目标地址-源地址源地址-2 (2-2 (2字节指令)字节指令)或:或:rel=r
34、el=目标地址目标地址-源地址源地址-3 (3-3 (3字节指令)字节指令)结果用补码的形式书写。结果用补码的形式书写。为了减少计算偏移量的计算,汇编程序允许使用为了减少计算偏移量的计算,汇编程序允许使用“符符号地址号地址”的方式代替偏移量。如:的方式代替偏移量。如:SJMP loop1 SJMP loop1 汇编程序在翻译时,自动计算并将结果替换符号地址。汇编程序在翻译时,自动计算并将结果替换符号地址。3,3,如果转移地址的范围超过相对寻址的范围(如:如果转移地址的范围超过相对寻址的范围(如:-127-127+128+128)时,就要采用别的方式法,否则在编译时,提示)时,就要采用别的方式法
35、,否则在编译时,提示出错。出错。返回2.2.7 位寻址在在位寻址指令(位操作指令)位寻址指令(位操作指令)中使用的位地址。中使用的位地址。在一般的情况下,系统的数据都是按字节(在一般的情况下,系统的数据都是按字节(8 8位)来存位)来存放、处理。放、处理。单片机在控制、检测的应用中,系统的输入、输出数单片机在控制、检测的应用中,系统的输入、输出数据有很多属于开关量信号。这些开关量信号以据有很多属于开关量信号。这些开关量信号以 bitbit-“-“位位”的形式进行各种运算、处理和存储的。的形式进行各种运算、处理和存储的。MCS-51单片机控制、检测系统驱动器电动机外设1外设2状态信号状态信号控制
36、信号在在MCS-51MCS-51单片机的硬件设计上充分考虑了这种单片机的硬件设计上充分考虑了这种“布尔布尔”变量的处理,不仅在指令系统中设计了变量的处理,不仅在指令系统中设计了“位操作位操作”指令,指令,而且在片内而且在片内RAMRAM区中还专门开辟了一个区中还专门开辟了一个“位寻址区位寻址区”。这样,布尔变量可以向字节数据一样进行存储、寻址。这样,布尔变量可以向字节数据一样进行存储、寻址。除了位寻址区外,除了位寻址区外,RAMRAM中的大多中的大多SFRSFR都可以按位寻址,换都可以按位寻址,换句话,句话,SFRSFR除了有自己的字节地址外,在寄存器内的每一除了有自己的字节地址外,在寄存器内
37、的每一位还有其位地址。位还有其位地址。【举例】:【举例】:SETB 20HSETB 20H ;将位地址为将位地址为20H20H的位置一的位置一 SETB 90HSETB 90H ;将将P1P1口的口的d0d0位置一位置一同字节寻址中的直接寻址一样,为了增加程序的可读性,同字节寻址中的直接寻址一样,为了增加程序的可读性,凡在凡在SFRSFR中的中的位地址位地址都可以使用都可以使用符号地址符号地址来替代。如第二来替代。如第二例中,完全可以使用下面的指令格式:例中,完全可以使用下面的指令格式:MOV P1.0MOV P1.0 ;将将P0P0口的口的d0d0位置一位置一 类似还有:类似还有:MOV C
38、,ACC.7MOV C,ACC.7 ;将累加器中的将累加器中的d7d7位送位送PSWPSW的的cycy 这种指令在汇编程序进行翻译时,还是要先将符号地址这种指令在汇编程序进行翻译时,还是要先将符号地址转换为真正的位地址。转换为真正的位地址。返回2.3 数据传送指令2.3.0 2.3.0 传送指令的特点传送指令的特点2.3.12.3.1 内部数据传送类指令内部数据传送类指令2.3.22.3.2 外部数据传送类指令外部数据传送类指令2.3.32.3.3 堆栈操作指令堆栈操作指令2.3.42.3.4 数据交换指令数据交换指令继续数据传送是编程中使用最多、最主要的操作。它的功能是将数据传送是编程中使用
39、最多、最主要的操作。它的功能是将数据在累加器、片内的数据在累加器、片内的RAMRAM、SFRSFR及片外及片外ROMROM、RAMRAM之间之间进行传送。进行传送。在传送类指令中在传送类指令中,必须指定被传送数据的必须指定被传送数据的源地址源地址和和目标地址目标地址。在传送过程中,在传送过程中,源地址的内容源地址的内容不被改变。不被改变。传送类指令除了传送类指令除了以累加器以累加器A A为目标的传送为目标的传送对对PSWPSW的的P P有影响外,有影响外,其余的传送类指令对其余的传送类指令对PWSPWS一概无影响。一概无影响。操作码操作码数据的目标地址数据的目标地址数据的源地址数据的源地址【举
40、例】:MOV A,R0 ;将R0寄存器中的数据送 累加器A中(注意寻址方式)指令通式:MOV ,2.3.0 传送指令的特点返回2.3.1 内部数据传送类指令特点特点:指令的源操作数和目的操作数都在单片机内部。指令的源操作数和目的操作数都在单片机内部。1,立即寻址型传送指令2,直接寻址型传送指令3,寄存器寻址型传送指令4,寄存器间址型传送指令5,内部数据传送类指令的使用继续1 1,立即寻址型传送指令,立即寻址型传送指令【特点特点】:原操作数字节是立即数原操作数字节是立即数,处在指令的第二或第,处在指令的第二或第三字节,所以这类指令都是多字节指令。这类指令有如下三字节,所以这类指令都是多字节指令。
41、这类指令有如下4 4条。条。MOV A,#dataMOV A,#data ;A data (;A data (双字节指令)双字节指令)MOV Rn,#dataMOV Rn,#data ;Rn data (;Rn data (双字节指令)双字节指令)MOV Ri,#dataMOV Ri,#data ;(RiRi)data (data (双字节指令)双字节指令)MOV direct,#dataMOV direct,#data ;direct data (;direct data (三字节指令)三字节指令)这类指令多用于程序的初始化。如:这类指令多用于程序的初始化。如:MOV R0,#20H MOV
42、 R0,#20H MOV A,#00H MOV A,#00H立即寻址指令举例已知:已知:R0=20H,R0=20H,试问单片机执行如下指令后,累加器试问单片机执行如下指令后,累加器A A、R7 R7、20H20H和和21H21H单元中的内容是什么。单元中的内容是什么。MOV A,#18H MOV A,#18H ;立即数立即数18H18H送累加器送累加器A A MOV R7,#28H MOV R7,#28H ;立即数立即数28H28H送寄存器送寄存器R7R7MOV R0,#38H MOV R0,#38H ;立即数立即数38H38H送内存送内存20H20H单元单元MOV 21H,#48H MOV
43、21H,#48H ;立即数立即数48H48H送内存送内存21H21H单元单元返回2,直接寻址型传送指令【特点特点】:指令中至少含有一个:指令中至少含有一个源操作数源操作数或或目的操作数的目的操作数的地址地址。很明显,这也是。很明显,这也是2 2个或个或3 3个字节的指令格式,其中直个字节的指令格式,其中直接地址在第接地址在第2 2或第或第3 3个字节上。这类指令有如下个字节上。这类指令有如下5 5条:条:MOV A,direct MOV A,directMOV direct,AMOV direct,AMOV Rn,directMOV Rn,directMOV Ri,directMOV Ri,d
44、irectMOV direct2,direct1MOV direct2,direct1 【注意注意】:directdirect为内部寄存器、为内部寄存器、RAMRAM和和SFRSFR的地址,换的地址,换句话说:句话说:directdirect适用于片内所有的地址(寄存器、适用于片内所有的地址(寄存器、SFRSFR和和RAM)RAM)。直接寻址指令举例 MOV A,30H MOV A,30H ;内存内存RAM30hRAM30h单元数据送单元数据送A AMOV 50H,A MOV 50H,A ;A A中内容送中内容送RAMRAM的的50h50h单元单元MOV R6,31H MOV R6,31H ;
45、RAMRAM的的30h 30h 内容送内容送R6R6寄存器寄存器MOV Ri,30H MOV Ri,30H ;RAM30hRAM30h内容送内容送RiRi指定的指定的RAMRAM单元单元MOV P1,32H MOV P1,32H ;RAM32hRAM32h内容送内容送P1P1口(口(p1:p1:符号地址)符号地址)MOV 90H,32H MOV 90H,32H ;(同上,试比较两种表示方法)(同上,试比较两种表示方法)返回3,寄存器寻址型传送指令指令中含有存放操作数的寄存器名指令中含有存放操作数的寄存器名RnRn 其中其中(n n00,1,2,3,4,5,6,7)1,2,3,4,5,6,7)。
46、共有如下三条:共有如下三条:MOV A,RnMOV A,RnMOV Rn,AMOV Rn,AMOV direct,RnMOV direct,Rn返回4,寄存器间接寻址型传送指令指令特点:指令中指令特点:指令中RiRi中存放的不是操作数本身,而是操作中存放的不是操作数本身,而是操作数在数在RAMRAM中的地址(中的地址(i=0i=0、1 1)。)。格式如下:格式如下:MOV A,RiMOV A,RiMOV Ri,AMOV Ri,AMOV direct,RiMOV direct,Ri 【注意】;【注意】;RiRi中存放操作数的地址是有所选择的,只有非中存放操作数的地址是有所选择的,只有非SFRSF
47、R的的RAMRAM单元才能使用这种寻址方式。单元才能使用这种寻址方式。寄存器间接寻址指令举例已知已知(40h)=11h,(41h)=22h,R0=40h40h)=11h,(41h)=22h,R0=40h和和R1=41hR1=41h。试。试问,下面的指令执行后,累加器问,下面的指令执行后,累加器A A、40h40h、41h41h和和42h42h单元中的内容是什么。单元中的内容是什么。MOV A,R0 MOV A,R0 ;RAM40hRAM40h单元内容单元内容11h11h送送A A MOV R1,A MOV R1,A ;A A中的中的11h11h送送RAMRAM的的41h41h单元单元 MOV
48、42H,R1 MOV 42H,R1 ;RAMRAM的的41h41h单元内容单元内容11h11h送送 RAM42h RAM42h中中返回5,内部数据传送类指令的使用1 1,在使用传送指令时,在使用传送指令时,可以根据实际情况选用恰当寻址方可以根据实际情况选用恰当寻址方式。上面给出的各种类型的传送指令是式。上面给出的各种类型的传送指令是INTELINTEL公司在设计公司在设计MCS-51MCS-51的硬件时就已经确定下来。编程人员只能像查字的硬件时就已经确定下来。编程人员只能像查字典一样去查找、使用。不能根据主观意愿去典一样去查找、使用。不能根据主观意愿去“创造创造”指令。指令。例如:要将例如:要
49、将R0R0中的数据传送到中的数据传送到R1R1中。如何使用指令去完中。如何使用指令去完成上面的操作?成上面的操作?mov r1,r0mov r1,r0 是否可以?回答是否定的!因为在是否可以?回答是否定的!因为在MCS-51MCS-51的指令系统中没有此条指令!只能使用:的指令系统中没有此条指令!只能使用:1 1,mov a,r0mov a,r0 或:或:2,mov 01h,00h2,mov 01h,00h mov r1,amov r1,a 因此,必须从因此,必须从MCS-51MCS-51的指令表中选择使用指令。的指令表中选择使用指令。MCS-51内部数据传送类指令方式图累加器Adirect直
50、接寻址Ri间址Rn寄存器Data立即数返回上一次2 2,以累加器,以累加器A A为目的寄存器的传送指令会影响为目的寄存器的传送指令会影响PSWPSW中的中的 奇偶位奇偶位P P,而其余的指令对,而其余的指令对PSWPSW均无影响。均无影响。3 3,要会正确地估计指令的字节。凡是指令中包含有立即,要会正确地估计指令的字节。凡是指令中包含有立即 数、直接地址的指令,都应当在原有的基础上加数、直接地址的指令,都应当在原有的基础上加1 1。【举例】:【举例】:mov a,Ri ()mov a,Ri ()个字节个字节 mov a,direct ()mov a,direct ()个字节个字节 mov di