<<汇编语言>>第2~3章笔记

2018-05-23  本文已影响0人  zzkdev

寄存器

note : 本书讲的CPU是8086CPU与现代CPU会有所差异

一个典型CPU组成

由运算器、控制器、寄存器构成,这些器件靠内部总线相连,前一章的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件的联系,外部总线实现CPU和主板上的其他器件的联系。其中:

note : 对于一个汇编程序员来说,CPU中的主要部件是寄存器

通用寄存器

AX,BX,CX,DX这四个(16位)寄存器用来存放一般性数据,称为通用寄存器。为了保证兼容,这四个寄存器可以分成两个8位的寄存器来使用,如AX可以分成AL和AH。

16位的CPU

16位CPU的特性:

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读取和执行指令的相关部件

工作流程:

  1. 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
  2. IP=IP+所读指令长度,从而指向下一条指令
  3. 执行指令。转到步骤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过程:

  1. SP = SP - 2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶
  2. 将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新的栈顶
push指令执行过程

note : 8086CPU中,入栈时,栈顶从高地址向低地址方向增长

pop ax过程:

  1. 将SS:SP指向的内存单元处的数据送入ax中
  2. SP = SP + 2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶
pop指令执行过程

note : push、pop实质上时一种内存传送指令,注意它们的灵活应用。8086CPU只记录栈顶,栈的空间需要我们自己管理。


这里是我的博客


上一篇下一篇

猜你喜欢

热点阅读