2.1寻址方式
7种寻址方式
立即寻址: 直接给出数据 #20H
直接寻址 :给出寄存器的地址 20H
寄存器寻址 :(A,B,DPTR R1~R7)
寄存器间接寻址 : (R0,R1,DPTR)
变址寻址: (DPTR,PC)
相对寻址: 只用于修改PC的值
位寻址: 位寻址是一种直接寻址
2.2数据传送与交换指令
传送指令
内部RAM和SFR之间的传送指令 MOV
外部RAM和外部ROM与寄存器A之间传送
RAM(寄存器间接寻址)
MOVX @Ri,A
@DPTR,A
A,@Ri
A,@DPTR
ROM (变址寻址) 只能读不能写
MOVC A,@A+DPTR
A,@A+PC
堆栈操作(在51单片机中,堆栈被安排在内部RAM中)
寄存器SP 指向栈头 (sp默认指向07H)
push dir 入栈 (sp先加1,后入)
pop dir 出栈 (先出,sp后减1)
交换指令
假设 A = FFH R1 = 30H (30H)= 87H
XCH 两个字节间的交换
XCH A,@Ri ;A = 87H (30H)= FFH
XCHD 两个字节间低半位的交换
XCH A,@Ri ;A = F7H (30H)= 8FH
swap 一个字节的低半位和高半位交换
swap 30H ;(30H)= 78H
2.3 算术运算和逻辑运算指令
标志位
P奇偶标志位(只对A操作的指令有影响) A中有奇数个1,P=1 否则P=0
OV (溢出)加减,乘除(当积大于255或除数为0时,OV=1)
CY进位(常写作C)
AC(辅助进位) 低位向高位进一,AC = 1
异或:同为0,异为1,与0异或值不变,与1异或值取反
加一 INC
减一 DEC
十进制调整指令
DA A
能够进行十进制调整的十进制运算只有加法
乘除法
乘
MUL AB ;A×B-->BA 高八位存B,低八位存A
除
DIV AB ;商在A中,余数在B中
若除数B=00H,则指令执行后,OV=1,A,B内容不变
2.4控制转移指令
调用程序和返回类指令
长调用指令 LCALL addr16 ; 地址范围为 2^16 64k 本指令的机器码为3个字节
短调用指令 ACALL addr11 ;地址范围为 2^11 2k 本指令的机器码为2个字节
RET;从子程序返回
ERTI;从中断服务程序返回
转移指令
无条件转移指令(4条)
长转移 LJMP addr16; 转移范围 2^16 64KB 3字节
短钻以 AJMP addr11; 转移范围 2^11 2KB 2字节
间接转移 JMP @A+DPTR; A+DPTR--->PC 2字节 因为AJMP指令是2字节指令,所以A必须为偶数
以上均为绝对转移,
无条件相对转移 SJMP rel ; PC+rel-->PC
条件转移指令(条件转移都为相对转移指令)
累加器非零转移 JZ rel ;A=0转移(PC+rel-->PC)
JNZ rel ;A != 0转移(PC+rel-->PC)
减一非零转移 DJNZ Rn,rel ;Rn-1-->Rn, Rn != 0 ,转移(PC+rel-->PC)
DJNZ dir,rel ;(dir) -1-->(dir) , (dir) != 0 ,转移(PC+rel-->PC)
比较转移 CJNE A,dir / A,#data / Rn,#data / @Ri,#data ,rel ;前者不等于后者,则转移(PC+rel-->PC)
CJNZ 不送回结果,影响CY(进位标志) 第一操作数大于或等于第二操作数,CY=0;反之,CY=1;