汇编语言(王爽第三版)第二章读书笔记
寄存器
一个典型的CPU由运算器,控制器,寄存器等器件构成,这些靠内部总线相连,第一章说的总线相对于CPU内部来说是外部总线,而内部总线负责实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系,就是说在CPU中:
运算器进行信息处理
寄存器进行信息储存
控制器控制各个部件
内部总线连接器件,在它们间进行数据传送
16位机的结构具有CPU下面几方面的结构特性
- 运算器一次最多可以处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路为16位
如图所示 当8086CPU要读写内存时:
- CPU中的相关部件提供两个16位的地址,一个为段地址,一个为偏移地址
- 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
- 地址加法器将两个16位地址合成一个20位的物理地址
- 地址加法器通过内部总线将20位物理地址送上地址总线
- 输入输出控制电路将20位物理地址送上地址总线
- 20位物理地址被地址总线传送到存储器
CPU在访问内存时,用一个基础地址(段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址
一般来说,8086CPU的这种寻址功能是基础地址+偏移地址=物理地址 寻址模式的一种具体实现方案,8086CPU中,段地址×16可以看做是基础地址
需要注意的是:段地址×16必然是16的倍数,所以一个段的其实地址也一定是16的倍数:偏移地址位16位,16位的地址的寻址能力位2^16即64KB,所以一个段的长度最大为64KB
cs= code segment 代码段寄存器
ip = instruction pointer 指令指针
下面的一组图展示了8086CPU读取和执行一条指令的过程
通过上面的过程,8086CPU的工作过程如下:
- 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
- IP= IP+所读取指令的长度,从而指向下一条指令
- 执行指令,跳到步骤1,重复过程
实验一
环境:Windows 2000
实验用到的命令
- 查看、修改CPU中寄存器的内容:r命令
- 查看内存中的内容:d命令
- 修改内存中的内容:e命令(可以写入数据、指令,在内存中,实际上没有差别
- 将内存中的内容解释为机器指令和对应的汇编指令:u命令
- 执行CS:IP指向的内存单元出的指令:t命令
- 以汇编指令的形式向内存中写入指令:a命令
修改CS、IP的指令
jmp
要分清l和1啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
原因: 要分清l和1啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
实验2
实验3
实验4
对于实验3、4的解释
在图中,所有的物理存储器被看做一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址空间,CPU在这段空间中读写数据,其实就是在相对应的存储器中读写数据。在8086CPU中内存地址分配的情况如下
0000~9FFFF的内存单元中读取数据,实际上就是在读取随机存储器上的数据
A0000~BFFFF内存单元中写数据,就是想显存中写入数据,这些数据被显示卡输出到显示器上
C0000~FFFFF的内存中写入数据的操作是无效的,因为这等于改写只读存储器中的内容