资源描述
寻指方式: 立即寻址方式: 操作数在指令中直接给出 8位立即数: MOV A, #20H
16位立即数: MOV DPTR, #20D8H
直接寻址方式: 直接以单元地址的形式给出 MOV A, 20H
寄存器寻址方式: 操作数在寄存器 MOV A, R2
寄存器间接寻址方式: 以寄存器中的内容为地址取得操作数的方法。 使用的寄存器为Ri和DPTR,使用时寄存器前面加“@“标志。MOV A,@Ri ;MOVX A,@DPTR (R1)=80H、(80H)=33H,则执行指令MOV A,@Ri后,累加器A的内容为33H而不是80H
基址加变寻址方式: 以DPTR或PC为基址寄存器,以A为变址寄存器
形成16位地址 MOVC A,@A+DPTR
位寻址方式: 以位为操作数 MOV C, 4AH
范围: 1)内部RAM的位寻址区
2)可供位寻址的11个专用寄存器
相对寻址方式:根据地址相对当前PC的偏移量 JZ rel
1. 通用传送指令MOV : 该指令是“复制”,不改变源操作数.
1) 以累加器A为目的地址的指令 2) 以Rn为目的地址的指令
MOV A,Rn ;A ← (Rn) MOV Rn,A ;Rn ← (A)
MOV A,direct ;A ← (direct) MOV Rn,direct ;Rn ← (direct)
MOV A,@Ri ;A ← ((Ri)) MOV Rn,#data ;Rn ← data
MOV A,#data ;A ← data
3) 以直接地址为目的地址的指令
MOV direct,A ;direct ← (A)
MOV direct,Rn ;direct ← (Rn)
MOV direct,direct ;direct ← (direct)
MOV direct ,@Ri ;direct ← ((Ri))
MOV direct ,#data ;direct ← data
4) 以寄存器间接地址为目的的地址的指令
MOV @Ri,A ;(Ri)←(A)
MOV @Ri,direct ;(Ri)←(direct)
MOV @Ri,#data ;(Ri)←data
5)16位数据传送指令
MOV DPTR,#data16 ;DPTR ← data16
;DPL ← data7~0
;DPH ← data15~8
2. 数据交换指令
1) 字节交换指令XCH 功能:将累加器A中内容与源操作数互换。
XCH A,Rn ;(A)←→ (Rn)
XCH A,direct ;(A)←→ (direct)
XCH A,@Ri ;(A)←→( (Ri))
例:设(A)=08H,(R7)=0DCH, 执行指令
XCH A, R7
结果为:(A)=0DCH, (R7)=08H
2) 半字节交换XCHD 功能:累加器A中内容与源操作数低4位交换,高4位不变。
XCHD A, @Ri ;(A)低4位←→( (Ri))低4位
例:(A)=80H,(R0)=30H,(30H)=0FH,执行指令
XCHD A, @R
结果为:(A)=8FH, (30H)=00H
3) 累加器高低数字节交换指令SWAP A 功能:A中高4位与低4位互换。
SWAP A ;(A)低4位←→ (A)高4位
例:(A)=80H ,执行SWAP A结果为:(A)=08H.
〔例3-4〕试用交换指令使片内20H单元的高4位与21H单元的低4位交换。
〔解〕 XCH A,20H
SWAP A
MOV R1,21H
XCHD A,@R1
SWAP A
XCH A,20H
3.栈操作指令: 数据写入堆栈称入栈,数据从堆栈中读出称出栈。
1) 入栈指令PUSH PUSH direct ;SP ← (SP)+1, (SP) ← (direct)
PUSH指令常用于保护CPU现场
例:设(A)=30H,(B)=80H ,(SP)=50H .则执行指令:
PUSH A
PUSH B
结果为:(51H)=30H,(52H)=80H,(SP)=52H
2) 出栈指令POP POP direct ; direct ← ((SP)), SP ← (SP)-1
POP指令常用于恢复CPU现场。
〔例3-5〕 试用栈操作指令完成P0和P1内容的互换。
解〕 PUSH P0
PUSH P1
POP P0
POP P1
3.3.2 片外数据存贮器与累加器A之间的传送指令
MOVX A, @DPTR ;A ← ((DPTR))
MOVX A, @Ri ;A ← ((Ri))
MOVX @ DPTR, A ;(DPTR) ← (A)
MOVX @ Ri , A ;(Ri) ← (A)
①必须通过累加器A中转
②寻址方式只能是寄存器间接寻址。参与间接寻址的寄存器只有Ri和DPTR两种(3个)。
DPTR为16位寄数器,寻址范围为000H~0FFFFH共64KB空间。
Ri是8位寄数器,只能寻址00~0FFH低256单元。
〔例3-6〕 ①将片外数据存贮器2000H单元的内容传送到片内的20H单元中;②将片外数据存贮器2000H单元的内容传送到片外0FAH单元。
〔解〕① MOV DPTR ,#2000H
MOVX A,@DPTR
MOV 20H, A
② MOV DPTR ,#2000H
MOVX A,@DPTR
MOV R0,#0FAH
MOVX @R0,A
3.3.3 程序存贮器向累加器A传送指令
MOVC A,@A+PC ;A ← ((A)+(PC))
MOVC A,@A+DPTR ;A ← ((A)+(DPTR)) 尽可能使用
程序存贮器只能读出,不能写入,所以其数据传送都是单向的
〔例3-8〕 改正下列指令中的错误,完成其功能:
①MOV A,2000H ;片外RAM 2000H单元内容送入A。
②MOVX 20H,2000H ;片外RAM 2000H单元内容送入片内20H单元。
③MOVC A,2000H ;将ROM 2000H单元内容送入A。
④MOVX A,@A+DPTR ;以查表方式将片外RAM单元的内容送入A。
⑤XCH 40H,30H ;交换片内RAM 30H和40H单元的内容.
⑥PUSH AB ;将寄存器对AB的内容压入堆栈。
〔解〕 ① MOV DPTR,#2000H ② MOV DPTR,#2000H
MOVX A,@DPTR MOV 20H,A
MOVX A,@DPTR
③ MOV DPTR,#2000H ④无法以查表方式将片外RAM 存贮单元的内容送入A。
MOV A,#0
MOVC A,@A+DPTR
⑤XCH A,20H ⑥PUSH A
XCH A,30H PUSH B
XCH A,20H
3.4 算术运算类指令
3.4.1 加法指令
1.不带进位加法指令 ADD ADD A,Rn ;A ←(A)+(Rn)
ADD A,direct ;A ←(A)+(direct)
ADD A,#data ;A ←(A)+ data
ADD A,@Ri ;A ←(A)+((Ri))
2.带进位加法指令ADCC ADDC A,Rn ;A ← (A)+(Rn)+(C)
ADDC A,direct ;A ← (A)+( direct)+(C)
ADDC A,#data ;A ← (A)+data+(C)
ADDC A,@Ri ;A ← (A)+((Ri))+(C)
3. 增量指令INC INC A ; A ← (A)+1
INC Rn ; Rn ← (Rn)+1
INC direct ;direct ← (direct)+1
INC @Ri ;(R)i ←( (Ri))+1
INC DPTR ; DPTR ← (DPTR)+1
4.十进制调整指令DA A
3.4.2 减法指令
1.带进位减法指令SUBB : SUBB A,Rn ;A ← (A) –(Rn)–(C)
SUBB A,direct ;A ← (A) –(direct)–(C)
SUBB A,@Ri ;A ← (A) – ((Ri))–(C)
SUBB A,#data ;A ← (A) – data – (C)
2. 减1指令DEC: DEC A ;A ← (A)-1
DEC Rn ;Rn ← (Rn)-1
DEC direct ;direct ← (direct)-1
DEC @Ri ;(Ri) ←((Ri))-1
3.4.3 乘法指令MUL MUL AB
3.4.4 除法指令DIV DIV AB
3.5 逻辑运算及移位指令
3.5.1 逻辑运算指令
1.逻辑与指令ANL ANL A,Rn ;A ← (A)∧(Rn)
ANL A,direct ;A ← (A)∧(direct)
ANL A,@Ri ;A ← (A)∧((Ri))
ANL A,#data ;A ← (A)∧data
ANL direct,A ;direct← (A)∧(direct)
ANL direct,#data ;direct ← (direct)∧data
2.逻辑或指令ORL ORL A,Rn ;A ← (A)∨(Rn)
ORL A,direct ;A ← (A) ∨(direct)
ORL A,@Ri ;A ←(A) ∨((Ri))
ORL A,#data ;A ← (A) ∨data
ORL direct, A ;direct← (A) ∨(direct)
ORL direct, #data ;direct ← (direct) ∨data
4.累加器清0指令 CLR CLR A
5.累加器取反指令 CPL CPL A
3.6 位操作指令
3.6.1 位传送指令MOV MOV C,bit ;C ← (bit)
MOV bit,C ;bit ← (C)
3.6.2 位置位/复位指令
1. 位置位(置1)命令SETB
SETB C ;C ← 1
SETB bit ;bit ← 1
2. 位复位(清0)命令
CLR C ;C ← 0
CLR bit ;bit ← 0
3.6.3 位运算指令
1. 逻辑与指令ANL
ANL C,bit ;C ←(C)∧(bit)
ANL C,/bit ;C ←(C)∧(/bit)
2. 逻辑或指令ORL
ORL C,bit ;C ← (C)∨(bit)
ORL C,/bit ;C ← (C)∨(/bit)
3. 逻辑非(求反)指令CPL
CPL bit ; bit ← (/bit)
3.7.1 无条件转移指令
1.长转移指令LJMP LJMP addr16 ;PC ← addr16
2. 短转移指令SJMP SJMP rel ;PC ← (PC)+2+rel
3. 绝对转移指令AJMP AJMP addr11 ;PC ← (PC)+2,PC10~0 ← addr11
4.变址转移指令JMP JMP @ A+DPTR ;PC ← (A)+(DPTR)
3.7.2 条件转移指令: 程序的转移是有条件的,当指令中规定的条则满足时,程序转移,否则程序不转移,仍顺序执行。
1. 测试转移指令
1)累加器A判0转移指令
JZ rel ;若(A)=0,转移,PC ← (PC)+2+rel
;若(A)≠0,顺序执行。
JNZ rel ;若(A)≠0,转移,PC ← (PC)+2+rel
2)进位位测试转移指令
JC rel ;若(C)=1,转移,PC ← (PC)+2+rel
JNC rel ;若(C)=0,转移,PC ← (PC)+2+rel
3) 位单元测试转移指令
JB bit,rel ;若(bit)=1,转移,PC ← (PC)+3+rel
JNB bit,rel ;若(bit)=0,转移,PC ← (PC)+3+rel
JBC bit,rel ;若(bit)=1,转移,PC ← (PC)+3+rel
;同时将bit位清零。
3.9 MCS-51单片机指令小结
3.9.1 MCS-51单片机指令系统组成
MCS-51汇编语言有42种操作码助记符来描述33种操作功能。功能助记符与不同寻址方式组合,得到111条指令,分为5大类:
1)数据传送类指令29条
2)运算类指令24条
3)逻辑运算及移位类指令24条
4)位操作类指令17条
5)控制转移类指令17条
另外,MCS-51指令根据书写格式,可分为单操作数、双操作数、三操作数和无操作数;按照长度不同,分为单字节、双字节和三字节指令;根据执行时间的长短,分为单周期、双周期和四周期指令。
指令应用范围小结
1)外部RAM单元只能通过4条MOVX指令与累加器A进行数据传输: 1.MOVX A, @Ri 2.MOVX A, @DPTR 3.MOVX @Ri, A 4.MOVX @DPTR, A
2)对于程序寄存器ROM的操作有两种,一种是通过查表指令,将ROM单元的内送到累加器A中,指令有2条: MOVC A, @A+DPTR MOVC A, @A+PC
展开阅读全文