首先介绍单片机指令系统的操作码和操作数
操作码
1.用于规定指令进行什么操作 2.用英文缩写表示,如加法ADD、减法SUBB、传送MOV等 3.操作码与操作数之间用空格分隔,操作数与操作数之间用“,”隔开 4.在指令中不能缺少操作码 5.操作码是给定的,不能自创
操作数
1.?什么是操作数?
操作数同样是指令的一部分,其中包含要操作的数据在寄存器中的内存位置。
2.?操作数是由寄存器地址、内存地址或立即数来指定的。
**立即操作数:**指令要操作的数据以常量的形式出现在指令中,称为立即数,它只能作为源操作数 。 **寄存器操作数:**指令要操作的数据存放在CPU中的寄存器里,指令中给出寄存器名即可。 **内存操作数:**指令要操作的数据存放在内存某些单元中,指令中给出内存单元物理地址(实际上指令只给出了偏移地址,段地址采用隐含方式给出,也可以使用跨段方式指出当前段地址)
3.操作数的数量和位宽根据CPU和指令的不同而不同。根据可使用的操作数的数量,指令可以分为3操作数形式、2操作数形式和 1操作数形式.
符号 | 含义 |
---|
Rn | n=07,表示当前寄存器组的8个通用寄存器R0R7中的一个 | Ri | i=0、1,可用作间址寻址的寄存器,只能是R0,R1中的一个 | Direct | 内部的8位地址,直接寻址方式,寻址范围为256个单元 | #data | 指令中的8位立即数 | #data16 | 指令中的16位立即数 | addr16 | 16位目的地址,只限于LCALL和LJMP中使用 | addr11 | 11位目的地址,只限于ACALL和AJMP指令使用 | rel | 相对转移指令中的偏移量,为8位带符号数,为SJMP和所有条件转移指令所使用 | DPTR | 数据指针 | bit | 片内数据存储器中的直接寻址位 | A | 累加器 | B | B寄存器 | C | 进位标志位 | / | 位地址的前缀标志,表示对该位操作数取反 |
指令寻址方式
大多数指令执行时都需要使用操作数,所以存在如何取得操作数的问题,这个叫做指令的寻址方式。
寄存器寻址方式
此操作数在寄存器中,只要指定了寄存器就能得到操作数。
- 主要对象是通用寄存器R0-R7
- 部分专用寄存器,累加器A、AB寄存器以及数据指针DPTR
;后为注释
INC R3 ;(R3)←(R3)+1
MOV A ,R0 ;把寄存器R0的内容传送到累加器A中
直接寻址方式
- 操作数直接以存储单元地址的形式给出。
- 主要对象是内部数据存储器。
- 这种寻址方式只限于内部RAM
位置 | 具体 |
---|
低128单元 | 直接以单元地址形式给出 | 专用寄存器 | 可以寄存器符号形式给出 |
MOV A,70H ;(A)←(70H)
把内部RAM 70H单元中的数据传送给累加器A。
寄存器间接寻址
寄存器中是操作数的地址,而不是操作数本身。与寄存器寻址方式的不同。 为了区别寄存器寻址和寄存器间接寻址,间接寻址中,常在寄存器名称前加@
位置 | 具体 |
---|
内部RAM低128单元 | 只能使用R0或R1作为间址寄存器@Ri i=0/1 | 外部RAM64KB | @DPTR 或@Ri |
MOV A,@R0 ;(A)←((R0))以RO寄存器3AH为地址,把该地址单元的内容送给累加器A
MOVX A,@DPTR ;把DPTR指定的外部RAM的内容送给累加器A
MOVX A,@R0 ;由R0指定的低位字节的地址外部RAM单元的内容送给累加器A
立即寻址方式
指令的操作数直接在指令中给出,称为立即数“#”前缀 立即数可以多种进制表达 十六进制后缀H、二进制后缀B、十进制带后缀D或省略。 #data8 #data16
MOV A,#20H ;(A)←20H
MOV DPTR,#3456H ;(DPH)←34H ;(DPL)←56H(需要注意两者位数是否相同)
MOV A,#0BH
MOV A,#1011B
MOV A,#11D
MOV A,#11
变址寻址方式
以程序计数器PC或数据指示器DPTR中的内容为基地址,加上累加器A(变址寄存器)中的内容作为操作数的地址。 应注意A中的数为无符号数。 变址寻址方式只能对程序存储器ROM进行寻址, 是一字节指令。 注意变址寻址指令只有以下三条:
MOVC A,@A+DPTR ;(A)←((A)+(DPTR))把DPTR和A的内容相加得到一个程序存储器地址,再把该地址单元的内容送给累加器A
MOVC A,@A+PC ;(A)←((A)+(PC))
JMP @A+DPTR
下面是关于第一条指令的解释会更清晰一点
位寻址方式
位寻址范围
- 内部RAM中的位寻址区(20H-2FH),位地址范围00H-7FH。寻址位的两种表示方法:位地址和单元地址加位数,如7FH单元第0位,用位地址表示为78H,单元地址加位数表示为7FH.0
- 专用寄存器中的可寻址位(特殊功能寄存器的单元地址能被8整除可位寻址80H 90H…)。
直接使用位地址: CLR D3H
位名称表示: CLR RS0
单元地址加位数: CLR D0H.3
专用寄存器名称加位数:CLR PSW.3
相对寻址方式
是为解决程序转移而设置的,只为转移指令所采用 目的地址=转移指令地址+转移指令字节数+rel 偏移量rel是一个带符号的8位二进制数,所能表示的数的范围为-128~+127 则以转移指令所在地址为基点向前最大可转移(127+转移指令字节数)个单元地址,向后最大可转移(128-转移指令字节数)个单元地址。
|