这几天有很多师弟问我有没有去年微机原理的考试资料,一年这么久了我也记不太清了,隐约记得当时有整理过一份单片机指令系统笔记……
插一首轻音乐,缓解一下学习的气氛
指令中直接给出操作数的寻址方式。
MOV A, #80H
MOV DPTR, #2000H
指令中直接给出操作数所在的地址(dir)的寻址方式。
MOV A, 25H
MOV P0, #45H
MOV 30H, 20H
以通用寄存器的内容为操作数的寻址方式。通用寄存器包括 A, B, DPTR, R0~R7
, 其中 B
仅在乘除法指令中为寄存器寻址,在其他指令为直接寻址;A
既可以寄存器寻址,又可以直接寻址(此时写作 ACC
)。
MOV A, R0
MUL AB
MOV B, R0
PUSH ACC
ADD A, ACC
以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式,简称寄存器间址。能够用于寄存器间址的寄存器有 R0, R1, DPTR
, 前面加@表示。
MOV @R0, A
MOVX A, @R1
MOVX @DPTR, A
由寄存器DPTR或PC中内容加上A累加器内容之和,形成操作数地址的寻址方式。变址寻址只能对ROM中的数据寻址操作,由于ROM只读,故变址寻址只有读操作。
MOVC A, @A+DPTR
MOVC A, @A+PC
以当前程序计数器PC的内容为基值,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。
SJMP 08H ; PC + 08H -> PC
对位地址中的内容作位操作的寻址方式,是一种直接寻址方式。
SETB 20H
MOV 32H, C
ORL C, 5AH
;(1) 以A为目的操作数
MOV A, Rn
MOV A, dir
MOV A, @Ri
MOV A, #data
;(2) 以Rn为目的操作数
MOV Rn, A
MOV Rn, dir
MOV Rn, #data
;(3) 以DPTR为目的操作数
MOV DPTR, #data16
;(4) 以直接地址为目的操作数
MOV dir, A
MOV dir, Rn
MOV dir, dir
MOV dir, @Ri
MOV dir, #data
;(5) 以间接地址为目的操作数
MOV @Ri, A
MOV @Ri, dir
MOV @Ri, #data
;(1) 访问外部RAM指令
MOVX @Ri, A
MOVX @DPTR, A
MOVX A, @Ri
MOVX A, @DPTR
;(2) 访问ROM指令(查表)
MOVC A, @A+PC
MOVC A, @A+DPTR
;(1) 入栈操作
PUSH dir ; SP +1 -> SP, ; (dir) -> (SP)
;(2) 出栈操作
POP dir ; (SP) -> (dir), ; SP - 1 -> SP
压入堆栈时,SP先加1,数据再压入;弹出堆栈时,数据先弹出,SP再减1。
XCH A, Rn
XCH A, dir
XCH @Ri
XCHD A, @Ri
SWAP A
ADD A, <@Ri,dir,Rn,#data> ; 加
ADDC A, <@Ri,dir,Rn,#data> ; 进位加
SUBB A, <@Ri,dir,Rn,#data> ; 借位减
ANL A, <@Ri,dir,Rn,#data> ; 与
ORL A, <@Ri,dir,Rn,#data> ; 或
XRL A, <@Ri,dir,Rn,#data> ; 异或
ANL dir, <A,#data> ; 与
ORL dir, <A,#data> ; 或
XRL dir, <A,#data> ; 异或
;(1) 加1指令
INC A
INC @Ri
INC dir
INC Rn
INC DPTR
;(2) 减1指令
DEC A
DEC @Ri
DEC dir
DEC Rn
; 将A中二进制数相加和调整成BCD码
DA A
指令按下列原则进行调整:
和低4位大于9或有半进位,则低4位加6;如果和的高4位大于9或有进位,则高4位加6。指令根据相加和及标志自行判断,因此,该指令应紧跟在加指令之后,至少在加指令和该指令之间不能有影响标志的指令。
CPL A ; A 取反
CLR A ; A 清零
RL A ; A 左环移
RR A ; A 右环移
RLC A ; A 左大环移
RRC A ; A 右大环移
;(1) 乘法指令
MUL AB ; A×B -> BA
;(2) 除法指令
DIV AB ; A÷B -> A···B
均为8位无符号乘、除法。若除数B=00H,则指令执行后,溢出标志OV=1,且A、B内容不变。
LCALL addr16 ; addr16 -> PC[0~15]
12<addr16>
,3字节。 ACALL addr11 ; addr11 -> PC[0~10]
a10 a9 a8 10001 a7 a6 a5 a4 a3 a2 a1 a0
,2字节。 RET ; 从调用子程序返回
; 功能:从栈顶弹出断点到PC, ; 从子程序返回主程序。
RETI ; 从中断服务程序返回
; 功能:从栈顶弹出断点到PC, ; 并恢复中断优先级状态触发器, ; 从中断服务返回主程序。
;(1) 短转移(绝对转移)
AJMP addr11 ; addr11 -> PC[0~10], ; 2KB范围
;(2) 长转移(绝对转移)
LJMP addr16 ; addr16 -> PC[0~15], ; 64KB范围
;(3) 间接转移(绝对转移)
JMP @A+DPTR ; A+DPTR -> PC
;(4) 无条件相对转移
SJMP rel ; PC + rel -> PC
条件转移指令均为相对转移指令。
;(1) 累加器为零转移
JZ rel ; A=0时转移
;(2) 累加器非零转移
JNZ rel ; A≠0时转移
;(3) 减1非零转移
DJNZ Rn, rel ; Rn-1 -> Rn, ; Rn≠0时转移 DJNZ dir, rel ; (dir)-1 -> (dir), ; (dir)≠0时转移
;(4) 比较转移
CJNE A, dir,rel ; A≠dir时转移
CJNE A, #data,rel ; A≠#data时转移
CJNE Rn, #data,rel ; Rn≠#data时转移
CJNE @Ri, #data,rel ;(Ri)≠#data时转移
NOP
常用于产生一个机器周期的延时。
CLR C ; 0 -> C
CLR bit ; 0 ->bit
SETB C ; 1 -> C
SETB bit ; 1 -> bit
CPL C ; /CY -> CY
CPL bit ; /bit -> bit
ANL C, bit ; CY & bit -> CY
ANL C, /bit ; CY & /bit -> CY
ORL C, bit ; CY | bit -> CY
ORL C, /bit ; CY | /bit -> CY
MOV C, bit
MOV bit, C
JC rel ; CY=1时转移
JNC rel ; CY=0时转移
JB bit, rel ; (bit)=1时转移
JNB bit, rel ; (bit)=0时转移
JBC bit, rel ; (bit)=0时转移, ; 且该位清零
水平有限,资料不够全面,希望这份笔记对大家有所帮助,祝师弟师妹们考试顺利!!
参考资料:李群芳《单片微型计算机与接口技术(第5版)》