第2章 寄存器
- CPU构成:
- 运算器:信息处理
- 寄存器:信息存储
- 控制器:控制器件工作
- 内部总线:连接器件,进行数据传送
- 8086的14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW
- 通用寄存器(16位):AX、BX、CX、DX,每个高8位和低8位又可构成两个寄存器(AX->AH、AL)
- 8086可处理2种储存的数据:
- 字节:byte
- 字:word
- 几条简单汇编
- mov ax,18 -> AX = 18
- mov ah,78 -> AH = 78
- add ax,8 -> AX = AX + 8
- mov ax,bx -> AX = BX
- add ax,bx -> AX = AX + BX
- P.S.不相关的寄存器不可使用,在使用AL的时候产生进位也不会放入AH中去
- P.S.数据传送或运算时,指令的两个操作对象的位数应该一致(mov ax,bl不合法)
- 物理地址:内存单元->一维线性->唯一地址->物理地址
- 16位->藐视CPU特性:
- 运算器一次最多处理16位的数据
- 寄存器的最大宽度16位
- 寄存器和运算器之间的通路16位
- 16位8086地址总线20->寻址能力1MB ->采用两个16位地址合成的方法实现
- CPU中部件提供2个16位地址:段地址、偏移地址 -> 送入地址加法器 -> 合成一个20位物理地址 -> 通过内部总线送给输入输出控制电路 -> 送入地址总线 -> 送到存储器
- 物理地址 = 段地址 * 16 + 偏移地址
- P.S.
- 段的划分是CPU的内存管理,并没有固定的划分 -> CPU可以通过不同的段地址和偏移地址形成同一物理地址
- 16位的的寻址能力是64KB -> 段的最大长度为64KB
- 描述 -> 段地址:偏移地址
- 段寄存器:CS、DS、SS、ES
- CS和IP
- CS:代码段寄存器、IP:指令指针寄存器
- CS * 16 + IP -> 读指令并执行
- 读取一条指令后,IP自动增加
- CPU工作过程:
- 从CS:IP指向内存单元读取指令->指令进入指令缓冲器
- IP=IP+所读指令长度 -> 指向下一条指令
- 执行指令,转回第一步
- CS、IP无法通过mov指令修改,可以使用jmp 段地址:偏移地址
第3章 寄存器(内存访问)
- DS:通常放数据的段地址
- mov ax,[0],后面[0]是偏移地址,段地址在DS中
- P.S.8086不支持将数据直接送入段寄存器,mov ds,1000H是非法的(可用通用寄存器中转)
- 用mov访问内存单元,段地址默认在DS中
- 栈:FILO(先进后出)
- 栈机制:
- 入栈出栈以字位单位
- 任何时刻,SS:SP指向栈顶元素
- 栈顶超出栈空间,会继续覆盖
- 8086不保证我们对栈的操作不越界
- push、pop的实质就是一种内存传送指令(内存和寄存器之间)