资源描述
• 1、立即寻址
(immediate addressing )
Ø 双字节指令,第一个字节是操作码,第二个字节是操作数,操作数在指令中直接给出,故称为立即数。
Ø 在立即数前面必须加上前缀“#”。
Ø 如:MOV DPTR,#1234H
1234H是立即数,指令功能是把16位立即数1234H送到数据指针DPTR中,如图。
• 注意:
Ø 立即寻址只能用于源操作数。
MOV A,#12H (√)
MOV DPTR,#1200H (√)
MOV #1200H,DPTR (×)
• 2、直接寻址
(direct addressing)
Ø 在指令中直接给出操作数单元的地址。
Ø 如:MOV A,3AH
指令功能:把片内RAM中3AH单元内的数据传送给累加器A。如图所示:
Ø 直接寻址方式只能给出8位地址,限于片内RAM:
(1)低128单元,在指令中直接以单元地址形式给出。
(2)特殊功能寄存器,在指令中直接以单元地址形式给出,还可以寄存器符号形式给出。
如:PUSH DPH==PUSH 83H。
直接寻址访问累加器A时,用ACC表示累加器,以便与寄存器寻址方式区别。
• 3、寄存器寻址
(register addressing)
Ø 在指令中将指定寄存器的内容作为操作数。
Ø 寄存器寻址方式中,用寄存器名表示寄存器。
Ø 寻址范围:四组通用寄存器Rn(R0~R7)、部分专用寄存器( A, B, DPTR,)。
Ø 如:INC R0
指令功能:把寄存器R0的内容加1,再送回R0中。
• 4、寄存器间接寻址
(register indirect addressing )
Ø 在指令中给出的寄存器内容是操作数的地址,从该地址中取出的才是操作数。
Ø 在该寻址中,寄存器的名称前需加前缀“@”。
Ø 例如,指令MOV A,@R0
指令功能:若R0寄存器的内容是3AH,指令的功能是以3AH为地址,将3AH地址单元的内容送到累加器A中。如下图:
• 寄存器间接寻址的寻址范围:
(1)片内RAM的低128单元,只能采用R0或R1为间接寻址寄存器。其形式为@Ri(i=0,1),如MOV A,@R0。
(2)片外RAM的64KB单元,使用DPTR作为间接寻址寄存器。例如,MOVX A,@DPTR。
(3)片外RAM的低256单元,使用R0或R1作为间接寻址寄存器。
(4)堆栈区:堆栈操作指令PUSH和POP,以SP作间接寻址寄存器(隐含SP)。
• 5、相对寻址
(relative addressing )
Ø 仅用于相对转移指令。
Ø 以PC的当前值(即相对转移指令执行后PC的内容),加上指令中给出的偏移量,形成程序转移的目的地址,即
目的地址=PC的当前值+偏移量
Ø 偏移量是一个8位二进制补码数,取值范围为-128~+127。
• 例如,指令JC 16H
(二字节指令,当标志位C=1时转移,C=0时不转移)
Ø 若进位位C=0,则PC=PC+2,即顺序往下;
Ø 若进位位C=1,则PC中的当前内容(PC+2),加上偏移量80H所得结果为该转移指令的目的地址,见下图:
• 6、变址寻址
(index addressing )
Ø 以DPTR或PC为基址寄存器,累加器A为变址寄存器,以两者内容相加后形成的16位地址作为操作数地址,即:
操作数的有效地址=基址寄存器+变址寄存器
Ø 例如,MOVC A,@A+DPTR
功能:把DPTR和A的内容相加后得到的程序存储器地址单元的内容送A。
Ø 变址方式常用于访问程序存储器的数据表,即查表指令。
例3-2-3:已知片外ROM的0302H单元有一常数X,现欲把它取到累加器A中,请编写相应的程序.
解: 根据变址寻址的 特点,基地址应取0300H,地址偏移量为02H.相应程序为:
MOV DPTR, #0300H
MOV A, #02H
MOVC A, @A+DPTR
• 7、位寻址
(bit addressing )
Ø 位寻址是指按位进行的寻址操作。
Ø 8051单片机中,操作数不仅可以按字节进行操作,也可以按位进行操作。把某一位作为操作数时,这个操作数的地址称为位地址。
Ø 位寻址区包括:
(1)内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;
(2)特殊功能寄存器SFR中有11个寄存器可以进行位寻址。
Ø 寻址位在指令中有以下4种表示方法:
(1)直接使用位地址表示。
(2)特殊功能寄存器符号加位数。例如PSW寄存器的第7位,可表示为:PSW.7。
(3)位名称表示方法,特殊功能寄存器中的一些寻址位是有名称的,如PSW寄存器第7位C标志位,则可使用C表示该位。
(4)用bit定义的有名字的位地址。如:
L1 bit PSW.7,用L1代替PSW.7
• MCS-51的寻址方式(P46)
• 课堂练习
• P73:3.1第8小题
• 3.3 指令系统
MCS-51单片机指令系统包括111条指令,按功能可以划分为以下5类:
• 1. 内部8位数据传送指令(15条)
Ø 内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。
Ø 指令基本格式:
MOV <目的操作数>,<源操作数>
• MOV指令在片内RAM的允许操作图
[课后习题1]
试编写把片内RAM 30H单元和40H单元中的内容进行交换的程序.
• 2、16位数据传送指令(1条)
Ø 格式:MOV DPTR,#data 16
Ø 功能:把16位常数送入数据指针DPTR。其中,高位字节立即数送入DPH,低位字节立即数送入DPL。唯一的16位立即数传送指令。
Ø 例如:MOV DPTR,#1234H
执行运行后:DPTR=1234H,DPH=12H,DPL=34H。
• 注意:
• 外部数据存储器传送操作
• 例题3-3-3:把外部数据存储器2040H单元中的数据传送到外部数据存储器2560H单元中去。
• 例3-3-4:设R0=30H,30H=4AH,A=28H,则执行下列指令后的结果为?
Ø 执行XCH A,@R0后,
Ø 执行XCHD A,@R0后,
Ø 执行SWAP A后,
• 注意:
① 堆栈使用时一定先设堆栈指针,复位时SP=07H 。
② 堆栈遵循后进先出的原则安排数据。
③ 堆栈操作必须是字节操作,且只能直接寻址。
(√)PUSH/POP ACC 或 PUSH/POP 0E0H
(×)PUSH/POP A
(√)PUSH 00H
(×)PUSH R0
• 3.3.2 算术运算类指令
• 1)加法指令(4条)
Ø 指令格式: ADD A ,<src>
其中: <src>包括Rn、@Ri、direct、#data。
Ø 功能: A←A+ <src>
Ø 对标志位的影响:ADD对PSW中的所有标志位均产生影响。
• 2)带进位的加法指令(4条)
Ø 指令格式: ADDC A ,<src>
其中: <src>包括Rn、@Ri、direct、#data。
Ø 功能: A←A+ <src> + Cy
Ø 对标志位的影响:ADDC对PSW中的所有标志位均产生影响。
• 3)带借位的减法指令(4条)
Ø 指令格式: SUBB A ,<src>
其中: <src>包括Rn、@Ri、direct、#data。
Ø 功能: A←A- <src> - Cy
Ø 对标志位的影响:SUBB对PSW中的所有标志位均产生影响。
• 加减法指令关系图
• 4)BCD码调整指令(1条)
• 5)加1指令(5条)
• 6)减1指令(4条)
• 1、无条件转移指令(4条)
LJMP addr16 ;addr16 → PC
转移范围:64KB程序存储器的任何单元。见下图:
AJMP addr11
;先PC+2 → PC, addr11 → PC10~0 , PC15~11不变
转移范围:含有下一条指令首地址的同一个2KB范围,即高5位地址相同;
SJMP rel ;先PC+2 → PC,后PC+ rel → PC;
转移范围:-128~+127
对应rel值:00H~7FH(0~+127)
80H~FFH(-128~-1)
JMP @A+DPTR ;A+DPTR→ PC
转移范围:是以DPTR为首地址的256B。
LCALL addr16 ;PC+3→PC
;SP+1→SP, PC 0~7 →(SP)
;SP+1→SP, PC 8~15 →(SP)
;addr0~15→PC
说明:(1)该指令执行前PC值为下一条指令的首地址;
(2)转移范围:整个程序存储空间,64KB范围。
例3-3-13:设SP=5FH,符号地址“SUBRTN”指向5678H,分析下列指令的执行情况:
地址 程序
0123H LCALL SUBRTN
0126H ……..
解:调用指令执行后,PC=0126H,
SP+1→SP=60H, PC 0~7 →(SP ),即 (60H)=26H,
SP+1→SP=61H, PC 8~15 →(SP) ,即 (61H)=01H
PC压栈保护后,5678H →PC,
即新的PC值为5678H转去执行“SUBRTN”子程序。
①子程序返回指令
RET ;(SP)→PC 8~15 , SP -1→SP
;(SP)→PC 0~7 , SP -1→SP
②中断服务程序返回指令
RETI ;(SP) →PC 8~15 , SP -1→SP
; (SP) →PC 0~7 , SP -1→SP
;开放中断逻辑
解: 相应的程序为:
ORG 1000H
MOV SP, #70H
MOV R0, #20H
MOV R2, #0BH
ACALL ZERO
MOV R0, #30H
MOV R2, #0FH
ACALL ZERO
MOV R0, #40H
MOV R2, #10H
ACALL ZERO
SJMP $
Ø 包括位数据传送、位状态修改、逻辑运算、条件转移等指令,共17条。
Ø 位地址的表示方法:
(1)直接用位地址 如:D4H
(2)用特殊功能寄存器名加位数 如:PSW.4
(3)用位名称 如:RS1、RS0
(4)用bit定义的有名字的位地址
如:N1 bit PSW.4
①MOV C,bit ;(bit)→C
②MOV bit,C ; C → (bit)
注意:
其中一个操作数必须是位累加器C。
例如:
MOV C,TR0,MOV 08H,C
1)位清0指令
CLR C ; 0→ C
CLR bit ; 0→(bit)
2)位置1指令
SETB C ; 1→ C
SETB bit ; 1→(bit)
3)位取反指令
CPL C ; (/C)→ C
CPL bit ;(/bit)→ bit
1)位逻辑“与”指令
ANL C,bit ; (C)∧(bit)→ C
ANL C,/bit ; (C)∧(/bit)→ C
2)位逻辑“或”指令
ORL C,bit ; (C)∨(bit)→ C
ORL C,/bit ; (C)∨(/bit)→ C
JB bit,rel ; PC+3→ PC
;若(bit)= =1,则PC+rel→ PC
;若(bit)= =0,则顺序向下执行
JNB bit,rel ; PC+3→ PC
;若(bit)=0,则PC+rel→ PC
;若(bit)=1,则顺序向下执行
JBC bit,rel ; PC+3→ PC
;若(bit)=1, 则PC+rel→ PC, 0→(bit)
;若(bit)=0,则顺序向下执行
• 总 结
Ø 理解指令相关概念,熟悉指令的表示方法;
Ø 理解并掌握指令的寻址方式,掌握立即寻址、直接寻址、寄存器寻址、寄存器间接寻址等常见寻址方式;
Ø 掌握 常见指令的功能及其用法。
展开阅读全文