第2章 寄存器

CPU由运算器、控制器、寄存器等器件构成,靠内部总线相连

  • 运算器进行信息处理
  • 寄存器进行信息存储
  • 控制器控制各器件进行工作
  • 内部总线连接各个器件,在它们之间进行数据的传送

8086CPU有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、CS、SS、DS、ES、PSW

2.1 通用寄存器

8086CPU所有寄存器都是16位的,存放两个字节

汇编语言王爽_学习笔记_2

AX、BX、CX、DX称为通用寄存器,都可以分为两个独立的8位寄存器使用

例:通用寄存器AX可分为AH和AL,AX低8位构成AL寄存器,高8位构成AH寄存器

汇编语言王爽_学习笔记_2

2.2 字在寄存器中的存储

8086CPU存在两种尺寸的数据:

  • 字节:byte,由8个bit组成
  • 字:word,一个字由两个字节组成,分别称为高位5字节和低位字节

为了区分不同进制,十六进制表示的数据后面加H,二进制表示的数据后面加B,十进制的数据后面什么也不加

2.3 几条汇编指令

传送指令MOV

MOV A,B

(A)<-(B)

mov ax,18 将18送入寄存器AX

mov bl,[2000H] 将2000H单元的内容送入BL寄存器

mov ch,‘a’ 将a的ASCII码送入CH寄存器

mov指令可以在CPU内或者CPU和寄存器之间传送字或者字节的数据
汇编语言王爽_学习笔记_2

加法指令 ADD

ADD A,B

(A)<-(A)+(B)

除源操作数为立即数的情况,源操作数和目的操作数必须有一个寄存器寻址方式

2.4 物理地址

所有的内存单元都有一个唯一的地址,我们将这个唯一的地址称为物理地址

2.5 16位结构的CPU

16位结构的CPU:

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

即一次性可以处理、传输、暂存的信息最大长度是16位的

2.6 8086CPU给出物理地址的方法

8086CPU有20位地址总线,1MB的寻址能力

8086CPU是16位结构,一次性处理、传输、暂存的地址是16位

8086CPU采用在内部两个16位地址合成的方法来形成20位的物理地址

逻辑结构:

汇编语言王爽_学习笔记_2

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

2.8 段的概念

内存并没有分段,段的概念来着CPU

我们可以认为:地址10000H~100FFH的内存单元组成一个段,起始地址位10000H,段地址为1000H,大小为100H

编程需要可以把连续的内存单元划分成段,用段地址×16定位段的起始地址用偏移地址定位段中的内存单元

起始地址一定是16倍数,一个段的长度最大为16位(偏移地址位16位)

数据在21F60H内存单元中可描述为:

  • 数据在内存2000:1F6O单元中
  • 数据在内存的2000H段的1F6O单元中

2.9 段寄存器

4个段寄存器:CS、DS、SS、ES

访问内存时提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址

2.10 CS和IP

CS为代码段寄存器,IP为指令指针寄存器

任意时刻,8086CPU将从内存CS中内容×16+IP中内容单元开始,读取指令并执行

** 如下是8086CPU读取、执行一条指令的过程:**


汇编语言王爽_学习笔记_2


汇编语言王爽_学习笔记_2


汇编语言王爽_学习笔记_2


汇编语言王爽_学习笔记_2


汇编语言王爽_学习笔记_2


汇编语言王爽_学习笔记_2


汇编语言王爽_学习笔记_2


汇编语言王爽_学习笔记_2


汇编语言王爽_学习笔记_2


8086CPU工作流程简要描述:

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

2.11 修改CS、IP的指令

能够改变CS、IP的指令被统称为转移指令(jmp指令)

同时修改CS:IP内容:jmp 段地址:偏移地址

仅修改IP内容:jmp 合法寄存器

2.12 代码段

我们将一组内存单元定义为一个段,将长度为N(N<=64KB)的一组代码存放在地址连续、起始地址为16的倍数的内存单元中,即可以认为,这是一个代码段。

设置CS:IP的值可以执行这段代码

实验1 查看CPU和内存,用机器指令和汇编指令编程

Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具

但是后来的Windows不再包含debug这个命令,为了实现模拟dos环境的debug,使用DosBox+debug

汇编语言王爽_学习笔记_2

  • 安装DosBox后把debug.exe放在一个文件夹下
  • 运行DosBox输入命令mount c f:\c将文件夹挂载到c盘上,其中f:\c是你的debug所在的文件夹,
  • 输入命令C:切换到C盘
  • 然后就可以执行debug的命令了

如果不想每一次运行都输入这样的命令可以在DosBox下修改如下选中文件,在文件末尾添加你在程序开启后执行的命令
汇编语言王爽_学习笔记_2
汇编语言王爽_学习笔记_2

相关文章: