汇编语言(王爽第三版)第二章读书笔记

寄存器

一个典型的CPU由运算器,控制器,寄存器等器件构成,这些靠内部总线相连,第一章说的总线相对于CPU内部来说是外部总线,而内部总线负责实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系,就是说在CPU中:

运算器进行信息处理

寄存器进行信息储存

控制器控制各个部件

内部总线连接器件,在它们间进行数据传送

16位机的结构具有CPU下面几方面的结构特性

  • 运算器一次最多可以处理16位的数据
  • 寄存器的最大宽度为16位
  • 寄存器和运算器之间的通路为16位

汇编语言(王爽第三版)第二章读书笔记

如图所示 当8086CPU要读写内存时:

  1. CPU中的相关部件提供两个16位的地址,一个为段地址,一个为偏移地址
  2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
  3. 地址加法器将两个16位地址合成一个20位的物理地址
  4. 地址加法器通过内部总线将20位物理地址送上地址总线
  5. 输入输出控制电路将20位物理地址送上地址总线
  6. 20位物理地址被地址总线传送到存储器

汇编语言(王爽第三版)第二章读书笔记

CPU在访问内存时,用一个基础地址(段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址

一般来说,8086CPU的这种寻址功能是基础地址+偏移地址=物理地址 寻址模式的一种具体实现方案,8086CPU中,段地址×16可以看做是基础地址

需要注意的是:段地址×16必然是16的倍数,所以一个段的其实地址也一定是16的倍数:偏移地址位16位,16位的地址的寻址能力位2^16即64KB,所以一个段的长度最大为64KB

汇编语言(王爽第三版)第二章读书笔记

cs= code segment 代码段寄存器

ip = instruction pointer 指令指针

下面的一组图展示了8086CPU读取和执行一条指令的过程

汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记

汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记
通过上面的过程,8086CPU的工作过程如下:

  1. 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
  2. IP= IP+所读取指令的长度,从而指向下一条指令
  3. 执行指令,跳到步骤1,重复过程

实验一

环境:Windows 2000

实验用到的命令

  1. 查看、修改CPU中寄存器的内容:r命令
  2. 查看内存中的内容:d命令
  3. 修改内存中的内容:e命令(可以写入数据、指令,在内存中,实际上没有差别
  4. 将内存中的内容解释为机器指令和对应的汇编指令:u命令
  5. 执行CS:IP指向的内存单元出的指令:t命令
  6. 以汇编指令的形式向内存中写入指令:a命令
    汇编语言(王爽第三版)第二章读书笔记

修改CS、IP的指令

jmp

要分清l和1啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

汇编语言(王爽第三版)第二章读书笔记

原因: 要分清l和1啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记

实验2
汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记

实验3
汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记

实验4

汇编语言(王爽第三版)第二章读书笔记
汇编语言(王爽第三版)第二章读书笔记

对于实验3、4的解释
汇编语言(王爽第三版)第二章读书笔记

在图中,所有的物理存储器被看做一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址空间,CPU在这段空间中读写数据,其实就是在相对应的存储器中读写数据。在8086CPU中内存地址分配的情况如下
汇编语言(王爽第三版)第二章读书笔记

0000~9FFFF的内存单元中读取数据,实际上就是在读取随机存储器上的数据

A0000~BFFFF内存单元中写数据,就是想显存中写入数据,这些数据被显示卡输出到显示器上

C0000~FFFFF的内存中写入数据的操作是无效的,因为这等于改写只读存储器中的内容