指令系统概述
指令是计算机用于控制各种功能部件完成的某一特定动作的指示和命令。一台计算机能识别和执行的指令集合即为其指令系统。指令系统是一套控制计算机执行操作的编码,通常称为机器语言。机器语言是计算机唯一能识别和执行的指令。指令系统由硬件决定,且不具有通用性。汇编语言可以准确地计算出控制操作时间并灵活地实施控制,及高效开发必须掌握指令系统和汇编语言。
在实际开发应用中,由于指令系统与汇编语言开发的繁琐和开发效率低则应用C语言开发或者直接应用固件集成库开发提高开发效率和时间。但是对于单片机及其他硬件开发过程,开发过程的调试和资源应用都应对于汇编和指令系统的熟悉才能真正的高效开发完成调试达到目的。
常用单位和术语
位(bit):位是计算机所表示的最小的最基本的数据单位。由于计算机使用的是二进制数,因此位就是一个二进制数。
字节(byte):一个连续8位的二进制数码称为一个字节,即1byte=8bit。
字(word):通常16位二进制数码组成,即1word=2byte=16bit。
字长:字长是计算机一次处理二进制的位数。(MCS-51是8位单片机,字长就是8位)
汇编语言指令格式
指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。完整的指令格式如下:
[标号:] 操作码 [操作数],[操作数],[操作数] [;注释]
注:[]项是可选项;
标号:本条指令的起始地址的符号,也称为指令的符号地址,代表该条指令在程序编译时的具体地址,标号可以被其他语句调用。
操作码:又称为指令助记符,对应的英文构成,是指令语句的关键。
操作数:可以是具体数据,也可以是具体数据存放的地址。
例: ORG 0100H
START:MOV A,#78H
···················
ORG 0500H
LP: MOV R0,#80H
指令系统中的常用符号:
Rn 当前寄存器区的8个工作寄存器R0~R7(n=0~7)。
Ri 当前寄存器区中可作间接寻址寄存器的2个寄存器R0、R1(i=0,1)。
Direct 直接地址,即8位的内部RAM或特殊功能寄存器的地址。
#data 包含在指令中的8位立即数。
#data16 包含在指令中的16位立即数。
rel 相对转移指令中的偏移量,为8位的带符号补码数。
DPTR 数据指针,可用作16位的数据地址寄存器。
bit 内部RAM或特殊功能寄存器中的直接寻址位。
C(或Cy) 进位标志位或位处理机中的累加器。
addr11 11位目的地址
addr16 16位目的地址
@ 间接寻址寄存器前缀,如@Ri,@A+DPTR
(X) X中的内容。
((X)) 由X寻址的单元中的内容。
→ 箭头右边的内容被箭头左边的内容所取代。
指令系统的寻址方式
在计算机中,说明操作数所在的地址的方法,或指令按地址获得操作数的方式,称为指令的寻址方式。指令的执行首先要按照地址寻找操作数,指令再对操作数进行操作。操作结果还要按照地址存入相应的存储单元和寄存器中。程序实际就是不断寻找操作数然后执行操作的过程,将操作结果根据地址存入相应的存储器和寄存器中的过程。寻址方式越多,计算机灵活性越强,指令系统就越复杂。
MCS-51操作数可以存放片内ROM/RAM和片外ROM/RAM中,也可以存储在特殊功能寄存器中。总共提供了7种寻址方式。
寄存器寻址方式
操作数在寄存器中MOV A,Rn ;(Rn)→A,n=0~7表示把存储器Rn的内容传送给累加器A。
寻址范围:
(1)4组通用工作寄存区共32个工作寄存器。
(2)部分特殊功能寄存器,例如A,B以及数据指针寄存器DPTR等。
2.直接寻址方式
操作数直接以单元地址形式给出:MOV A , 40H
寻址范围
(1)内部RAM的128个单
(2)特殊功能寄存器。除了单元地址形式外,还可用寄存器符号的形式给出。例如:MOV A,80H与MOV A,P0是等价的。
3.寄存器间接寻址方式
寄存器中存放的是操作数的地址,在寄存器前加前缀标志“@”。访问内部RAM或外部RAM的低256个字节时,只采用RP或R1作为间址寄存器。例如:
MOV A , @Ri;i=0或1
其中Ri中的内容为40H,把内部RAM40H单元内容送A。寻址范围:
(1)访问内部RAM低128个单元,其通用形式为@Ri
(2)对外部内部RAM的64K字节的间接寻址,例如: MOVX A,@DPTR
(3)片外数据存储器的低256字节,例如:MOVX A,@Ri
(4)堆栈区:堆栈操作指令PUSH(压栈)和POP(出栈)使用堆栈指针SP作间址寄存器
4.立即寻址方式
操作数在指令中直接给出,需在操作数前面加前缀“#”。例如:
MOV A , #40H
5.基址寄存器加变址寄存器间址寻址方式
本寻址方式是用于访问程序存储器的数据表格,以DPTR(数据指针)或PC作基址寄存器,以累加器A作为变址寄存器,以两者相加作为16位地址作为操作数地址,以达到访问数据表格的目的。例如:指令MOVC A,@A+DPTR其中A的原有内容位05H,DPTR的内容为0400H,该指令执行的结果就是把程序存储器0405H单元的内容传送给A。说明:
(1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可以达到64KB.
(2)本寻址方式的指令只有3条:
MOVC A,@A+DPTR;
MOVC A,@A+PC;
JMP @A+DPTR;
6.位寻址方式
MCS-51有位处理功能,可以对数据位进行操作。例如:MOV C,40H 是把位40H的值送到进位位C。
寻址范围包括:
(1)内部RAM中的位寻址区,单元地址为20H~2FH。位有两种表示方法:40H和单元地址加上位(28H).0,是指28H单元中的最低位。
(2)特殊功能寄存器中的可位寻址如下4种:
a.直接使用位寻址。例如PSW.5的位寻址为0D5H。
b.位名称的表示方法,例如PSW.5是F0的标志位,可使用F0表示该位。
C.单元地址加位数,例如(0D0H).5。
d.特殊功能寄存器符号加位数,例如PSW.5。
7.相对寻址方式
本寻址方式为了解决程序转移指令而设计的,作为转移指令而采用(相对寻址只对程序存储器ROM进行寻址)。在相对寻址的转移指令中,给出了地址偏移量,以“rel”表示,即把PC的当前值加上偏移量就构成了程序转移的目的地址:
目的地址=转移指令所在的地址 + 转移指令的字节数 + rel
偏移量rel是一带符号的8位二进制数补码数 。范围是:–128 - +127 向地址增加方向最大可转移(127+转移指令字节)个单元地址,向地址减少方向最大可转移(128-转移指令字节)个单元地址。
7种寻址方式及寻址空间,见表如下。
指令中的源操作数可以使用上面的任意一种,目的操作数只能使用除立即寻址外的其他6种寻址方式。片内RAM(低128B)区可采用直接寻址,寄存器寻址、寄存器间接寻址方式访问。片内SFR(RAM区的高128B)只能采用直接寻址方式访问。片外RAM区只能采用寄存器间接寻址(R0,R1,DPTR作为间址寄存器)访问方式。程序存储器ROM可以采用直接寻址、相对寻址、基址加变址寄存器间接寻址。位寻址(片内RAM的20H~2FH单元的128位及SFR区83位可位寻址)只能用位寻址方式访问。