第四章 MCS-51指令系统
- 格式:pdf
- 大小:488.28 KB
- 文档页数:10
第四章 MCS-51指令系统4.1 指令的基本格式MCS-51型单片机汇编语言指令格式与其他微型计算机的指令格式一样,均由以下几个部分组成:[标号:] 操作码[(目的操作数),(源操作数)] [;注释]标号:为该指令的符号地址,可根据需要设置。
操作码:由助记符表示的字符串,它规定了指令的操作功能。
操作数:是指参加操作的数据或数据地址。
注释:是对该指令作的说明,以便于阅读,可有可无,必须以“;”开始。
MCS-51型单片机指令系统中,操作数可以为1、2、3个,也可以没有,如NOP指令。
不同功能的指令,操作数的作用不同。
例如传送类指令大多有两个操作数,写在左边的称为目的操作数,用以表示操作结果存放单元的地址,写在右边的称为源操作数,用以指出操作数的来源。
标号与操作码之间用冒号“:”隔开,操作码与操作数之间必须用空格分开,操作数与操作数之间必须用逗号“,”分隔。
带方括号项可有可无,称为可选择项。
操作码是指令的核心,不可缺少。
用机器语言表示的指令格式以8位二进制数(字节)为基数,有单字节、双字节和三字节,其指令格式为:单字节:操作码双字节:操作码数据或寻址方式三字节:操作码数据或寻址方式数据或寻址方式4.2 指令分类MCS-51指按功能分类为:数据传送类(28条)、算术运算类(24条)、逻辑运算类(25条)、位操作类(12条)、控制转移类(22条)五大类,总计111条。
4.3 指令系统常用符号和含义(1)Ri:工作寄存器0和工作寄存器1,i=0或1。
即R0~R1;(2)Rn:工作寄存器R0~R7,n=0~7;(3)@Ri:寄存器Ri间接寻址8位存储器单元00H~FFH;(4)direct:8位直接地址,它可以是内RAM 00H~7FH或SFR的80H~FFH;(5)#data:8位立即数;(6)#data16:16位立即数;(7)addr16:16位目的地址。
用于LCALL和LJMP指令,能调用或转移到64K程序存储器空间的任何地方;(8)addr11:11位目的地址。
用于ACALL和AJMP指令,可在下条指令地址所在的2K字节页面内调用或转移;(9)rel:带符号的8位偏移地址,用于SJMP和所有的条件转移指令。
其范围是相对于下一条指令第1字节地址的-128~+127个字节;(10)DPTR:数据指针,可用作16位的地址寄存器;(11)bit:位地址。
片内RAM中的可位寻址及SFR中的可寻址位;(12)A:累加器Acc;(13)B:通用寄存器,主要用于乘法MUL和除法DIV指令中;(14)Cy:进位标志位或布尔处理器中的累加器;(15)@:间接寄存器或基址寄存器的前缀。
如@Ri,@DPTR,@A+PC,@A+DPTR。
4.4 操作数寻址方式和相应的存储器空间表4-1 操作数寻址方式和相应的存储器空间寻址方式存储器空间立即寻址程序存储器ROM直接寻址片内RAM低128字节和特殊功能寄存器SFR寄存器寻址工作寄存器R0~R7,A,B,C,AB(双字节),DPTR(双字节)片内RAM [@R0、@R1、SP(仅PUSH,POP )]寄存器间接寻址片外RAM或I/O口[ @R0、@R1、@DPTR ]变址寻址程序存储器ROM [ @A+PC,@A+DPTR ]相对寻址程序存储器ROM当前PC:128~+127字节范围[ PC+rel ]片内RAM的20H~2FH字节地址中的128位位寻址特殊功能寄存器SFR中可寻址的位地址空间(字节地址能被8整除单元的位)8052除具有低128字节的地址外,还有高128字节,高128字节只能间接寻址。
也就说8052的寄存器寻址包含低128字节和高128字节。
另外,片内低128字节的地址具有直接寻址和间接寻址两种方式。
4.4.1 寻址方式寻址就是寻找操作数的地址。
因为在计算机中只要给出单元地址,就能得到所需要的操作数,因此所谓寻址,其实质就是如何确定操作数的单元地址问题。
4.4.1.1 立即寻址立即寻址是指,指令中直接给出操作数的寻址方式。
指令中的操作数也称为立即数,其标志为前面加“#”。
例:MOV A,#30H ;将立即数30H送至A中。
4.4.1.2 直接寻址直接寻址是指,指令中直接给出操作数地址的寻址方式。
在MCS-51系统中,直接寻址方式可访问内部RAM的低128B单元及所有的SFR寄存器。
例:MOV 3AH,A ;将A中的内容传送至片内RAM 3AH单元中。
4.4.1.3 寄存器寻址寄存器寻址是对选定的工作寄存器R0~R7、累加器Acc、通用寄存器B、数据指针DPTR和进位位Cy中的数进行操作的寻址方式。
这种寻址中被寻址的寄存器中的内容就是操作数。
例: MOV A,R3 ;将寄存器R3中的内容传送至累加器A中INC A ;将寄存器A中的内容加1送回累加器A4.4.1.4 寄存器间接寻址寄存器间接寻址,是将指令中指定寄存器的内容作为操作数的地址,再从此地址找到操作数的寻址方式。
在MCS-1指令系统中,可作为寄存器间接寻址的寄存器有R0、R1,堆栈指针SP和数据指针DPTR。
在指令助记符中,间接寻址用符号“@”来表示。
在访问片内RAM或片外低256B(00H~FFH)空间时,可用R0或R1作为间址寄存器。
当访问片外RAM 64KB空间时,可用DPTR作为间址寄存器。
当执行PUSH或POP指令时,可用SP作为间址寄存器。
例:MOV A,@R0 ;以R0内容为地址的存储单元中的内容传送至累加器A中MOVX @DPTR,A ;将累加器A中内容传送到外RAM DPTR所指定的存储单元中4.4.1.5 变址寻址变址寻址,是将指令中指定的变址寄存器和基址寄存器的内容相加后形成操作数地址的寻址方式。
在这种寻址方式中,累加器A作为变址寄存器,程序计数器PC或数据指针DPTR作为基址寄存器。
这种方式常用于查表操作。
例:(1)为了进一步说明MOVC A,@A+PC的变址寻址,下面一段例程有着于对问题的理解: ORG 0200HMOV A,#02H ;0200HMOVC A,@A+PC ;0202H 执行该指令(A)+(PC)→(A),(PC)+1→(PC)NOP ;0203HNOP ;0204DB 30H因此,@A+PC所指的地址应为:0202H+02H+1=0205H(因PC已执行加1操作,所以地址指向下一条指令的第一个字节)。
(2)MOVC A,@A+DPTR ;将累加器A的内容与DPTR内容相加得到一个新地址,通过该地址取得操作数送入累加器A中。
4.4.1.6 相对寻址相对寻址,是将当前的PC值,加上指令中给出的相对偏移量rel,形成程序转移的目的地址,这种寻址方式称为相对寻址。
例:SJMP 08H ;相对当前PC值进行偏移量为08H的短跳转。
假设该指令存放于2000H起始的单元,因该指令为双字节指令,所以PC当前值为2000H+2=2002H,再加上偏移量08H,即转移目标地址为2012+08H=200AH,所以这条指令执行后,程序就跳转至200AH去执行了。
4.4.1.7 位寻址位寻址是对内部RAM 和特殊功能寄存器,可位寻址位的内容进行操作的寻址方式。
这种寻址方式与直接寻址方式的形式和执行过程基本相同,但参与操作的数据是1位而不是8位。
例:MOV 20H ,C ;将进位位C y 的内容,传送至位地址20H 所指示的位中MOV 20H ,A ;将累加器A 中内容,传送至内存RAM 20H 单元中 注意:上例中20H ,前者为位地址,后者为字节地址。
4.5 指令系统计算机的指令系统是表征计算机性能的重要标志。
MCS-51型指令系统采用汇编语言指令,共有42种助记符来表征33种指令功能。
这些助记符与操作数的各寻址方式相结合,共生成111条指令。
按指令字节长度分,有单字节指令49条,双字节指令47条,三字节指令15条。
按指令执行时间分,又可分为单机器周期指令64条,双机器周期指令45条,四机器周期指令2条(乘法和除法)。
按指令功能分类,可分为数据传送类(28条),算术运算类(24条),逻辑运算类(25条),布尔指令集(17条),控制转移类(17条)五大类,总计111条。
表4-2 数据传送类指令(29条)序号类别助 记 符功 能 描 述字节数周期数1 Rn A ←Rn 寄存器内容送入累加器 1 12 direct A ←(direct)直接地址单元中的内容送入累加器2 13 @Ri A ←(Ri) 间接RAM 中的数据送入累加器 1 1 4MOV A , #dataA ←data立即数送入累加器2 1 5 A Rn ←A 累加器内容送入寄存器 1 1 6 direct Rn ←(direct)直接地址单元中的数据送入寄存器 2 2 7MOV Rn , #dataRn ←data立即数送入寄存器2 1 8 A (direct1)←A 累加器内容送入直接地址单元 2 1 9 Rn (direct1)←Rn 寄存器内容送入直接地址单元 2 2 10片内 RAM传送 指令 MOV direct1, direct2(direct1)←(direct2)直接地址单元中的数据送入另一个直接地址单元3 211 @Ri (direct1)←(Ri)间接RAM 中的数据送入直接地址单元 2 2 12#data(direct1)←data立即数送入直接地址单元3 2 13 A (Ri)←A 累加器内容送入间接RAM 单元 1 1 14 direct (Ri)←(direct)直接地址单元数据送入间接RAM 单元 2 2 15 MOV @Ri, #data(Ri)←data立即数送入间接RAM 单元2 1 16 MOV DPTR ,#data16 DPTR ←data16 16位立即数送入地址寄存器3 2 17MOVX A ,@Ri A ←(Ri)外部RAM (8位地址)送入累加器1 1 18 MOVX A ,@DPTR A ←(DPTR)外部RAM (16位地址)送入累加器1 2 19 MOVX @Ri ,A (Ri)←A 累加器送外部RAM (8位地址) 1 2 20 片外RAM 传送 指令MOVX @DPTR ,A (DPTR)←A 累加器送外部RAM (16位地址) 1 2 21 MOVC A ,@A+PCA ←(A+PC) PC ←PC+1以PC 为基地址变址寻址单元中的数据送入累加器1 2 22 ROM 传送 指令 MOVC A ,@A+DPTR A ←(A+DPTR) 以DPTR 为基地址变址寻址单元中的数据送入累加器 1 2 23 XCH A ,Rn A ↔ Rn 寄存器与累加器交换 1 1 24 XCH A ,@Ri A ↔ (Ri) 间接RAM 与累加器交换 1 1 25 XCH A ,directA ↔ (direct)直接地址单元与累加器交换 2 1 26 XCHD A ,@Ri A 3~0 ↔ (Ri)3~0 间接RAM 的低半字节与累加器的低半字节交换1 1 27 交换 指令SWAP A A 3~0 ↔ A 7~4 累加器低半字节与高半字节交换1 1 28 PUSH direct SP ←SP+1 (SP)←(direct) 直接地址单元中的数据压入堆栈2 2 29堆栈 指令POP direct(direct)←(SP) SP ←SP-1弹栈送直接地址单元2 2注:数据传送类指令一般不影响程序状态字PSW 。