首页 > 其他分享 >第二章 寄存器

第二章 寄存器

时间:2024-07-26 14:26:45浏览次数:16  
标签:16 物理地址 地址 偏移 寄存器 第二章 CPU

第二章 寄存器

一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。

在CPU中:

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

2.1 通用寄存器

AX、BX、CX、DX 这 4个寄存器通常用来存放一般性的数据,被称为通用寄存器。

以AX为例,寄存器逻辑结构如下:

这里需要指出的是:在8086CPU中AX寄存器可以拆分为两个寄存器单独使用,如AX可以分为AH和AL,AH指AX中的高八位寄存器,存储地址为8~15,AL指AX中的低八位寄存器,存储地址为0~7。AH可以视为Ahigh,AL可以视为Alow,高低便是由这两个英文翻译而来的。

请注意:高八位寄存器和低八位寄存器数值并不互通,即低八位寄存器中如果存在溢出,则不能进位到高八位寄存器。

在8086CPU中:

AX 可分为 AH 和 AL。

BX 可分为 BH 和 BL。

CX 可分为 CH 和 CL。

DX 可分为 DH 和 DL。

2.2 字在寄存器中的存储

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

字:记为 word,一个字由两个字节组成。

一个字可以存在一个 16 位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。

2.3 几条汇编指令

下面是几条常见的汇编指令的举例:

下面我们通过一段程序感受一下寄存器的加减法和赋值运算:

问题 2.1:指令执行后 AX 中的数据为多少?

答案:044CH

解析:add ax,bx的含义,将bx的值加到ax上并赋值给ax,即用高级语言表述的话为:ax += bx,那么,ax和bx最近的一步操作后的结果均为8226H,那么8226H+8226H = 1044CH,可以发现最终结果为5为,高位寄存器发生了溢出,在CPU中如果产生溢出则直接舍弃,因此最终结果为044CH。

下面我们再通过一段程序感受一下单独对寄存器中的高位寄存器和低位寄存器进行操作时的效果:

问题2.2:指令执行后 AX 中的数据为多少?

答案:0058H

解析:add al, 93H的含义,将93H加到ax中的低位寄存器al上,并赋值给al,即用高级语言表述的话为:al += 93H,那么,ax的最近的一次操作后的结果为00C5H,al寄存器为C5H,93H + C5H = 158H,我们发现该寄存器产生了溢出,因为低位寄存器的溢出不会向高位寄存器进位,因此溢出舍弃,最终结果为0058H。

2.4 物理地址

CPU 访问内存单元时,要给出内存单元的地址。

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

2.5 16 位结构的 CPU

8086CPU是16位的CPU,其上一代(8080、8085)是8位的,16位CPU具有以下特性:

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

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

我们先看一个8086CPU的逻辑结构:

我们发现,其地址总线为20位。这个20位是怎么得到的?

地址加法器采用物理地址=段地址x16+偏移地址的方法用段地址和偏移地址合成物理地址。
具体解释如下:

段地址和偏移地址均为16位,那么按照16进制来看,四个二进制位为1个16进制位,因此我们可以设想段地址为如下结构

​ A B C D,一个字母代表四位,偏移地址为B C D E,一个字母也是四位(字母没有特殊含义,主要用来抽象存储结构)。

如果我们将段地址整体 * 16,那么段地址便整体左移一个16进制位。段地址为:

​ A B C D 0。

如果不理解为什么左移1位,可以假设现在是10进制,假设某数字为5665,那么 * 10结果为56650,是不是左移一位?

​ 我们再让段地址 * 16后的地址 + 偏移地址,即:

		A B  C  D  0
+         B  C  D  E 
=		A 2B 2C 2D E

原本段地址 * 16以后,无论段地址怎么变化,最后的那一位永远是0,因此加上偏移地址后,便可以通过偏移地址来达到拼凑出一个20位的物理地址的效果。

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

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

2.8 段的概念

其实,内存并没有分段,段的划分来自于CPU。

由于 8086CPU 用“基础地址(段地址x16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

观察下面地址,你有什么发现?

结论:CPU 可以用不同的段地址和偏移地址形成同一个物理地址。

2.9 段寄存器

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

2.10 CS 和IP

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

标签:16,物理地址,地址,偏移,寄存器,第二章,CPU
From: https://blog.csdn.net/wgy17734894660/article/details/140596808

相关文章

  • HDLBits答案(1)_移位寄存器+更多电路
    前言    由于开发板教学内容部分,代码涉及到状态机内容,HDLBits题库只刷到了计数器,因此后续3至4天决定继续刷题,刷完状态机和全部HDLBits题库。今天刷完移位寄存器+更多电路,以下是书写的代码。题库Question1:构建一个4位移位寄存器(右移),具有异步复位、同步加载和使能......
  • 使用GG获取函数寄存器地址
    此方法是从神秘老师(一只神秘)的视频得到的灵感,分享出来也是经过其本人的同意视频如下也希望大家多多支持神秘老师捏多的不说,少的不唠,也是进入正题我们先找到需要获取的函数然后进行分配内存页,保存该地址然后在函数头进行如下的操作码修改意思就是:把该地址传给r1再......
  • 计算机组成原理——第二章(3)
    这一小节我们讲一下无符号整数的表示和运算无符号整数的表示和运算1.无符号整数的表示1.全部二进制位都是数值位,没有符号位,第i位的位权为2.n bit无符号整数表示范围0~-1,超出的话就溢出3.表示最小的数就是全都是0,最大的数就是全12.无符号整数的加法这个比较easy,就是按......
  • 第二章-Java内存区域与内存溢出异常-随笔
    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。1.程序计数器程序计数器可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序......
  • 7.用寄存器点亮LED
    7.用寄存器点亮LED7.1GPIO简介GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚。通过将STM32芯片的GPIO引脚与外部设备连接,可以实现外部通信、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚。例如,STM32F103VET6的芯片有GPIOA至GPIOE......
  • 玄机-第二章日志分析-mysql应急响应
    文章目录前言简介应急开始准备工作日志分析步骤1步骤2步骤3步骤4总结补充erro.log前言这里应急需要知道mysql提权的一些姿势,还有能够提权成功的前提。5金币就当复习一下了。这里考察的是mysql应急响应,我们应该是根据找flag的需求去就行,但是我做了之后发现......
  • 玄机-第二章日志分析-mysql应急响应
    目录前言简介应急开始准备工作日志分析步骤1步骤2步骤3步骤4总结补充mysql中的/var/log/mysql/erro.log记录上传文件信息的原因前言这里应急需要知道mysql提权的一些姿势,还有能够提权成功的前提。5金币就当复习一下了。这里考察的是mysql应急响应,我们应该是根据找flag......
  • 算法基础课-第二章复盘
    一、栈(一)单调栈特点:栈内元素以递增或递减的形式排序。应用:求解下一个更大元素、下一个更小元素、最大子数组和等问题。题目示例:代码逻辑:1、采用递增排序的单调栈,栈顶元素是栈内最大元素。2、循环读入列表元素,在单调栈非空的情况下,如果栈顶元素大于当前元素,将栈顶元素弹出栈......
  • 第二章 操作系统的运行机制
    中央处理器一:CPU的构成与基本的工作方式1、CPU组成(1)CPU由运算器、控制器、一系列寄存器、高速缓存组成运算器:实现指令中的算术和逻辑运算,是计算机系统的和兴控制器:负责控制程序的运行流程、包括取指令、维护CPI的状态寄存器:存取数据和指令(在CPU内部)高速缓存:位于CPU和物理内......
  • STM32寄存器操作、模板构建
    2024年7月18日发布于博客园,本文涉及到STM32F4XX和STM32F1XX系列目录外设寄存器查找①名称②偏移地址③寄存器位表④位功能说明寄存器基本操作C语言的置位和清零具体方法设置GPIO流程给寄存器赋值带参数宏STM32F1xx芯片识别存储器映射寄存器映射让GPIOB端口的16个引脚输......