网络空间安全
寄存器(CPU工作原理)
寄存器(CPU工作原理)

寄存器(CPU工作原理)

寄存器(CPU工作原理)

概述

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

寄存器是CPU内部的小型存储单元,用于快速存取数据和指令

CPU通过执行指令来处理数据,寄存器提供了快速的读写能力,从而提升了整体性能

区别

内部总线实现CPU内部各个器件之间的联系

外部总线实现CPU和主板上其它器件的联系

寄存器概述

8086CPU有14个寄存器,它们的名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

OF

DF

IF

TP

SF

ZF

AF

PF

CF

1. 通用寄存器

  • AX(累加寄存器):主要用于算术运算,常用于输入输出操作。
  • BX(基址寄存器):常用于存储数据的基地址,可以用于寻址。
  • CX(计数寄存器):用于循环控制和计数操作,尤其在字符串操作中。
  • DX(数据寄存器):用于存储I/O端口地址和某些算术运算的高位结果。

2. 段寄存器

  • CS(代码段寄存器):指向当前执行代码的段。
  • DS(数据段寄存器):指向数据存储的段。
  • SS(堆栈段寄存器):指向当前堆栈的段,涉及函数调用和局部变量存储。
  • ES(附加段寄存器):通常用于额外的数据存储和操作,特别是在字符串操作时。

3. 地址寄存器

  • SP(堆栈指针):指向当前堆栈顶端的地址。
  • BP(基指针):用于堆栈操作,通常用于访问函数参数和局部变量。
  • SI(源索引寄存器):在字符串操作中用作源数据的起始地址。
  • DI(目标索引寄存器):在字符串操作中用作目标数据的起始地址。

4. 控制寄存器

  • IP(指令指针寄存器):指向下一条要执行的指令地址,与CS配合使用。
  • FLAGS寄存器(PSW程序状态字):用于存储处理器的状态信息,包括算术运算的结果标志(如零标志、进位标志等)。
标识
条件码标志
  1. 零标志(ZF)
  • 定义:当运算结果为零时,ZF被置为1;否则为0。
  • 用途:用于判断结果是否为零,常用于条件跳转指令。
  1. 进位标志(CF)
  • 定义:在无符号数运算中,如果发生进位,则CF被置为1;否则为0。
  • 用途:用于判断算术运算中的溢出,特别是无符号数的加法和减法。
  1. 符号标志(SF)
  • 定义:根据运算结果的最高位(符号位)来设置,如果结果为负,SF为1;否则为0。
  • 用途:用于判断结果的正负,常用于条件跳转。
  1. 溢出标志(OF)
  • 定义:在有符号数运算中,如果结果溢出(超出可表示的范围),则OF为1;否则为0。
  • 用途:用于判断有符号数运算的结果是否有效。
  1. 辅助进位标志(AF)
  • 定义:在进行BCD(十进制编码)运算时,如果低四位发生进位,则AF被置为1。
  • 用途:用于BCD运算中的条件判断。
  1. 奇偶标志(PF)
  • 定义:如果运算结果的1位数量为偶数,则PF为1;否则为0。
  • 用途:用于某些特定的错误检测算法。
控制标志
  1. 方向标志(DF)
  • 定义:控制字符串操作的方向,DF为1表示从高地址到低地址,DF为0表示从低地址到高地址。
  • 用途:影响字符串处理指令的执行方向。
  1. 中断标志(IF)
  • 定义:控制中断的使能状态,IF为1表示允许中断;为0则禁用中断。
  • 用途:用于处理中断请求。
  1. 跟踪标志(TF)
  • 定义:TF用于调试目的,当设置为1时,CPU会在每个指令执行后产生单步中断。
  • 用途:使得程序员能够逐步执行程序,方便调试。

通用寄存器

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

AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器

以AX为例,观察寄存器的逻辑结构:

fig:

一个16位寄存器可以存储一个16位的数据

一个16位寄存器所能存储的数据的最大值为2e16-1

fig:

注:WIN+R输入calc,可以打开电脑计算器

8086上一代CPU中的寄存器都是8位的

为了保证兼容性,这四位寄存器都可以分为两个独立的8位寄存器使用

如:AX可以分为AH(高八位)和AL(低八位)

fig:

字在寄存器中的存储

一个字可以存在一个16位寄存器中,也就是两个字节

关于数制的讨论

由于一个内存单元可以存放8位数据,CPU中的寄存器又可以存放n个8位数据,也就是说,计算机中的数据大多数是由1~N个8位数据构成

十六进制中,每两位对应一个8位数据

几条汇编指令

mov ax,18 AX = 18
mov ah,78 AH = 78
add ax,8 AX = AX + 8
mov ax,bx AX = BX
add ax,bx AX = AX + BX

思考题1:

fig:

结果为:044CH

思考题2:

fig:

AL作为八位寄存器,超过的数据不会存入AH

结果为:0058H

物理地址

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

16位结构的CPU

描述一个16位的CPU具有以下几个方面特征:

1字节(byte)= 8位(bit),64位/8 = 8字节

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

8086CPU给出物理地址的方法

8086有20位地址总线,可传送20位地址,寻址能力为1M

8086内部为16位结构,它只能传送16位的地址能力,表现出的寻址能力却只有64K

8086CPU采用一种在内部用两位16位地址合成的方法来形成一个20位的物理地址(32位只占用其中的20位)

fig:

8086CPU读写内存时,发生了这么一些事:

  1. CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址
  2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
  3. 地址加法器将两个16位地址合并成20位的地址

地址加法器工作原理

地址加法器合成物理地址的方法:

逻辑地址由段地址和偏移地址组成

物理地址 = 段地址 * 16 + 偏移地址(同一个结果可以由不同的输入产生)

fig:

一个物理地址可以有多种逻辑地址

例如:

传送一个四位数的数据,只有两张可以容纳三位数数据的地址

image-20240921110232756

段的概念

错误认识:

内存被划分为一个一个的段,每个段有一个段地址

正确认识:

内存是分页的,不是分段的,页是固定的,而段不是

内存并没有分段,段的划分来自于CPU,由于8086CPU用 “ 物理地址 = 段地址 * 16 + 偏移地址 ” 的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存

fig:

段是我们强加给CPU的概念,可以按需要划分不同的段

两点需要注意

  1. 段地址*16,必然是16的倍数,所以一个段的起始地址也一定是16的倍数
  2. 偏移地址为16位,16位地址的寻址能力为64K,所以一个段的长度最大为64K(2^16 = 64KB)

寻址能力可以理解为寻址范围

小结

CPU访问内存单元时,必须向内存提供内存单元的物理地址

8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址

image-20240921113017023

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

如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位0~FFFFH,也就是64K个内存单元

21F60H在内存单元中的表示:2000:1F60

给定段地址为0001H,仅通过偏移地址变化,CPU的寻址范围为多少?

CPU的寻址范围为0010H到FFFFH。

段寄存器

段寄存器就是提供段地址的

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

CS和IP

CS为代码段寄存器

IP为指令指针寄存器

它们指示了CPU当前要读取指令的地址

8086CPU读取和执行指令相关部件

fig:

8086CPU工作过程的简要描述
  1. 从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器
  2. IP = IP + 所读取指令的长度,从而指向下一条指令
  3. 执行指令,转到步骤(1),重复这个过程

CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行

如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过

修改CS、IP的指令

在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制

CPU从何处执行指令是由CS:IP中的内容决定的,程序员可以通过改变CS:IP中的内容来控制CPU执行目标指令

mov不能用于设置CS、IP的值,8086CPU没有这样的功能,8086CPU没有提供这样的功能

但有另外的指令改变它们的值,用于区分mov:转移指令

例如:mov ax,123 被称为传送指令

同时修改CS、IP的内容:

jmp 2AE3:3

jmp 3:0B16

功能:用指令中给出的段地址修改CS,偏移地址修改IP

仅修改IP的内容:

jmp ax

jmp bx

CPU代码运行的流程

fig:

结果:

fig:

代码段

fig:

fig:

fig:

小结

fig:

fig:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注