第二章 寄存器

在 CPU 中:

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

不同的 CPU,寄存器的个数、结构不同。8086CPU 有 14 个寄存器,分别是:AX、BX、CX、DX、SI、DI、SP、BP、CS、SS、DS、ES、PSW。

2.1 通用寄存器

8086CPU 的上一代 CPU 中的寄存器都是 8 位的,为了保证兼容,8086CPU 的 AX、BX、CX、DX 都可以分为 2 个可独立使用的 8 位寄存器来使用:

  • AX 可分为 AH 和 AL;
  • BX 可分为 BH 和 BL;
  • CX 可分为 CH 和 CL;
  • DX 可分为 DH 和 DL。

AX 的低 8 位(0-7)构成了 AL 寄存器,高 8 位(8-15)构成了 AH 寄存器。它们是可以独立使用的 8 位寄存器。

2.2 字在寄存器中的存储

8086CPU 可以一次处理“字节”和“字”两种尺寸的数据。

一个字可以存在一个 16 位寄存器中,这个字的高位字节和地位字节存在这个寄存器的高 8 位寄存器和低 8 位寄存器中。图 2.4 既可以是 20000,也可以是 78 和 32。

2.3 几条汇编指令

原 AX 中的值:0000H,原 BX 中的值:0000H。

程序段中指令的执行情况之一:

| 程序段中的指令 | 指令执行后 AX 中的数据 | 指令执行后 BX 中的数据 | | -------------- | ---------------------- | ---------------------- | | mov ax,4E20H | 4E20H | 0000H | | add ax,1406H | 6226H | 0000H | | mov bx,2000H | 6226H | 2000H | | add ax,bx | 8226H | 2000H | | mov bx,ax | 8226H | 8226H | | add ax,bx | 044CH | 8226H |

最后一条指令,把 ax 与 bx 中数据相加,所得值位 1044CH,但是 ax 为 16 位寄存器,只能存放 4 位十六进制的数据,所以最高位的 1 不能在 ax 中保存,即 ax 中的数据为 044CH。

程序段中指令的执行情况之二:

| 程序段中的指令 | 指令执行后 AX 中的数据 | 指令执行后 BX 中的数据 | | -------------- | ---------------------- | ---------------------- | | mov ax,001AH | 001AH | 0000H | | mov bx,0026H | 001AH | 0026H | | add al,bl | 0040H | 0026H | | add ah,bl | 2640H | 0026H | | add bh,al | 2640H | 4026H | | mov ah,0 | 0040H | 4026H | | add al,85H | 00C5H | 4026H | | add al,93H | 0158H | 4026H |

此时,al 作为一个独立的 8 位寄存器来使用,和 ah 没有关系。

在进行数据传送或运算时,指令的两个操作对象的位数应当是一致的。不一致就是错误的指令。

(1)F4A3H;31A3H;3123H;6246H;826CH;6246H;826CH;04D8H;0482H;6C82H;D882H;D888H;D810H;6246H;

(2)mov al,2;add al,al;add al,al;add al,al。

2.4 物理地址

所有的内存单元构成的内存空间是一个一维的线性空间,每一个内存单元在这个空间都有唯一的地址,称为物理地址。CPU 通过地址总线送入存储器的,必须是一个内存单元的物理地址,二物理地址必须先在内部形成。

2.5 16 位结构的 CPU

16 位结构(16 位机,字长为 16 位)的 CPU 有以下特性:

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

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

8086 有 20 位地址总线,可以传送 20 位地址,寻址能力 1MB.而 16 位结构,表现出寻址能力只有 64KB。8086 在内部用两个 16 位地址合成的方法来形成一个 20 位的物理地址。

8086CPU 相关部件的逻辑结构:

地址加法器采用物理地址=段地址x16+偏移地址的方法合成物理地址。例如:

“段地址x16“ 又称为左移四位(二进制位),左移 N 位,相当于乘以 2^N^。

同理,X 进制的数据左移 N 位,相当于乘以 X^N^。

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

在 CPU 访问内存时,用一个基础地址”段地址x16“和一个相对于基础地质的偏移地址相加,给出内存单元的物理地址。

2.8 段的概念

段地址并不是内存被分为一段一段,每段有个地址。段的划分来自于 CPU,我们用分段的方式来管理内存。我们可以认为:地址 10000H-100FFH 的内存单元组成一个段,该段基础地址(起始地址)为 10000H,段地址为 1000H,大小为 100H;也可以认为地址 10000H-10007FH、10080H-100FFH 的内存单元组成两个段,基础地址为:10000H 和 10080H,段地址为:1000H 和1008H,大小都为 80H。

可根据编程需要,将若干地址连续的内存单元看作一个段,段地址x16 定位段的起始地址,偏移地址定位段的内存单元。注意:段的起始地址一定是 16 的倍数;段的最大长度为 64KB(由偏移地址的 16 位长度决定)。

  1. CPU 可用不同的段地址和偏移地址形成同一个物理地址。
  2. 给定段地址,仅通过偏移地址来寻址,最多可定位 64KB 个内存单元。因为偏移地址 16 位,变化范围为 0-FFFFH。

(1)00010H,1111FH;

(2)1001H,2000H。1001H 是向上取整,而非四舍五入。

2.9 段寄存器

段地址在 8086CPU 段寄存器中存放。8086CPU 有 4 个段寄存器:CS、DS、SS、ES。当 8086 CPU 要访问内存时由这个段寄存器提供内存单元的段地址。

2.10 CS 和 IP

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

在 8086CPU 机中,任意时刻,设 CS 中的内容为 M,IP 中的内容为 N,8086CPU 将从内存 Mx16+N 单元开始,读取一条指令并执行。即任意时刻,CPU 将CS:IP 指向的内容当作指令执行。

下图展示了 8086CPU 读取、执行命令的工作原理:(图中数字都为 16 进制)

下面以图 2.10 为初始状态,展示 8086CPU 读取、执行一条指令的过程。

则可以把 8086CPU 的工作过程简要描述如下:

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

(2)IP = IP+所读指令的长度,从而只想下一条指令;

(3)执行命令,转到步骤(1),重复这个过程。

在 8086CPU 加电启动或复位后,CS 和 IP 被设置为 CS=FFFFH,IP=0000H,即在 8086PC 机刚启动时,CPU 从内存 FFFF0H 单元中读取指令执行,这也是 8086PC 机开机的第一条指令。

在内存中,指令和数据没有区别,都是二进制信息。CPU 将 CS:IP 指向的内存单元中的内容看作指令。内存中的一段信息曾被 CPU 执行过的话,那么其所在内存单元必然被 CS:IP 指向过。

2.11 修改 CS、IP 的指令

在 CPU 中,能够用指令读写的部件只有寄存器。而 CPU 执行什么指令是由 CS、IP 的内容决定的,所以程序员通过改变 CS、IP 的内容来控制 CPU。

mov 指令,称为传送指令,不能设置 CS、IP 的值。

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

2.12 代码段

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

4 次,三次读取命令后,指令指向下一条,还有最后一条执行后;ax。

寄存器和存储器的区别_汇编语言 第二章 寄存器相关推荐

  1. 寄存器和存储器的区别_寄存器、累加器、暂存器都是什么?它们有什么区别?...

    一.什么是寄存器 寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成.在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类. 内部寄存器不能被外部电路或软件访问, ...

  2. 汇编语言:第二章 寄存器

    一个典型的CPU由运算器.控制器.寄存器组成,内部总线连接各部分器件 寄存器是程序员可以用指令读写的部件,通过改变寄存器里的内容从而实现控制CPU, 不同CPU 寄存器的个数结构是不一样的,8086有 ...

  3. [汇编语言学习笔记][第二章寄存器]

    第二章 寄存器 8086有14个寄存器,分别为AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW. 2.1 通用寄存器 8086CPU的所有寄存器都是16位,可以存放 ...

  4. 汇编语言第二章知识梳理及思考

    第二章 寄存器(CPU工作原理) CPU概述 CPU由运算器.控制器.寄存器等器件组成,这些器件靠内部总线相连. 内部总线实现CPU内部各个器件之间的联系. 外部总线实现CPU和主板上其他器件的联系. ...

  5. 第二章 寄存器基础概念

    第二章 寄存器 1.一个典型的CPU由运算器,控制器,寄存器等器件组成. 内部总线实现CPU内部各个器件之间的联系. 外部总线实现CPU和主板上其它器件的联系. 2.8086是Intel系列中16位微 ...

  6. 小吴学汇编之第二章--寄存器(1)

    第二章   寄存器 上次我们学完了第一章,懂了一些基本的知识,今天,小吴带你们学习第二章内容寄存器. 一个典型的CPU由运算器.控制器.寄存器(CPU工作原理)等器件构成,这些器件靠总线连接,我们上一 ...

  7. 寄存器和存储器的区别?

    存储器在CPU外,一般指硬盘,U盘等可以在切断电源后保存资料的设备,容量一般比较大,缺点是读写速度都很慢,普通的机械硬盘读写速度一般是50MB/S左右.内存和寄存器就是为了解决存储器读写速度慢而产生的 ...

  8. 汇编 第二章 寄存器

    在我看来,第二章中主要围绕着6个寄存器展开阐述.它们分别是AX.BX.CX.DX.CS.IP. 在此之前,通过本章的学习,使我对CPU这一概念又有了更深一步的认识. 1.CPU中字长与位宽的区别 通常 ...

  9. 小吴学汇编之第二章--寄存器(2)

    2.3          几条汇编指令 前面我们说过,汇编指令通过控制CPU进行工作,那么下表是几条汇编指令. 注意,为了使具有高级语言基础的读者更好理解指令的含义,有时会用文字描述和高级语言描述这两 ...

最新文章

  1. 【网络文件共享】02、NFS服务基础
  2. AQS独占式同步队列入队与出队
  3. python false 0_python float(0) is 0.0 为什么是 False?
  4. ORA-32004 参数设置过时的解决办法
  5. 一种全新的软件界面设计方法
  6. vue搭建后可以改下全局配置
  7. Linux常用命令系列--export
  8. 嵌入式Linux系统编程学习之二常用命令
  9. 2021年五月中旬推荐文章
  10. mysql server 5.7.16_mysql 5.7.16 安装配置方法图文教程(ubuntu 16.04)
  11. 微信小程序里实现自定义日期控件
  12. 笔记本查看WIFI密码
  13. 鸿蒙系统一体机使用教程,华为视频会议系统TE30(华为新一体机)(示例代码)
  14. 基于ResNet的MSTAR数据集目标分类
  15. eNSP路由器启动不了
  16. 讲师面试流程及试讲指导
  17. Timer 和TimerTask分析
  18. html5项目改造Vue工程化
  19. Windows监控——性能指标详解
  20. 王牌战争文明重启服务器维修中,王牌战争:文明重启在哪下,为什么王牌战争:文明重启进不去...

热门文章

  1. QT之交叉编译qmake的ARM版本套件(三)
  2. Linux头文件引用小技巧
  3. ffmpeg一些filter用法、以及一些功能命令
  4. C++之基类构造函数初始化
  5. 计算机基础(七):ION定义与使用方法
  6. ubuntu20.04 安装 Qt5.12步骤
  7. iphone如何信任软件_如何在越狱后 iPhone 上多开软件?
  8. 夏天这四件事会耗干你的阳气,尤其是第三件!
  9. python-scrapy框架学习笔记
  10. java的equals什么作用_java当中equals函数的作用小结