伪指令?
1、定位伪指令
ORG m ?2、定义字节伪指令
DB X1,X2,X3,…,Xn ?3、字定义伪指令
DW Y1,Y2,Y3,…,Yn
4、汇编结束伪指令 END
寻址方式
MCS-51单片机有五种寻址方式:
1、寄存器寻址 3、直接寻址 5、基寄存器加变址寄存器间接寻址 7、位寻址
数据传送指令
一、以累加器A为目的操作数的指令(4条)
?MOV A,Rn ;(Rn)→A n=0~7 ?MOV A,direct ;( direct )→A
?MOV A,@Ri ;((Ri))→A i=0~1 ?MOV A,#data ; data →A
二、以Rn为目的操作数的指令(3条)
MOV Rn ,A ;(A)→ Rn
MOV Rn ,direct ;( direct )→ Rn MOV Rn ,#data ; data → Rn ?三、以直接寻址的单元为目的操作数的指令(5条)
MOV direct,A
;(A)→direct MOV direct,Rn
;(Rn)→direct
MOV direct,direct
;(源direct)→目的direct
MOV direct,@Ri ;((Ri))→direct MOV direct,#data
; data→direct
四、以寄存器间接寻址的单元为目的操作数的指令(3条)
MOV @Ri,A
;(A)→(Ri)
MOV @Ri,direct ;(direct)→(Ri) MOV @Ri,#data ; data→ (Ri)
五、十六位数据传送指令(1条)
MOV DPTR,#data16 ;dataH→DPH,dataL →DPL
六、堆栈操作指令
进栈指令
PUSH direct ;(SP)+1 → SP ,(direct) → SP 退栈指令
2、 寄存器间接寻址 4、立即数寻址 6、相对寻址 POP direct
七、字节交换指令(5条)
?XCH A,Rn ;(A)→?(Rn)
?XCH A,direct ;(A)→?(direct) ?XCH A,@Ri ;(A)→?((Ri))? 八、半字节交换指令
?XCHD A,@Ri ;(A)0~3→?((Ri)) 0~3
九、加器A与外部数据存贮器传送指令(4条)
?MOVX A,@DPTR ?MOVX A,@ Ri
; ((DPTR))→A ; ((Ri))→A i=0,1
?MOVX @ DPTR ,A ; (A)→( DPTR) ?MOVX @ Ri , A ; (A)→(Ri) i=0,1 十、查表指令
(i)MOVC A ,@ A+PC ;((A)+(PC))→A ?
(ii)MOVC A , @A+ DPTR ;((A)+(DPTR))
算术运算指令
一、不带进位的加法指令(4条)
ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,@Ri 三、增量指令(5条)
INC A
;(A)+1 →A ;(Rn)+1 → Rn ;(direct)+1 → direct ;((Ri))+1 →(Ri) ;(DPTR)+1 →DPTR
?INC Rn ?INC direct ?INC @Ri ?INC DPTR
;(A)+(Rn)→A ;(A)+(direct)→A ;(A)+((Ri))→A ;(A)+#data→A
;(A)+(Rn)+CY→A
二、带进位加法指令(4条)
ADDC A,direct ;(A)+(direct) +CY →A
;(A)+((Ri)) +CY →A
ADDC A,#data ;(A)+ #data +CY →A
四、十进制调整指令(1条)
DA A
减法指令
一、带进位减法指令
SUBB A,Rn
SUBB A,direct SUBB A,@Ri SUBB A,#data
DEC A
二、减1指令(4条) DEC Rn
DEC direct DEC @Ri
乘法指令
MUL AB 除法指令
DIV AB
逻辑运算指令
累加器A的逻辑操作指令
一、累加器A清0
CLR A 二、累加器A取反
CPL A 三、左环移指令
RL A 四、带进位左环移指令
RLC A 五、右环移指令
RR A
六、带进位右环移指令 RRC
A
七、累加器ACC半字节交换指令
SWAP A
两个操作数的逻辑操作指令
逻辑与指令 ANL A,Rn
ANL A,direct ANL A, @Ri ANL A,#data ANL direct ,A ANL direct,#data
逻辑或指令 ORL A,Rn ORL A,direct ORL A, @Ri ORL A,#data ORL direct,A ORL direct,
逻辑异或指令
XRL A,Rn
XRL A,direct XRL A,@Ri XRL A,#data XRL direct,A XRL direct,
#data #data
位操作指令位变量传送指令
MOV MOV CLR
CLR CPL C CPL bit SETB SETB
C bit C,bit bit,C C bit
位变量修改指令
位变量逻辑与指令ANL C,bit
ANL C,/bit ORL
ORL
C,bit C,/bit
位变量逻辑或指令
控制转移指令
无条件转移指令(4条)
1、 短跳转指令
AJMP addr11 ;先(PC)+2→PC ;addr11→PC10~0 ,(PC15~11) 2、 跳转指令
LJMP addr16 ;Addr16→PC
3、 转移指令
SJMP rel ;先(PC)+2→PC;后(PC)+rel→PC 4、 寄存器加变址存器间接转移指令(散转指令) JMP @A+DPTR ;(A)+(DPTR)→PC
条件转移指令()
一、测试条件符合转移指令
JZ rel ;
当A=0 时,(PC)+rel→(PC)转移;当A≠0时,顺序执行。 当A≠0 时,(PC)+rel→(PC)转移;当A=0时,顺序执行。
如果进位标志CY为1,则执行转移;
JNZ rel ;
JC rel
JNC JNB JBC
rel 如果进位标志CY为0,则执行转移; 如果直接寻址位的值为1,则执行转移; 如果直接寻址位的值为0,则执行转移;
如果直接寻址位的值为1,则执行转移;然后清“0”直接寻址位(bit)。
JB bit, rel
bit , rel bit , rel
二、比较不相等转移指令
CJNE (目的操作数),(源操作数),rel CJNE A,direct,rel
CJNE A,#data,rel CJNE Rn,#data,rel
;若(Rn) >#data ,则(PC)+rel→PC,且0→CY; ;若(Rn) < #data ,则(PC)+rel→PC,且1→CY; ;若(Rn) = #data ,则顺序执行,且0→CY。 三、减1不为0转移指令
DJNZ
Rn,rel ;(Rn)-1→Rn;
;若(Rn)≠0, 则(PC)+rel →PC; ;若(Rn) = 0, 则结束循环, 顺序执行
?DJNZ direct,rel
;(direct )-1→ direct ;
;若(direct)≠0,则(PC)+rel →PC; ;若(direct) = 0,则结束循环,顺序执行
调用和返回指令
一、短调用指令
ACALL addr11
;(PC)+2→PC
;(SP)+1→SP,(PC 0~7)→(SP) ;(SP)+1→SP,(PC 8~15)→(SP) ;addr0~10→PC0~10,(PC11~15)不变
;(PC)+3→PC
二、长调用指令
LCALL addr16
;(SP)+1→SP,(PC 0~7)→(SP) ;(SP)+1→SP,(PC 8~15)→(SP) ;addr0~15→PC 三、返回指令
1. 从子程序返回指令
RET ;((SP)) →PC 8~15 ,(SP) -1→SP
;((SP)) →PC 0~7 ,(SP) -1→SP
;((SP)) →PC 8~15 , (SP) -1→SP ; ((SP)) →PC 0~7 , (SP) -1→SP ;开放中断逻辑
2. 中断服务程序返回指令
RETI
四、空操作指令
NOP