指令寻址方式
寄存器寻址
寄存器间接寻址
直接寻址
立即数寻址
相对寻址:主要为解决程序转移
变址寻址:主要针对程序存储器的寻址方式
MOVC A,@DPTR+A 前两个为程序存储器读指令
MOVC A,@PC+A
JMP @A+DPTR 无条件转移指令
位寻址:对数据位进行操作的指令
指令分类
数据传送类指令
属于复制性质而非搬移,常用助记符MOV
内部RAM数据传送指令:MOV
外部RAM数据传送指令
助记符为MOVX,X表示外部,只能通过累加器A使用间接寻址
程序存储器读指令
助记符为MOVC,C表示代码,只能通过A进行访问
数据交换指令
整字节交换指令 | XCH A, Rn A和寄存器Rn内数据交换 |
半字节交换指令 | XCHD A,Rn 只交换低半字节数据 |
累加器交换指令 | SWAP A 将A的高低半字节数据交换 |
堆栈操作指令
SP作为间址寄存器,有PUSH和POP指令
算术运算类指令
加法指令
目的操作数是A
带进位 | ADD A, Rn |
不带进位 | ADDC A,Rn |
减法指令(同加法)
加1指令与减一指令
乘法指令
MUL AB 结果影响标志位,CY清0,OV=1则低字节送A,高字节送B否则只送A
除法指令
DIV AB 结果影响标志位,CY清0,OV=1则除数为0,不能进行,负责商存于A,余数存于B
十进制调整指令
逻辑运算及移位指令
逻辑与:ANL
逻辑或:ORL
逻辑异或:XRL
累加器清0和取反
CLR A 累加器清0
CPL A 累加器取反
移位指令
RL | 循环左移 |
RR | 循环右移 |
RLC | 带进位的循环左移 |
RRC | 带进位的循环右移 |
控制转移类指令
无条件转移
LJMP addr16(无条件长转移指令64KB)
AJMP addr11(无条件绝对转移指令2KB)
SJMP rel(无条件短转移指令256B)
rel是带符号的补码数
向前转移 rel = 地址差 -2
向后转移 rel = FEH -地址差
JMP @A+DPTR(无条件间接转移指令64KB)
有条件转移
累加器判0
JZ 若(A)= 0 / JNZ若(A) != 0 则pc = (pc)+2+rel
数值比较
CJNE A ,#data,rel
若(A)= data,pc = (pc)+3
若(A) > data,pc =(pc)+3+rel ,CY = 0
若(A) < data,pc =(pc)+3+rel ,CY = 1
减1条件转移指令
DJNZ Rn,rel
Rn = (Rn)-1
若(Rn )!=0,pc =(pc)+3 +rel
子程序调用和返回
绝对调用指令
ACALL addr11 和AJMP相类似,将(PC+2)低11位替换addr11
长调用指令:LCALL
返回指令:RET,RETI
空操作指令
NOP 消耗一个机器周期,PC+1,CPU不进行任何操作
位操作指令
位传送指令:MOV
位置位复位指令
SETB C 指定位置1
CLR C 指定位清0
位逻辑运算:ANL,ORL,CPL
位控制转移
JC rel | (CY)=1 , PC = (PC)+2+rel |
JB bit,rel | (bit) =1 ,PC = (PC)+3+rel |
JBC bit,rel | (bit) =1 ,PC = (PC)+3+rel, bit = 0 |