1、寻址
寻址方式
寻找操作数的地址的各种方式。
1.立即寻址
直接使用操作数将操作数存入相关地址中
1 | MOV R0,#26H |
- 立即数可以是8位或16位
- 立即数前必须加
#
2.直接寻址
将操作数视为地址,并将该地址存储的数据转递到相关地址中。
1 | MOV A,30H //相当于对30H进行解引用,将30H值传入A中 |
3.寄存器寻址
直接使用寄存器名字作为地址并对进行解引用
1 | MOV A,R1 //*R1 |
4.寄存器间接寻址
指定寄存器的内容为操作数的地址,该地址存储的内容才是操作数
1 | MOV A,@R0 // @R0相当于**R0 |
- 需使用间址符
@ - 对外部RAM进行读取时必须采用该方式
5.变址寻址
通过对基地址进行偏移获得当前操作数地址
1 | MOV A,#06H |
由于这里(@A+PC)整体应为一个地址,所以这里要对A使用间址符取06H作为地址的偏移量,因此该两行指令的意思为:将(@A+PC)地址中存储的数据传入A中
6.相对寻址
直接以PC作为基地址,只写出相对偏移量,有两种方式:
无条件转移:
1 | SJMP 08H //使PC转移至当前PC值+08H(当前PC为下一指令地址) |
条件转移:
1 | JZ LOP //仅当(A)=0时执行,LOP为标号 |
7.位寻址
2、指令系统
1.数据传送指令
- 片内数据传送:MOV 访问内部RAM
- 片外数据传送:MOVX 访问外部RAM
- 程序存储器数据传送:MOVC 访问内外ROM
2.数据交换指令
字节交换(全部):
1
2XCH A,Rn
XCH A,@Ri //寄存器区只有R0和R1可用作间接寻址字节交换(低四位):XCHD
- 字节交换(高低互换):SWAP
3.堆栈操作指令
- 入栈:PUSH SP先变化再压栈
- 出栈:POP 先出栈再变化SP
4.算术运算指令
- 加法
- 不带进位: ADD
- 带进位(Cy):ADDC
- 加一:INC
- 减法
- 不带进位:SUB
- 带进位:SUBB
- 减一:DEC
- 乘法:MUL
- 除法:DIV
5.逻辑运算指令
- 逻辑与:ANL
- 逻辑或:ORL
- 逻辑异或:XRL
- 取反:CPL
- 清零:CLR
- 移位
- 不带进位:RL/RR 左移/右移1位
- 带进位:RLC/RRC ~
6.位运算
该运算对象仅针对Cy和bit型对象
- 位传送:MOV
- 置1:SETB
- 清0:CLR
- 取非:CPL
- 取与:ANL
- 取或:ORL
7.控制转移类指令
无条件转移:LJMP 3字节,直接转移至该16位地址
相对转移:SJMP
条件转移:(条件转移皆为相对PC的转移)
累加器判0:JZ/JNZ
进位Cy判断:JC/JNC
任意位判断:JB/JNB/JBC
1
2JB bit,rel
// bit: 判断位 rel:偏移量比较不相等判断(不相等为满足条件):CJNE
1
CJNE A,#data,rel
减1不为0判断转移:DJNZ