一、算术运算符:
标志位:
![](https://img-blog.csdnimg.cn/img_convert/a352ae4023487a831f066d547f488ab6.jpeg)
(1)Cy:最高位溢出
(2)OV:最高位和次高位其中之一有溢出
(3)AC:低四位向高四位进位
(4)P:偶数个1为0
标志位的作用:
(A)Cy:ADDC,运算时加上Cy,实现高于低八位的加法;低八位运算时用ADD,或者将Cy置零再用ADDC
十进制调整指令DA:
(1)这是用于BCD码加法的指令(如果不懂BCD码,建议先了解一下)
(2)根据AC、Cy和A,将A进行”加6修正“
二、控制转移符:
PC与转移指令:
(1)PC中存放的是要执行的下一条指令的地址,而不是当前指令的地址
![](https://img-blog.csdnimg.cn/img_convert/1b524a29fcd5d526286dd7d44e44d36a.jpeg)
(2)为什么AJMP的操作中有PC<-PC+2,而LJMP中没有写?
其实在执行这两种指令时PC都发生了变化,但是区别在于AJMP是改变11位地址,如果PC+2会对高三位的地址有影响;而LJMP是改变16位 地址即整个PC,导致之前无论对PC有什么操作都不会对之后影响了
子程序调用与返回指令:
![](https://img-blog.csdnimg.cn/img_convert/42a96ca19d1885d93bef71ad7f2db5e9.jpeg)
(1)在调用子程序后一定要记得返回
(2)在执行调用操作时,会将在主程序执行的PC进行压栈保护
三、指令汇总:
数据传输:
(1)MOV:内部传输
(2)MOVX:累加器A与外部存储器,以DPTR作为地址指针,或以Ri和P2作为地址指针
(3)MOVC:累加器A与程序存储器,以A和DPTR作为地址指针,或以A和PC作为地址指针
字节交换:
(1)XCH:将A与某地址的一个字节数据交换
(2)XCHD:将A低四字节与某地址的四字节数据交换
堆栈操作:
(1)PUSH:进栈
(2)POP:出栈
对A操作:
(1)ADD:不带进位加法,将A与某地址数据相加存到A中
(2)ADDC:与ADD区别是加上Cy进位
(3)SUBB:带借位减法,将A作为被减数存到A中
(4)MUL:A*B
(5)DIV:A/B(B不能为零)
(6)DA:十进制调整指令
(7)CLR:清零
(8)CPL:取反
(9)SWAP:高低字节交换
(10)RL:循环左移
(11)RLC:带进位循环左移
(12)RR:循环右移
(13)RRC:带进位循环右移
运算指令:
(1)INC:数据加一
(2)DEC:数据减一
(3)ANL:逻辑与
(4)ORL:逻辑或
(5)XRL:逻辑异或
转移指令:(对PC操作)
(1)AJMP:短转移(11位)
(2)LJMP:长转移
(3)SJMP:目标地址是PC+2+rel
(4)JMP:目标地址是A+DPTR
(5)JZ:A=0时转移,目标地址是PC+2+rel
(6)JNZ:A!=0时转移,目标地址是PC+2+rel
(7)DJNZ:减零不为零转移,目标地址是PC+3+rel
(8)CJNE:比较不相等转移,目标地址是PC+3+rel
子程序调用:
(1)ACALL:短调用
(2)LCALL:长调用
(3)RET:子程序返回
(4)RETI:中断返回
位条件转移:
(1)JC:Cy= 1
(2)JNC:Cy= 0
(3)JB:某位为1
(4)JNB
(5)JBC:某位为1,位清零转移
伪代码:
(1)起始伪代码ORG:设置程序存储器的起始地址
(2)END:表示程序结束
(3)DQU(或"="):等于define
(4)DB:从标号指定的地址开始,在程序存储器中定义字节数据
(5)DW:类似于DB,不过是定义字(两个字节)数据,高位先存
(6)DS:从标号指定的地址开始,保留相应的地址单元
(7)DATA:类似于EQU
(8)BIT:位地址赋名