4.2.1 指令系统中使用的常用符号:
Rn: 当前寄存器工作区中的寄存器, 其中, n=0 -- 7;
direct: 内部数据存储器地址, 可指定一个内部RAM单元(0-- 127)或一个专用寄存器(128-- 255);
@Ri: 通过R1或R0间接寻址, 指定数据存储器RAM中的一个单元(0-- 255);
#data: 在指令中指明8位常数;
#data16: 在指令中指明16位常数;
addr11: 11位目的地址, 用在ACALL或AJMP指令中,表示调用或转移地址, 寻址范围为2KB;
addr16: 16位目的地址, 用在LCALL或LJ MP指令中, 表示调用或转换地址, 寻址范围为64KB;
rel: 8位偏移量, 用补码表示, 用在SJMP等转移指令中, 寻址范围为 - 128-- + 127;
bit: 表示位寻址空间中的位地址, 8 位, 寻址范围为0-- FFH。
4.2.2 80C51单片机指令系统的寻址方式:
1、立即寻址---是指操作数在指令操作数域直接给出:
2、直接寻址---是指操作数的地址直接在指令操作数域给出:
可访问3 种地址空间
(1)内部RAM低128单元: 00H-7F
- MOV A, 3CH ; (A)<---(3CH)
(2)特殊功能寄存器SFR, 唯 一方式80H-0FFH
- MOV A, P1 ; (A) <---(P1口)
- MOV A, 90H
(3)211个位地址空间
- MOV C, 30H ; (Cy)<---(30H)
- MOV A, 30H ; A <---(30H)
例: MOV A , 30H; 机器码为E530H
指令功能是把直接地址30H单元的内容送累加器A, 即(30H)--->(A)如图所示。
例: MOV DPTR , #1234h
(DPH)=12H
(DPL)=34H
注意: 立即数前加 " # "号,以区别直接地址
例如: MOV A, #30H ; (A)<--- 30H
MOV A, 30H ; (A)<---(30H)
3、寄存器寻址---操作数存放在寄存器中:
MOV A , RO
MOV R0 , #01001111B
| |
RS1 |
RSO |
寄存器组 |
片内RA M地址 |
寄存器 |
0 | 0 | 第0 组 | 00H ~07H | R0--R7 |
0 |
1 |
第1 组 |
08H~ 0FH |
R0--R7 |
1 |
0 |
第2 组 |
10H~17H |
R0--R7 |
1 |
1 |
第3 组 |
18H~1FH |
R0--R7 |
【例4-9】 MOV A,R1 ;(A)<---(R1)
例如: MOV A, R3 ;机器码为 0EBH 指令功能是把当前R3中的操作数送累加器A。指令执行示意图如图3-6所示。设 ( R3) =12H
4、寄存器间接寻址:
- 是指寄存器中存放的是操作数的地址,而操作数在存储器中,通过寄存器可间接得到。
- 寄存器间接寻址用符号''@"表示
寄存器间接寻址可寻址范围如下:
(1)内部RAM低128单元, 地址范围00H~7FH,用Ri(i=0,1)和SP作为间址寄存器;
(2)与P2口配合使用, 用Ri指示低8位地址, 可寻址片外数据存储器或I/O口的64kB7\区域;
(3)DPTR间接寻址寄存器, 可寻址片外程序存储器或数据存储器包括1/0 口的各自的64kB 区域。