<<汇编语言>>第2~3章笔记
寄存器
note : 本书讲的CPU是8086CPU与现代CPU会有所差异
一个典型CPU组成
由运算器、控制器、寄存器构成,这些器件靠内部总线相连,前一章的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件的联系,外部总线实现CPU和主板上的其他器件的联系。其中:
- 运算器进行信息处理
- 寄存器进行信息存储
- 控制器控制各种器件进行工作
note : 对于一个汇编程序员来说,CPU中的主要部件是寄存器
通用寄存器
AX,BX,CX,DX这四个(16位)寄存器用来存放一般性数据,称为通用寄存器。为了保证兼容,这四个寄存器可以分成两个8位的寄存器来使用,如AX可以分成AL和AH。
16位的CPU
16位CPU的特性:
- 运算器一次最多可以处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路为16位
8086CPU给出物理地址的方法
8086CPU有20位地址总线,它采用一种在内部使用两个16位地址合成的方法来形成一个20位地址。地址加法器采用物理地址 = 段地址 * 16 + 偏移地址的方法合成地址。
8086CPU相关逻辑结构note : 8086CPU中,一个段的起始地址一定是16的倍数。16位偏移地址的寻址能力为64KB,所以一个段的长度最大为64KB。
段寄存器
CS、DS、SS、ES这四个寄存器为段寄存器,提供内存单元的段地址。
CS和IP寄存器
CS和IP寄存器指示了要读取指令的地址,CS为代码段寄存器,IP为指令指针寄存器。
note : 8086CPU中,CPU将CS:IP指向的内容当作指令执行
下面是8086CPU读取和执行指令的相关部件
工作流程:
- 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
- IP=IP+所读指令长度,从而指向下一条指令
- 执行指令。转到步骤1,重复这个过程
DS和BX寄存器(内存访问)
DS寄存器通常用来存放要访问数据的段地址,BX寄存器存放内存单元的偏移地址,使用方法:
mov ax, [bx] # 把ds:bx内存单元的数据送入ax中
ES寄存器(内存访问)
附加段寄存器,存放当前执行程序中一个辅助数据段的段地址。使用时要显示指出数据段地址。
# 示例
mov ax, [bx] # 把ds:bx内存单元的数据送入ax中
mov ax, es:[bx] ## 把es:bx内存单元的数据送入ax中
SS和SP寄存器
8086CPU提供了相关的指令来以栈的方式来访问内存,任意时刻SS:SP指向栈顶元素。
push ax过程:
- SP = SP - 2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶
- 将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新的栈顶
note : 8086CPU中,入栈时,栈顶从高地址向低地址方向增长
pop ax过程:
- 将SS:SP指向的内存单元处的数据送入ax中
- SP = SP + 2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶
note : push、pop实质上时一种内存传送指令,注意它们的灵活应用。8086CPU只记录栈顶,栈的空间需要我们自己管理。
这里是我的博客