第三章 单片机指令系统_第1页
第三章 单片机指令系统_第2页
第三章 单片机指令系统_第3页
第三章 单片机指令系统_第4页
第三章 单片机指令系统_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机指令系统单片机指令系统第三章第三章 单片机指令系统单片机指令系统调用子程序及返回指令调用子程序及返回指令分类指令分类指令寻址方式寻址方式指令分类指令分类MCS-51MCS-51指令系统的分类,格式及一般说明指令系统的分类,格式及一般说明 例:例: LOOP: MOV A ,#40H ;取参数取参数操作码操作码 操作数操作数1,操作数,操作数2 ;注释注释标号标号指令的符号指令的符号地址。地址。操作码操作码指明指令指明指令功能功能操作数操作数指令操作对象。包指令操作对象。包括数据、地址、寄括数据、地址、寄存器名及约定符号存器名及约定符号注释注释说明指令在说明指令在程序中的作程序中的作用用操

2、作码操作码和和操作数操作数是指令主体是指令主体。MOV_move传送传送XCH_exchange交换交换ANL_and logic与逻辑运算与逻辑运算XRL_exclusive or异或运算异或运算MUL_Multiply乘法乘法RR_rotate right右循环右循环SJMP_short jump短跳转短跳转RET_return 子程序返回子程序返回111010000111111000110010011101010100000001100100举例:举例:汇编语言:汇编语言:机器语言:机器语言:MOV A,R0 E8HMOV R6,#32H 7EH 32HMOV 40H,#64H 75H

3、40H 64H 指令中操作码和操作数是指令主体,称为指令指令中操作码和操作数是指令主体,称为指令可执行部分,附录指令表中可查出对应指令代码。可执行部分,附录指令表中可查出对应指令代码。 分为分为单字节单字节、双字节双字节和和三字节三字节指令指令 操作码操作码 操作数操作数1 操作数操作数2 Rn当前工作寄存器区中的8个寄存器R.0R7(n=07)。 Ri当前工作寄存器区中的2个工作寄存器R0,R1(i=0,1) direct8位的内部数据存储器单元中的地址。 #data包含在指令中的8位常数。 #data16包含在指令中的16位常数。 addr1616位目的地址。 addr1111位目的地址。

4、 rel8位带符号的偏移字节,简称偏移量。 DPTR数据指针,可用作16位地址寄存器。 bit内部RAM或专用寄存器中的直接寻址位。在介绍指令之前,先把描述指令的一些符号的意义作些介绍在介绍指令之前,先把描述指令的一些符号的意义作些介绍。 A累加器。 B专用寄存器,用于乘法和除法指令中。 C进位标志或进位位,或布尔处理机中的累加器。 间址寄存器或基址寄存器的前缀,如Ri、DPTR。 / 位操作数的前缀,表示对该位操作数取反,如/bit。 单元中的内容。 ()由寻址的单元中的内容。 箭头左边的内容被箭头右边的内容所代替。 位位( (b) b) 位寻址区中的一位二进制数据位寻址区中的一位二进制数据

5、 字节字节( (B) 8B) 8位二进制数据位二进制数据 字字( (W) 16W) 16位双字节数据位双字节数据寻址方式寻址方式:1 12 27 73 36 6 4 45 5立即寻址立即寻址直接寻址直接寻址位寻址位寻址寄存器寻址寄存器寻址相对寻址相对寻址寄存器间接寻址寄存器间接寻址变址寻址变址寻址一一.立即寻址方式立即寻址方式 指令中给出实际操作数据指令中给出实际操作数据( (立即数)。立即数)。指令本身直接含有所需要的8位或16位的操作数。 将此数称为“立即数”(使用#标明)。如: MOV A,#30H ;将(8位)立即数送累加器A MOV DPTR,#2000H ;16位立即数送DPTR寄

6、存器【注意】:MOV A,#30H MOV A,30H 两者的区别。 立即数寻址的指令长度为2或3个字节。74H30Hnn+1ROM累加器AMOV A,#30H 指令执行流程90H20H00HROMDPTRMOV DPTR,#2000H指令的存储和执行返回寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址二二. .直接寻址方式直接寻址方式 指令中直接给出操作数地址的寻址方式指令中直接给出操作数地址的寻址方式,能直接寻址的存,能直接寻址的存储空间为内部储空间为内部RAMRAM和特殊功能寄存器(和特殊功能寄存器(SFRSFR)。)。 例例2 2:MOV MOV PSWPSW,#20H

7、#20H;PSW PSW #20H#20H PSWPSW为直接寻址寄存器的符号地址为直接寻址寄存器的符号地址。例例1 1: :MOV AMOV A,30H30H;A A (30H30H)65H 31H 7FH30H 65HA思考题思考题:直接寻址方式指令和立即寻直接寻址方式指令和立即寻址方式指令的形式有什么不同?址方式指令的形式有什么不同?寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址使用直接寻址应注意的三个问题使用直接寻址应注意的三个问题: 指令助记符中指令助记符中direct是用是用16进制数表示的操作数地址。进制数表示的操作数地址。 当地址恰好在当地址恰好在SFR区域时

8、区域时,指令也可以用寄存器名来表指令也可以用寄存器名来表 示。示。如:如: MOV A,80H 可以写成可以写成 MOV A,P0 后者用后者用SFR中寄存器的名字取代它的物理地址中寄存器的名字取代它的物理地址80H。很。很明显,后者更容易阅读和交流,明显,后者更容易阅读和交流,所以我们提倡使用所以我们提倡使用SFR中中寄存器名称来代替直接地址。寄存器名称来代替直接地址。 如:如:MOV A,SBUF ;串口数据缓冲器数据送串口数据缓冲器数据送A MOV IE,#00H ;初始化中断允许寄存器初始化中断允许寄存器 MOV TH1,#0FEH ;为定时器为定时器1赋初值赋初值 尽管使用尽管使用S

9、FR的寄存器名称来取代直接地址,可以带的寄存器名称来取代直接地址,可以带来程序的可读性,但是在汇编时,仍要将寄存器名字转换来程序的可读性,但是在汇编时,仍要将寄存器名字转换为直接地址为直接地址。 当直接寻址时在工作寄存器区中时,可以使用两种寻址当直接寻址时在工作寄存器区中时,可以使用两种寻址 方式来访问。如方式来访问。如: MOV A,00H ;将将RAM中中00H单元数据送累加器单元数据送累加器A MOV A,R0 ;将工作寄存器将工作寄存器R0的内容送累加器的内容送累加器A 这里使用了不同的寻址方式,其指令的结构也不相同。这里使用了不同的寻址方式,其指令的结构也不相同。 前者前者是是:11

10、100101(E5H)、00000000(00H) 双字节。双字节。 后者的机器码是后者的机器码是:11101000(E8H) 单字节单字节; 在物理结构上在物理结构上,R0与与RAM的的00H单元恰好是同一单元,所以单元恰好是同一单元,所以不同的指令而执行结果是一样的。不同的指令而执行结果是一样的。 类似的还有累加器类似的还有累加器A: INC A 寄存器寻址方式(单字节);寄存器寻址方式(单字节); INC ACC 直接寻址方式(双字节);直接寻址方式(双字节); INC E0H 直接寻址方式(双字节)。直接寻址方式(双字节)。 一一.立即寻址方式立即寻址方式 在指令系统中:在指令系统中:

11、字节地址与位地址是完全不同的概念。字节地址与位地址是完全不同的概念。 前者用前者用directdirect表示,而后者用表示,而后者用bit bit 表示,但在指令中表示,但在指令中 都是用都是用1616进制表示的数进制表示的数。如:。如: MOV A,20HMOV A,20H ;将;将RAMRAM的的20H20H单元内容送单元内容送A A MOV C,20HMOV C,20H ;将位寻址区中的位地址为;将位寻址区中的位地址为20H20H位位 内容送内容送 PSW PSW 中的中的CyCy中。中。片内片内 RAMRAM(20H-2FH20H-2FH)中的位寻址区结构图中的位寻址区结构图7F7E

12、7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837262524232221202F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002FH2FH20H字节地址字节地址24H位地址位地址以通用寄存器的内容为操作数的寻址方式。以通用

13、寄存器的内容为操作数的寻址方式。通用寄存器指通用寄存器指 A,B,DPTR, R0-R7A,B,DPTR, R0-R7例例: :MOV AMOV A,R0R0;A AR0R0设指令执行前设指令执行前 A=20HA=20H,R0=40HR0=40H,执行指令后,执行指令后,A= A= ?,?,R0=R0= ?40H40H0100 0000A0010 0000R00100 0000三三. .寄存器寻址方式寄存器寻址方式寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址R0-R7ABDPTR 以寄存器中以寄存器中内容为地址内容为地址,以该,以该地址中内容为操地址中内容为操作数的寻址方式

14、作数的寻址方式。存放地址的寄存器称为间址寄。存放地址的寄存器称为间址寄存器或数据指针,包括存器或数据指针,包括R0R0,R1R1,DPTRDPTR,SPSP等。等。例例: : MOV AMOV A,R0R0;A A(R0)(R0) 设指令执行前设指令执行前 A=20HA=20H,R0=40HR0=40H,地址为地址为4040H H存储存储 器单元内容如图器单元内容如图。执行指令后,执行指令后,A= A= ?,R0 = ,R0 = ? ,(40H)= ,(40H)= ? 41H 67H 40H 30H30H 40H30HR04040H H四四. .寄存器间接寻址方式寄存器间接寻址方式寄存器寻址直

15、接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址R0R1DPTR一一.立即寻址方式立即寻址方式使用寄存器间址指令时应注意的三个问题使用寄存器间址指令时应注意的三个问题: 间址寄存器间址寄存器Ri只能使用只能使用R0、R1寄存器(寄存器(i=0、1)。)。 间址方式不仅用于片内间址方式不仅用于片内RAM,同样也适用于片外,同样也适用于片外RAM。 对于片内对于片内RAM使用使用Ri寄存器,寻址范围为寄存器,寻址范围为00HFFH。 对于片外对于片外RAM,可以使用,可以使用Ri,也可以使用,也可以使用DPTR做间址做间址 寄存器,两者区别在于后者寻址范围为寄存器,两者区别在于后者寻址范围为0

16、000H FFFFH。 间址方式的指令不能访问间址方式的指令不能访问SFR中的单元。如下面的程中的单元。如下面的程 序是错误的:序是错误的: MOV R1,#80H MOV A,R1 (因为80H为SFR的物理地址)五五.变址寻址方式变址寻址方式 指令使用指令使用DPTR或或PC中的内容作为基地址,再与累加器中的内容作为基地址,再与累加器A的的内容相加,其和作为操作数地址。如:内容相加,其和作为操作数地址。如: MOVC A,A+PC ; PC内容与内容与A的内容相加得操的内容相加得操 作数地址并将此操作数送作数地址并将此操作数送A MOVC A,A+DPTR;DPTR内容与内容与A的内容相加

17、得的内容相加得 操作数地址并将此操作数送操作数地址并将此操作数送A 使用变址指令时,要事先分别为使用变址指令时,要事先分别为A、DPTR赋值,以便获得赋值,以便获得操作数得地址。操作数得地址。 变址指令只适用于对变址指令只适用于对ROM存储器得访问,如查表等。存储器得访问,如查表等。一一.立即寻址方式立即寻址方式 【举例举例】:已知已知ROM中中0302H 单元有一个数单元有一个数01H,现要把它,现要把它送到累加器送到累加器A中,试编程。中,试编程。 MOV DPTR,#0300H ;立即数送;立即数送DPTR MOV A,#02H ;立即数送累加器;立即数送累加器A MOVC A,A+DP

18、TR ;从;从ROM的的00302单元取数送单元取数送A五五.变址寻址方式变址寻址方式ROM 0102H0300HALU0302H累加器ADPTR0300H+ 02H0302H变址寻址示意图变址寻址示意图:寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址ADPTRPC对位地址中的内容作位操作的寻址方式。对位地址中的内容作位操作的寻址方式。它其实是一它其实是一种直接寻址方式。种直接寻址方式。例:例: MOV C,40H;Cy(位地址位地址40H) 设指令执行前设指令执行前 Cy=1,位地址位地址40H存储器单元如上图,存储器单元如上图,执行指令后,执行指令后,Cy= ? 0六六.

19、位寻址方式位寻址方式28H 0110001029H 11010111位寻址区位寻址区47H-40H位地址号4FH-48H寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址10 0 0 0 0 0 0 0七、相对寻址七、相对寻址 以当前程序计数器以当前程序计数器PCPC的内容为基础,加指令给出的一的内容为基础,加指令给出的一偏移量形成新的偏移量形成新的PCPC值的寻址方式。值的寻址方式。 例如例如:SJMP 54H ;(80H、54H) 54H2002H程序存储器ROM80H54H ALU2056H累加器累加器APC2002H+ 54H2056H操作码操作码偏移量偏移量2000H2

20、002H(LOOP1)寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址相对寻址使用中应注意的问题相对寻址使用中应注意的问题: : 与绝对寻址相比,相对寻址具有很好的与绝对寻址相比,相对寻址具有很好的“浮动性浮动性”,因此是,因此是编程人员普遍使用的一种寻址方式。编程人员普遍使用的一种寻址方式。 使用时,要注意使用时,要注意3点:点: CPU进行地址计算时,进行地址计算时,PC取值是执行本指令后的地址值。取值是执行本指令后的地址值。 以上面的例子说明:以上面的例子说明: 指令本身的首地址是指令本身的首地址是2000H,执行完后变为执行完后变为2002H(既下一条既下一条指令的首地

21、址)。指令的首地址)。 如果使用三字节的相对转移指令,则如果使用三字节的相对转移指令,则PC=PC+3。 偏移量的计算:偏移量的计算: rel=目标地址目标地址-源地址源地址-2 (2字节指令)字节指令) 或:或: rel=目标地址目标地址-源地址源地址-3 (3字节指令)字节指令) 结果用补码的形式书写结果用补码的形式书写。 为了减少计算偏移量的计算,汇编程序允许使用为了减少计算偏移量的计算,汇编程序允许使用“符符号地址号地址”的方式代替偏移量。如:的方式代替偏移量。如: SJMP loop1 汇编程序在翻译时,自动计算并将结果替换符号地址。汇编程序在翻译时,自动计算并将结果替换符号地址。

22、如果转移地址的范围超过相对寻址的范围(如:如果转移地址的范围超过相对寻址的范围(如:-127+128)时,就要采用别的方式法,否则在编译时,提示出)时,就要采用别的方式法,否则在编译时,提示出错。错。总结:寻址方式 寻址范围 直接寻址只能寻址片内RAM(00HFFH)寄存器寻址只能寻址A,B,DPTR ,R0R7寄存器间接寻址只能寻址内部RAM和片外RAM,不可寻址SFR变址寻址只能寻址ROM (MOVC)相对寻址只能寻址ROM 3-33-3 MCS-51MCS-51指令分类指令分类 指令按功能可分为如下几类:指令按功能可分为如下几类:12345数据传送指令数据传送指令算术运算类指令算术运算类

23、指令逻辑运算指令逻辑运算指令程序转移指令程序转移指令子程序调用及返回子程序调用及返回6位操作指令位操作指令一一.立即寻址方式立即寻址方式3.3 传送指令的特点 数据传送是编程中使用最多、最主要的操作。它的功能是将数据在累加器、片内的RAM、SFR及片外ROM、RAM之间进行传送。 在传送类指令中,必须指定被传送数据的源地址和目标地址。在传送过程中,源地址的内容不被改变。 传送类指令除了以累加器A为目标的传送对PSW的P有影响外,其余的传送类指令对PWS一概无影响。操作码数据的目标地址数据的源地址【举例】:MOV A,R0 ;将R0寄存器中的数据送 累加器A中(注意寻址方式)指令通式:MOV ,

24、1 12 23 34 45 5内部传送指令内部传送指令外部传送指令外部传送指令交换指令交换指令堆栈指令堆栈指令查表指令查表指令实现寄存器、存储器之间的数据传送实现寄存器、存储器之间的数据传送一一.立即寻址方式立即寻址方式一、内部传送指令一、内部传送指令:实现片内数据存储器中数据传送。:实现片内数据存储器中数据传送。指令格式:指令格式: MOV MOV 目的操作数,源操作数目的操作数,源操作数 指令通式指令通式: MOV , 寻址方式:寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器立即寻址、直接寻址、寄存器寻址、寄存器 间接寻址间接寻址MOV A,Rn ;ARnMOV A,direct ;A(

25、direct)MOV A,Ri ;A(Ri)MOV A,#data ;Adata指令机器码:指令机器码: E8EF E5 direct E6、E7 74 data (1)(1) 以以A A为目的操作数为目的操作数: 一一.立即寻址方式立即寻址方式例例1 1:顺序执行下列指令序列,求每一步执行结果顺序执行下列指令序列,求每一步执行结果。MOV A,#30HMOV 40H,AMOV R0,#20HMOV R0,40HMOV 30H,20H;A= 30H;(40H)= 30H;R0= 20H;(20H)= 30H;(30H)= 30H(1) (1) 以以A A为目的操作数为目的操作数: 一一.立即寻

26、址方式立即寻址方式(2) 以以Rn为目的操作数:为目的操作数: 例例2 2:以知以知A=2BH , R1=16H , (40H)=50H,A=2BH , R1=16H , (40H)=50H,执行下面各执行下面各指令指令MOV R1,AMOV R2,40HMOV R3,#33H;R1=2BH;R2=50H;R3= 33H一一.立即寻址方式立即寻址方式(3)(3) 以直接地址为目的操作数:以直接地址为目的操作数: MOV dir,A ;(dir)A MOV dir,Rn ;(dir)Rn MOV dir1,dir2 ;(dir1)(dir2) MOV dir,#data ;(dir)data M

27、OV dir,Ri ; (dir)(Ri) 例例3 3:以知以知A=30H , (30)=40H , (40H)=5EH,A=30H , (30)=40H , (40H)=5EH,执行下执行下面各指令面各指令MOV 20H,AMOV 30H,40HMOV R0,AMOV 40H,R0;(20H)A ,将将A中数据取出送入中数据取出送入20H单元单元;(;(30H)(40H),将将40H单元中数据取出送入单元中数据取出送入30H;R0 A,将将A中数据取出送入中数据取出送入R0;(;(40H)(R0),将将R0间接寻址的单元中数据送间接寻址的单元中数据送入入40H单元单元一一.立即寻址方式立即寻

28、址方式(4)(4) 以间接地址为目的操作数:以间接地址为目的操作数: 例例4 4:设(设(30H30H)=6FH,R1=40H,=6FH,R1=40H, MOV R1MOV R1,30H30H ;30H30H单元中数据取出送入单元中数据取出送入R1R1 间接寻址的间接寻址的40H40H单元,单元, (40H40H)=6FH=6FH (5)(5) 以以DPTRDPTR为目的操作数:为目的操作数:说明:说明: 4.4.只有指令表中的指令才有对应指令代码,计算机只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。才能执行。编程时,不能随意创造发明指令。1. 1. 一条指

29、令中不能同时出现两个工作寄存器:一条指令中不能同时出现两个工作寄存器:非法非法指令:指令:MOV R1,R2MOV R2,R02. 2. 间址寄存器只能使用间址寄存器只能使用 R0R0、R1R1。 非法非法指令:指令:MOV A,R23. 3. SFRSFR区只能直接寻址,不能用寄存器间接寻址。区只能直接寻址,不能用寄存器间接寻址。非法非法指令:指令:MOV R0,#80HMOV A,R0;间接;间接 MOV A,80H ( )一一.立即寻址方式立即寻址方式二、二、 外部传送指令外部传送指令:实现片外数据存储器或程序存储器实现片外数据存储器或程序存储器和累加器和累加器A A之间的数据传送。之间

30、的数据传送。 指令格式指令格式:MOVX 目的操作数目的操作数,源操作数源操作数寻址方式寻址方式:片外数据存储器用寄存器间址方式。:片外数据存储器用寄存器间址方式。1. 1. DPTR作作1616位数据指针,寻址位数据指针,寻址6464KBKB片外片外RAM空间空间MOVX A,DPTR;A(DPTR)MOVX DPTR,A;(DPTR)A2. 2. Ri作作8 8位数据指针,寻址位数据指针,寻址256256B B片外片外RAM空间空间MOVXA,Ri;A(P2Ri) MOVXRi,A ;(P2Ri)A指指令令机机器器码码E2E2E3HE3HF2F2F3HF3HE0HE0HF0HF0H一一.立

31、即寻址方式立即寻址方式MOV DPTR,#2000HMOVX A,DPTRMOV DPTR,#2100HMOVX DPTR,A; DPTR= 2000H; A= X; DPTR= 2100H;(2100H)= X片外数据存储器不能直接寻址。下列为片外数据存储器不能直接寻址。下列为非法非法指令:指令: MOVX A,2000H ( ) MOVX 2100H,2000H ( )例例3 3:将片外数据存储器数据从将片外数据存储器数据从20002000H H传送传送到到21002100H H。思考题:思考题:为什么对为什么对DPTR的数据的数据传送使用内部传送指令?传送使用内部传送指令?习题:习题:

32、将片外将片外RAM 0000H单元的数单元的数据传送据传送到片内到片内RAM地址为地址为6060H H的单元的单元。一一.立即寻址方式立即寻址方式2,外部ROM的字节传送指令指令格式指令格式:MOVC 目的操作数目的操作数,源操作数源操作数寻址方式寻址方式:变址寻址方式。变址寻址方式。例如: MOVC A,A+DPTR ;A (A+DPTR) MOVC A,A+PC ;PC PC+1, A (A+PC) 该指令也称为“查表”指令。在ROM中建立一个数据表,可以使用DPTR、PC作为数据表格的基地址。 在第一条指令中:用DPTR作为基地址。使用前,先将数据表的首地址送入DPTR中,累加器A作为偏

33、移量。由两者数据相加得到待查的表中数据地址并取出。 第二条指令是以程序计数器PC为基地址。由于PC的内容与该指令在ROM中的位置有关,所以一旦该指令在程序中的位置确定,其PC的值也就确定。外部ROM的字节传送指令举例: 已知累加器A中存有09范围内的数,试用查表指令编写出查找出该数平方的程序。 1,采用DPTR作基址寄存器: 设平方表的首地址为2000h,累加器A中的内容恰好是查表的偏移量。首先将表的起始地址2000h送入DPTR中。 MOV DPTR,#2000H ;指针赋值;指针赋值 MOVC A,A+DPTR ;平方值送;平方值送AROM01491625364964812000h2009

34、h2008h2007h2006h2005h2004h2003h2002h2001h 2,采用PC作基址寄存器:与DPTR不同,使用PC作为基地址时,必须对累加器A的数据进行修正,以保证A+PC恰好找到待查的平方值地址。 ORG 1FFBH1FFBH 74 data ADD A,#data ;data=02h1FFDH 83H MOVC A,A+PC ;PC=1FFE1FFEH 80FEH SJMP $2000H 00H DB 0 ;平房表首址2001H 01H DB 12002H 04H DB 42003H 09H DB 92004H 10H DB 162005H 19H DB 25 : :

35、:2009H 51H DB 81 ENDdata为MOVC指令首地址与表头地址之间的单元数。74hdata83h80hFEh01491625364964812000h2009h2008h2007h2006h2005h2004h2003h2002h2001h1FFFh1FFEh1FFDh1FFCh1FFBh返回例:查表法求例:查表法求Y=XY=X2 2。设设X(0X15)X(0X15)在片内在片内RAMRAM的的2020H H单元中,要单元中,要求将查表求求将查表求Y Y,存入片内存入片内RAMRAM的的2121H H单元。单元。解法解法1:以以DPTR为基地址寄存器为基地址寄存器ORG 100

36、0HSQU:MOV DPTR,#TAB;确定表首地址(基地;确定表首地址(基地址)址)MOV A,20H;取取X(偏移量偏移量MOVC A,A+DPTR ;查表求查表求Y=X2MOV 21H,A;保存保存YRET ;子程序结束子程序结束 ;其它程序段;其它程序段ORG 2000H;常数表格首地址常数表格首地址TAB: DB 00,01,04,09,225;平方表平方表解法解法2:以以PC为基地址寄存器为基地址寄存器指令地址指令地址 源程序源程序 ORG 1000H ;程序起始地址程序起始地址 1000H SQU: MOV A,20H;取取X 1002H ADD A,#03H ;修正偏移量修正偏

37、移量 1004H MOVC A,A+PC ;查表求查表求Y=X2 1005H MOV 21H,A;存结果存结果 1007H RET ;子程序结束子程序结束 1008H TAB: DB 00,01,04 ;平方表平方表100BH DB 09,225 思考题:思考题:当当00X255X255时,如何用查表法编程求时,如何用查表法编程求Y=XY=X2 2。例例4 4:设设A= 29HA= 29H,(2AH)=38H,(2AH)=38H,执行指令执行指令 XCH AXCH A,2AH2AH后,后,A= A= ?(2AH)= (2AH)= ?三、三、 交换指令交换指令 : : 实现片内实现片内RAMRA

38、M区的数据双向传送。区的数据双向传送。1. 1. 字节交换指令字节交换指令XCH XCH A A,RnRn ;A A RnRnXCH XCH A A,RiRi ;A A ( (RiRi) ) XCH XCH A A,directdirect ;A A (direct)(direct)习题:习题:将片内将片内RAMRAM6060H H单元与单元与6161H H单元的数据交换。单元的数据交换。XCH 60HXCH 60H,61H 61H 对吗?对吗?38H29H指令机器码:指令机器码:C8C8CFHCFHC6C6C7H C7H C5C5 dir dir 2. 2. 半字节交换指令半字节交换指令XC

39、HD XCHD A A,RiRi ;A A0 03 3 (Ri)(Ri)0 03 3 SWAP ASWAP A ;A A4 47 7 A A0 03 3习题:习题:交换片内交换片内RAM RAM 4040H H单元和单元和 41 41H H单元的低半字节。单元的低半字节。指令机器码:指令机器码:D6D6D7HD7HC4 C4 一一.立即寻址方式立即寻址方式 1,: push direct ;sp+1sp,(direct)(sp) 2,: pop direct ;(sp)(direct),sp -1sp一一.立即寻址方式立即寻址方式 【注意】: SPSP SPSP 例:例:设设 A=02H,B=

40、56H,执行下列指令后,执行下列指令后,SP= ?,?,A= ? ,B= ?ASBR: MOV SP,#30H ;设栈底;设栈底 PUSH A PUSH B MOV A,#00H MOV B,#01H POP B POP ABPCPCPCPC SPSP 02H PCPCPCPCPCPCPCPCPCPC1MOV A,#1000H;A1000H2MOVX A,1000H;A(1000H)片外片外RAM3MOVC A,1000H;A(1000H)片外片外ROM4MOVX 60H,A;片外片外RAM(60H)A5MOV R0,60H ;片内片内RAM:(61H)(60H) MOV 61H,R06. X

41、CH R1,R2;R1R27. MOVX DPTR,#2000H ;DPTR2000H8. MOVX 60H,DPTR;片内片内RAM片外片外RAM习题:习题:找出指令错误并改正:找出指令错误并改正:一一.立即寻址方式立即寻址方式MCS-51 MCS-51 的程序状态字寄存器的程序状态字寄存器 PSW PSW 为标志寄存器。其格式如为标志寄存器。其格式如下:下: 其中标志位其中标志位( (自动设置状态自动设置状态) )为为CYCY、ACAC、OVOV和和P P。用户选择位用户选择位( (编程设置状态编程设置状态) )有有RS0RS0、RS1RS1和和F0F0。该类指令共该类指令共2424条。主

42、要是进行无符号数的四则运算。与数据条。主要是进行无符号数的四则运算。与数据传送指令不同,多数算术运算指令会影响标志位的状态,即传送指令不同,多数算术运算指令会影响标志位的状态,即CPUCPU执行算术运算指令后,根据数据操作情况自动设置标志位的状执行算术运算指令后,根据数据操作情况自动设置标志位的状态。态。 功能功能:完成:完成算术运算算术运算、逻辑运算逻辑运算和和循环移位循环移位三大功能。三大功能。 特点特点:大多指令都要由:大多指令都要由累加器累加器A来存放一个源操作数,并把操来存放一个源操作数,并把操作结果放回累加器作结果放回累加器A A中。中。1 1)不带进位加法)不带进位加法:指令格式

43、指令格式: ADD A,源操作数源操作数(影响影响 Cy、OV、AC、P) ADD A , Rn ; A A + Rn ADD A ,direct ; A A +(direct) ADD A ,Ri ; A A +(Ri) ADD A,#data ; A A + #data 例例1 1:A=3BH,PSW=0,执行指令执行指令 ADD A,#3BH求:求:A= ,Cy= ,OV= ,AC= ,P= , PSW= ? 一加、减指令一加、减指令1.加法指令加法指令 0011 10110011 1011 + + 0011 10110011 1011 0111 01100111 01107676H H

44、 0 0 0 0 1 1 1 101000001= 4101000001= 41H H解:解: OV=CyOV=Cy7 7CyCy6 6=0=0,无进位无进位Cy=0Cy=0,产生辅助进位产生辅助进位AC=1AC=1,A A中数据的个数为奇数,中数据的个数为奇数,P=1P=1。一一.立即寻址方式立即寻址方式 1001 10101001 1010 1110 00111110 0011 + + 0 0 1 1 0111 11010111 11012 2)带进位加法:带进位加法: 指令格式指令格式: ADDC A,源操作数源操作数(影响Cy、OV、AC、P) ADDC A , Rn ; A A +

45、Rn + C ADDC A ,direct ; A A +(direct)+ C ADDC A ,Ri ; A A +(Ri)+ C ADDC A,#data ; A A + #data + C 其中其中:C来自来自PSW状态寄存器中的进借位状态寄存器中的进借位C。例例2:A= 9AH,R2= E3H,PSW= 0,执行指令执行指令 ADDC A,R2 后求:后求:A= ,Cy= ,OV= ,AC= ,P= ,PSW= ?7 7DHDH 1 1 1 1 0 0 0 010000100 = 8410000100 = 84H H例例:设双字节数设双字节数 X X 存在片内存在片内RAMRAM 41

46、41H H、40H40H单元,单元,Y Y存在存在4242H H、43H43H单元,编程求单元,编程求 Z=X+YZ=X+Y,并存入片内并存入片内RAMRAM单元单元4444H H、45H45H、46H46H。ADDS:MOV A,40HADD A,42HMOV 44H,AMOV A,41HADDC A,43HMOV 45H,AMOV A,#0ADDC A,#0MOV 46H,ARET;取被加数低字节取被加数低字节;加上加数低字节;加上加数低字节;保存和的低字节;保存和的低字节;取被加数高字节;取被加数高字节;加上加数高字节;加上加数高字节;保存和的高字节;保存和的高字节;求高字节进位;求高字

47、节进位;子程序结束;子程序结束一一.立即寻址方式立即寻址方式 例:例:A= 5AH,R2= 5AH,Cy= 0,执行下列指令执行下列指令SUBB A,R2求:求: A= ,Cy= ,OV= ,P= ,AC= ?2 2带借位带借位减法指令减法指令指令格式:指令格式:SUBBSUBB A A,源操作数源操作数(影响影响CyCy、OVOV、ACAC、P P)SUBB A , Rn ; A A - Rn - C SUBB A ,direct ; A A -(direct)- C SUBB A ,Ri ; A A -(Ri)- C SUBB A,#data ; A A - #data C00 0 0 0

48、 000 0 0 0 0习题:习题:编程求双字节减法编程求双字节减法。设设X X、Y Y存在片内存在片内 RAM 60HRAM 60H起始单元,计算起始单元,计算 Z=X-Y Z=X-Y 。一一.立即寻址方式立即寻址方式 3. 3. 增量、减量指令增量、减量指令指令格式:指令格式: INCINC 单操作数单操作数 ;加加1 1指令指令 INC A ; A A + 1 INC Rn ; Rn Rn + 1 INC direct ; (direct) (direct)+ 1 INC Ri ; (Ri)(Ri)+ 1 INC DPTR ; DPTR DPTR + 1指令格式:指令格式: DECDEC

49、 单操作数单操作数 ;减;减1 1指令指令 DEC A ; A A - 1 DEC Rn ; Rn Rn - 1 DEC direct ; (direct) (direct)- 1 DEC Ri ; (Ri)(Ri)- 1 注意:注意:没有指令没有指令 DEC DPTRDEC DPTR 可用指令可用指令 DEC DPLDEC DPL 代替代替一一.立即寻址方式立即寻址方式二、乘除指令二、乘除指令指令格式指令格式:MULMUL AB AB ;BAABAAB B,Cy0Cy0,;当积高字节当积高字节B=0B=0,OV0OV0;B0B0,则则OV1OV1例:例:A=60H(96), B=C0H(19

50、2)A=60H(96), B=C0H(192),执行指令执行指令 MUL ABMUL AB 后,后, 求:求:A= A= ,B= B= ,Cy= Cy= ,OV= OV= ,P= P= ?解:解: 96 96 192 = 18432(4800192 = 18432(4800H)H)0000H H 48H48H 0 0 1 1 0 0指令格式指令格式:DIVDIV AB AB ;A AB B,AA商,商,BB余余Cy0Cy0, ;当除数当除数B=0B=0,OV1OV1;B0B0,则则OV0OV0一一.立即寻址方式立即寻址方式例:例:A=60H(96), B=C0H(192)A=60H(96),

51、B=C0H(192),执行指令执行指令 MUL ABMUL AB 后,后, 求:求:A= A= ,B= B= ,Cy= Cy= ,OV= OV= ,P= P= ?解:解: 96 96 192 = 18432(4800192 = 18432(4800H)H)0000H H 48H48H 0 0 1 1 0 0例:例:A=F6H(156)A=F6H(156),B=0DH(13)B=0DH(13),执行指令执行指令 DIV ABDIV AB 后后求:求:A= A= ,B= B= ,Cy= Cy= ,OV= OV= ,P= P= ?解:解: 156 156 13 = 13 = 1 12 2( (0 0

52、CH)CH),余数余数= 0= 0( (00H)00H)。1212H H 0CH0CH 0 0 0 0 0 0思考题:思考题:如何实现多字节数据的乘除运算。如何实现多字节数据的乘除运算。十进制加法指令十进制加法指令:ADD A,源操作数源操作数DA A带进位十进制加法指令带进位十进制加法指令:ADDC A,源操作数源操作数DA A 作业作业:BCDBCD码加法编程。码加法编程。设设X X、Y Y为为4 4位压缩位压缩BCDBCD码,求码,求 Z=X+YZ=X+Y。三、三、BCDBCD调整指令:调整指令:DAA;对对 A A 中加法结果进行调整,且必须跟中加法结果进行调整,且必须跟 ;在;在AD

53、DADD或或ADDCADDC指令之后。指令之后。 1)“与与”操作指令操作指令 ANL A ,Rn ;A A Rn ANL A , direct ;A A (direct) ANL A , Ri ;A A (Ri) ANL A ,#data ;A A #data ANL direct ,A ;(;(direct) (direct) A ANL direct , #data ;(;(direct) (direct) #data 逻辑运算指令共有逻辑运算指令共有24条。主要用于对条。主要用于对8位数进行逻位数进行逻辑辑“与与”、“或或”、“异或异或”、取反取反、清零清零以及以及循循环移位环移位。2

54、)“或或”操作指令操作指令 ORL A ,Rn ;A A Rn ORL A , direct ;A A (direct) ORL A , Ri ;A A (Ri) ORL A ,#data ;A A #data ORL direct ,A ;(;(direct) (direct) A ORL direct , #data ;(;(direct) (direct) #data5)8 8位循环指令位循环指令 RL A ;A A循环左移一位循环左移一位 RR A ;A A循环右移一位循环右移一位 3)“异或异或”操作指令操作指令 XRL A ,Rn ;A A Rn XRL A , direct ;A

55、 A (direct) XRL A , Ri ;A A (Ri) XRL A ,#data ;A A #data XRL direct ,A ;(;(direct) (direct) A XRL direct , #data ;(;(direct) (direct) #data 4)求反与清除指令求反与清除指令 CPL A ;A A CLR A ;A 0A7 A0A7 A06 6)9 9位循环指令位循环指令RLC A;RRC A;例例2 2:A=23H, CPL A ,A= ?解:解: 23HDCH。例例1 1:A=23H,(,(20H)=40H, ANL A,20H 后后 A= ?解:解:

56、23H40H=00H例例3 3:A=20H, RL A 后,后,A= ?解:解: A中的各位向左移中的各位向左移1 1位后,位后,A=40H。0000H HDCHDCH4040H HA7 A0A7 A0CyCy例例4 4:设设 A= 11000101 A= 11000101 ,Cy= 0Cy= 0,: : CPL A :A= , Cy= RL ARLC A 1000101010001010 1 1例例5 5:CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A0CyR6R5Cy;Cy=0Cy=0, 设设 R6= 55H R6= 55H ,R5= AAH

57、R5= AAH;R6=01010101R6=01010101,R5=10101010R5=10101010,Cy=0Cy=0;R6=01010101R6=01010101,R5=01010100R5=01010100,Cy=1Cy=1;R6=10101011R6=10101011,R5=01010100R5=01010100,Cy=0Cy=0思考题:思考题: 按转移条件分类:按转移条件分类:1)1)无条件转移无条件转移:执行无条件转移指令,程序无条件转移到指定处。执行无条件转移指令,程序无条件转移到指定处。2)2)条件转移条件转移:指令中给出转移条件,执行指令时,先测试条件,若满足条指令中给出

58、转移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则仍顺序执行程序。件,则程序发生转移,否则仍顺序执行程序。 按转移方式分类:按转移方式分类:1)1)绝对转移绝对转移:指令给出转移目的的绝对地址指令给出转移目的的绝对地址 nn,执行指令后,执行指令后,PCnn。2)2)相对转移相对转移:指令给出转移目的与转移指令的相对偏移量指令给出转移目的与转移指令的相对偏移量e e,执行指令后,执行指令后,PC PC + e 。1 1、无条件转移指令:、无条件转移指令: 格式: LJMP addr16 长转移指令,寻址范围长转移指令,寻址范围6553565535; AJMP addr11 绝对

59、转移,寻址范围绝对转移,寻址范围2K2K; SJMP rel 短转移,转移范围(短转移,转移范围(+127+127-128-128);); JMP A+DPTR 变址转移,寻址范围变址转移,寻址范围6553565535。02Haddr158addr70a108 00001a7 a080Hr e l73H)(1 1)长转移指令)长转移指令:(三字节双周期指令)【举例】: 已知某单片机的监控程序地址为已知某单片机的监控程序地址为A080H,A080H,试问用什么方法使单片机开机试问用什么方法使单片机开机后自动的转向该监控程序?后自动的转向该监控程序?【解】: 因为单片机上电时,因为单片机上电时,P

60、C=0000H,PC=0000H,所以所以在在0000H0000H单元存放一条单元存放一条LJMP 0A080H 的指令即可。的指令即可。LJMPA0H80HROM0000H0001H0002H0003H 双字节、双周期指令。双字节、双周期指令。 将将AJMPAJMP指令中的指令中的1111位转移位转移地址替换掉原来地址替换掉原来PCPC1 0 1 0 0 0 0 11 0 1 0 0 1 0 1 X X X X X 1 0 11 0 1 0 0 1 0 1A10 a9 a8 操作码操作码 a7 a0页面 PC高5位页 内 地 址页面 PC高5位页 内 地 址0页 000000000H07FF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论