文章目录
- 七大寻址方式
- 重要指令
- 转移
- 堆栈
- 加
- 减
- 乘
- 除
- 位操作
- 跳转
- 条件转移
- 子程序
- 常考题型
 

七大寻址方式
- 立即寻址:通过一个立即数来指定存储单元的地址,例如#41H;
- 寄存器寻址:Rn(n=0~7),A,B,DPTR,C;
- 直接寻址:通过存储单元的地址本身来访问数据,例如地址3AH;
- 寄存器间接寻址:通过一个指针变量来访问存储单元的数据,例如@Ri (i=0或1) 、 @DPTR;
- 变址寻址:@A+PC、@A+DPTR;
- 相对寻址:rel(相对偏移量);
- 位寻址:00H-25H.5(.5表示第五位)、TCON.3(TCON的第三位)、CY(进位标志位);
重要指令
转移
- MOV(片内RAM)- MOV A, Rn;(Rn) -> (A)
 
- MOVX(片外RAM)- MOVX A, @DPTR; ((DPTR)) -> (A)
 
- MOVC(ROM)- MOVC A, @A+DPTR;((A)+(DPTR)) -> (A)
 
堆栈
- PUSH direct;(sp)+1 - > (sp), (direct) -> ((sp))
- POP direct;((sp)) -> (direct), (sp)-1 -> (sp)
  
(sp为栈顶指针,指向栈顶元素)
加
- ADD(直接加)- ADD A, Rn; (A) + (Rn) -> (A)
 
- ADDC(考虑进位标志位)- ADDC A, Rn; (A) + (Rn) + (CY) -> (A)
 
- INC(自加1)- INC A; (A) + 1 -> (A)
 
减
- SUBB(默认考虑进位标志位)- SUBB A, Rn; (A) - (CY) - (Rn) -> (A)
 
- DEC(自减一)- DEC A; (A) -1 -> (A)
 
乘
- MUL AB; (A)*(B) -> A存结果的低 8 位,B存高 8 位;
除
- DIV AB; (A) / (B) -> A存商,B存余数;
位操作
-  ANL(按位与)(都是1,才为1)- ANL A, Rn;结果给A
  
 
- ANL A, Rn;结果给A
-  ORL(按位或)(只要有1,就为1)- ORL A,Rn;结果给A
  
 
- ORL A,Rn;结果给A
-  XRL(按位异或)(相同为0,相异为1)- XRL A, Rn;结果给A
 

- SETB(置1)- SET C;1 -> ( C )
 
- CLR(清零)- CLR A;0 -> (A)
 
- CPL(取反)- CPL A;
 

- RL(循环左移)

- RR(循环右移)
跳转
- LJMP(跳转到某个地址开始执行)- LJMP addr16;addr16 -> (PC)
 
- SJMP(与上相同)
- AJMP(与上相同)
(三者任选其一即可)
条件转移
- JZ rel;(A)全0,跳转,否则顺序执行
- CJNE A, #data, rel;(A) != data 就跳转
- DJNZ Rn, rel;(Rn) - 1 -> (Rn),若(Rn) != 0就跳转
子程序
- ACALL(子程序调用)- ACALL addr11
 
- RET(子程序返回)- RET; ((sp)) -> (PCH) (sp) -1 -> (sp);((sp)) -> (PCL) (sp) -1 -> (sp)
 
常考题型
给出一个程序,求程序结束后,一些寄存器的值。例如:
-  下面程序执行后(SP)、(A)、(B)各位多少? ORG 2000H MOV SP, #40H MOV A, #30H LCALL 2500H ADD A, #10H MOV B, A HERE: SJMP HERE ORG 2500H MOV DPTR, #2008H PUSH DPL PUSH DPH RET




















