| 物理上有四个存储空间 | 逻辑上有三个存储空间 | ||
| 片内数据存储器 | 片内程序存储器 | 片内数据存储器 | 片外数据存储器 64K | 
| 片外数据存储器 | 片外程序存储器 | 片内外统一的程序存储器 64K | |
| 51子系列 | 52子系列 | |
|---|---|---|
| 片内数据存储器 | 128B | 256B | 
| 专用寄存器区 | 128B | 128B | 
| 片内程序存储器 | 4K | 8K | 
程序存储区
存放编制好的程序或表格数据,只能读取
- 内外程序存储器的地址空间是统一的,共64K  
- 若EA=1,则从内部ROM开始执行,超出内部ROM的容量时,再从外部ROM的1000H单元接着执行。(51子系列)
- 若EA=0,则直接从外部ROM取指执行
- 对程序存储器访问的寻址方式
- 立即数寻址
- 基址+变址寻址
- 程序存储器中的特殊单元
| 0000H | 取指执行程序的起始单元,一般在该单元放一条绝对跳转指令,用户设计的主程序从跳转地址开始安放 | 
| 0003H | 外部中断0中断服务程序的入口地址 | 
| 000BH | 定时器0溢出中断中断服务程序的入口地址 | 
| 0013H | 外部中断1中断服务程序的入口地址 | 
| 001BH | 定时器1溢出中断中断服务程序的入口地址 | 
| 0023H | 串行口中断服务程序的入口地址 | 
| 002BH | 定时器2溢出中断中断服务程序的入口地址 | 
片内数据存储器
- 片内数据存储区的编址
- 51子系列:低128字节RAM与SFR块相连   
- 52子系列:高128字节RAM与SFR块逻辑地址重合   - 高128RAM:寄存器间接寻址
- SFR:直接寻址
 
- 低128字节RAM的配置
 
  
- 通用寄存器区 
 4组8个8位寄存器R0~R7
 由PSW中的RS1,RS0选择当前工作区
- 位寻址空间 
 20H~2FH字节可以位寻址
- 字节寻址空间 
 30H~7FH字节(80B)
- 堆栈 
 堆栈设置在内部数据存储区
 堆栈的位置不固定,可以通过一个专用寄存器SP(栈指针)来设定栈顶的位置
 数据入栈时,栈指针递增
 堆栈深度最大为128B
专用寄存器
| 标识符 | 名 称 | 地址 | 
|---|---|---|
| *ACC | 累加器 | E0H | 
| *B | B寄存器 | F0H | 
| *PSW | 程序状态字 | D0H | 
| SP | 堆栈指针 | 81H | 
| DPTR | 数据指针(DPH和DPL) | 82H,83H | 
| *P0 | 口0 | 80H | 
| *P1 | 口1 | 90H | 
| *P2 | 口2 | A0H | 
| *P3 | 口3 | B0H | 
| *IP | 中断优先级寄存器 | B8H | 
| *IE | 中断控制寄存器 | A8H | 
| TMOD | 定时器方式寄存器 | 89H | 
| *TCON | 定时器控制寄存器 | 88H | 
| TH0 | 计数器0高位 | 8CH | 
| TL0 | 计数器0低位 | 8AH | 
| TH1 | 计数器1高位 | 8DH | 
| TL1 | 计数器1低位 | 8BH | 
| *SCON | 串行口控制 | 98H | 
| SBUF | 串行数据缓冲器 | 99H | 
| PCON | 电源控制 | 97H | 
- 51子系列有19个专用寄存器
- 52子系列有22个专用寄存器
- 双字节寄存器6个,其中PC在物理上独立,所以专用寄存器在SFR区占26字节
- *表示 可以位寻址的寄存器 (其地址可被8整除)
- 程序计数器PC 
 用于存放下一条要执行指令的地址
 是一个16位专用寄存器,寻址范围为0~65535 (64K)
 PC在物理上是独立的,不属于内部数据存储器的SFR
- 累加器A(Acc) 
 最常用的一个专用寄存器
 大部分单操作数指令的操作数取自累加器
 很多双操作数指令的一个操作数取自累加器
 加、减、乘、除运算指令的结果都存放在A或AB中
- B寄存器 
 在乘、除法指令中用到B寄存器
 乘法:两个操作数分别取自A和B,结果存放于AB中
 除法:被除数在A中、除数在B中,商在A、余数在B中
 其它指令中,B可作为RAM的一个单元用
- 程序状态字寄存器PSW — 保存指令执行状态 
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 
|---|---|---|---|---|---|---|---|
| Cy | AC | F0 | RS1 | RS0 | OV | - | P | 
- Cy:进位标志 
 保存算术运算的进或借位
 位操作的累加器
- AC:辅助进位标志 
 加法或减法运算产生从D3向D4进位或借位时,AC=1
 常用于十进制调整指令
- F0:标志0,用户定义的一个状态标记 
- RS1, RS0:通用寄存器组选择 
 0 0 寄存器组0(00H- 07H)0FH)
 0 1 寄存器组1(08H
 1 0 寄存器组2(10H- 17H)1FH)
 1 1 寄存器组3(18H
- OV:溢出标志位 
 当执行算术指令时,由硬件置位或清除,以指示溢出状态。- 执行加法操作时,以$C’_i$表示第i位向第i+1位有进位,则 $$OV=C’_6 ⊕ C’_7 $$
 溢出标志可以判断带符号数相加时,和数是否溢出,即大于127或小于-128
- 对于减法操作,以$C’_i$表示第i位向第i+1位有借位,则$$OV= C’_6 ⊕ C’_7$$
- 对于乘法操作,若两数乘积大于255时,则OV=1
- 对于除法,当除数为0时,OV=1
 
- 执行加法操作时,以$C’_i$表示第i位向第i+1位有进位,则 $$OV=C’_6 ⊕ C’_7 $$
- P:奇偶标志位 
 每个机器周期根据累加器A中的内容的奇偶性由硬件置/复位
 A中1的个数为奇P=1,否则为P=0
 该位对串行通讯的数据传输有重要意义,可以借助该位进行奇偶校验
- 栈指针SP 
 SP为8位寄存器,指示栈顶位置
 系统复位后,SP初始值为07H,最好将其设为1FH或更大- 进栈:SP+1,再压栈
- 出栈:先出栈,再SP-1
 改变SP的途径- 软件直接改变
- 执行PUSH或POP指令
- 子程序调用、返回
- 中断响应与返回
 
 
- 数据指针DPTR 
 DPTR是16位寄存器,也可作为两个独立的8位寄存器DPL、DPH使用
 主要用于保存16位地址,可以寻址64K地址空间
 当访问外部数据存储器时,可作为间址寄存器
 - MOVX A , @DPTR
 - MOVX @DPTR , A
 当访问程序存储器时,可作为基址寄存器
 - MOVC A , @A+DPTR
- 串行口数据缓冲器SBUF 
 用于存放欲发送或已接受的数据
 包含两个独立的寄存器:发送缓冲器、接收缓冲器
- 定时器/计数器 
 T0、T1、T2为三个16位寄存器,各由2个8位寄存器组成:TH0、TL0、TH1、TL1、TH2、TL2
 系统可以对TH0、TL0、TH1、TL1、TH2、TL2进行寻址
 不能把T0、T1、T2作为16位寄存器使用
- 端口P0 - P3P3都有相应的锁存器,因而P0~P3可作为专用寄存器使用
 由端口硬件结构,P0\
 由于可以把P0~P3当作寄存器使用,因而不再设口操作指令,都用MOV
- 其它常用寄存器 
 IP:中断优先级寄存器
 IE:允许中断寄存器
 TMOD:定时器模式选择寄存器
 TCON:定时器控制寄存器
 SCON:串行口控制寄存器
 PCON:电源控制寄存器
外部数据存储器
寻址空间:64K
采用间接寻址方式访问,间址寄存器为R0、R1和DPTR