• 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