【读书笔记】汇编语言(第四版)第二章 寄存器

简介: 【读书笔记】汇编语言(第四版)第二章 寄存器

一个典型的CPU(此处讨论的不是某一具体的CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成, 这些器件靠内部总线相连。之前所说的总线, 相对于CPU内部来说是外部总线内部总线实现CPU内部各个器件之间的联系, 外部总线实现CPU和主板上其他器件的联系


CPU中:

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


程序员通过改变各种寄存器中的内容来实现对CPU的控制。

不同的CPU,寄存器的个数、结构是不相同的。8086CPU有14个寄存器, 每个寄存器有一个名称。这些寄存器是: AX、BX、EX、DX、SI、DI、SP、BP、IP、CS、SS、

DS、ES、PSW


通用寄存器

8086CPU 的所有寄存器都是16 位的, 可以存放两个字节。AX、BX、EX、DX这4个寄存器通常用来存放一般性的数据, 被称为通用寄存器。


8086CPU 的上一代CPU中的寄存器都是8位的, 为了保证兼容, 使原来基千上代CPU编写的程序稍加修改就可以运行在8086 之上, 8086CPU的AX、BX、EX、DX这4个寄存器都可分为两个可独立使用的8位寄存器来用:


AX 可分为AH 和AL

BX 可分为BH 和BL

EX 可分为CH 和CL

DX 可分为DH 和DL


10df57e99c20d10ec268e5819a1b3f51_c920b2d233d6f03ec7ee48be0106e045.png

AX 的低8 位(0 位~7 位)构成了AL 寄存器,高8 位(8 位~15 位)构成了AH 寄存器。


AH 和AL 寄存器是可以独立使用的8 位寄存器


字在寄存器中的存储

出千对兼容性的考虑, 8086CPU 可以一次性处理以下两种尺寸的数据。


字节:记为byte, 一个字节由8 个bit 组成,可以存在8 位寄存器中。


字:记为word, 一个字由两

5238563bd0940ddc5e548fe8a0e1f28a_7bb7717c6b2dc0465c7a44a0018d2c46.png


物理地址&16位结构的CPU&8086CPU给出物理地址的方法

CPU 访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。


CPU 通过地址总线送入存储器的,必须是一个内存单元的物理地址。在CPU 向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU 可以有不同的形成物理地址的方式。

什么是16 位结构的CPU ?


16 位结构(16 位机、字长为16 位等常见说法,与16 位结构的含义相同)

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


8086CPU 有20 位地址总线,可以传送20 位地址,达到1MB 寻址能力。8086CPU 又


是16 位结构,在内部一次性处理、传输、暂时存储的地址为16 位。从8086CPU 的内部


结构来看,如果将地址从内部简单地发出,那么它只能送出16 位的地址,表现出的寻址


能力只有64KB 。


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


8086CPU 相关部件的逻辑结构如图

cca530a047dbb987a88938ebd370ca08_b5b1fd6f66763f9a91ff7a54c6ef09f4.png


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


(l) CPU 中的相关部件提供两个16 位的地址, 一个称为段地址,另一个称为偏移地址;

(2) 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;

(3) 地址加法器将两个16 位地址合成为一个20 位的物理地址;

(4) 地址加法器通过内部总线将20 位物理地址送入输入输出控制电路;

(5) 输入输出控制电路将20 位物理地址送上地址总线;

(6) 20 位物理地址被地址总线传送到存储器。


地址加法器采用物理地址=段地址x16+偏移地址的方法用段地址和偏移地址合成物理

地址

例如, 8086CPU 要访问地址为123C8H 的内存单元,此时,地址加法器的工作过程

如图2.7 所示(图中数据皆为十六进制表示)。


“段地址×16+偏移地址=物理地址”的本质含义

8086CPU 的这种寻址功能是“ 基础地址+偏移地址=物理地址” 寻址模式的一种具体实现方案。8086CPU 中,段地址x16 可看作是基础地址。


“数据在21F60H 内存单元中。”这句话对于8086PC 机一般不这样讲,取而代之的是两种类似的说

法:

数据存在内存2000:1F60 单元中数据存在内存的2000H 段中的1F60H 单元中


这两种描述都表示“数据在内存21F60H 单元中”

段寄存器&CS和IP&修改CS、 IP的指令&代码段

8086CPU 在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址


段地址在8086CPU 的段寄存器中存放


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


当8086CPU 要访问内存时由这4 个段寄存器提供内存单元的段地址


CS 和IP 是8086CPU 中两个最关键的寄存器,它们指示了CPU 当前要读取指令的地址


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


想让CPU 执行我们放在代码段中的指令,必须要将CS:IP 指向所定义的代码段中的第一条指令的首地址


小结


段地址在8086CPU 的段寄存器中存放。当8086CPU 要访问内存时,由段寄存器提供内存单元的

段地址。8086CPU 有4 个段寄存器,其中CS 用来存放指令的段地址


cs存放指令的段地址, IP 存放指令的偏移地址

8086 机中,任意时刻, CPU 将CS:IP 指向的内容当作指令执行。


8086CPU 的工作过程:

从CS: IP 指向的内存单元读取指令,读取的指令进入指令缓冲器;

IP 指向下一条指令;

执行指令。(转到步骤CD, 重复这个过程。)


8086CPU 提供转移指令修改CS 、IP 的内容。

相关文章
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(十):标志寄存器
|
6月前
|
存储
8086 汇编笔记(二):寄存器(内存访问)
8086 汇编笔记(二):寄存器(内存访问)
|
6月前
|
存储
8086 汇编笔记(一):寄存器
8086 汇编笔记(一):寄存器
|
6月前
|
索引 存储 C语言
【汇编】[bx+idata]的寻址方式、SI和DI寄存器
【汇编】[bx+idata]的寻址方式、SI和DI寄存器
252 0
【汇编】[bx+idata]的寻址方式、SI和DI寄存器
|
6月前
|
编译器 存储 网络协议
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
307 1
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
|
6月前
|
存储 程序员
【汇编】内存的读写与地址空间、寄存器及数据存储
【汇编】内存的读写与地址空间、寄存器及数据存储
616 1
【汇编】内存的读写与地址空间、寄存器及数据存储
|
存储 IDE Java
二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
176 1
|
存储 Java C++
汇编语言、寄存器分类及程序计数器
汇编语言、寄存器分类及程序计数器
145 0
|
Windows
【Windows 逆向】OD 调试器工具 ( OD 附加进程 | OD 调试器面板简介 | 反汇编窗口 | 寄存器窗口 | 数据窗口 | 堆栈窗口 )
【Windows 逆向】OD 调试器工具 ( OD 附加进程 | OD 调试器面板简介 | 反汇编窗口 | 寄存器窗口 | 数据窗口 | 堆栈窗口 )
364 0
【Windows 逆向】OD 调试器工具 ( OD 附加进程 | OD 调试器面板简介 | 反汇编窗口 | 寄存器窗口 | 数据窗口 | 堆栈窗口 )
|
Java
【嵌入式开发】ARM 关闭中断 ( CPRS 中断控制位 | 中断使能寄存器 | 中断屏蔽寄存器 | 关闭中断 | 汇编代码编写 )(二)
【嵌入式开发】ARM 关闭中断 ( CPRS 中断控制位 | 中断使能寄存器 | 中断屏蔽寄存器 | 关闭中断 | 汇编代码编写 )(二)
658 0
【嵌入式开发】ARM 关闭中断 ( CPRS 中断控制位 | 中断使能寄存器 | 中断屏蔽寄存器 | 关闭中断 | 汇编代码编写 )(二)