0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样通过改变寄存器中的内容实现对CPU的控制呢?

冬至子 来源:Flashield 作者:Flashield 2023-09-20 15:49 次阅读

寄存器

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

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

2.1 通用寄存器

8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,8086CPU的AX、BX、CX、DX这4个寄存器都可分为两个可独立使用的8位寄存器来用:

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

2.2 字在寄存器中的存储

8086CPU可以一次性处理以下两种尺寸的数据。

  • 字节 :记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
  • :记为word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节。一个字可以存在16位寄存器中。

2.3 几条汇编指令

  • 汇编指令不区分大小写。
  • 在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。

2.4 物理地址

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

2.5 16位结构的CPU

16位结构(16位机、字长为16位等常见说法,与16位结构的含义相同)描述了一个CPU具有下面几方面的结构特性。

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

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

8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位(地址总线)的物理地址。当8086CPU要读写内存时:

  1. CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
  2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
  3. 地址加法器将两个16位地址合成为一个20位的物理地址;
  4. 地址加法器通过内部总线将20位物理地址送入输入输出控制电路
  5. 输入输出控制电路将20位物理地址送上地址总线;
  6. 20位物理地址被地址总线传送到存储器。

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

2.7 “段地址×16+偏移地址”的本质含义

“段地址×16+偏移地址=物理地址”的本质含义是:CPU在访问内存时,用一个 基础地址 (段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

2.8 段的概念

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

有两点需要注意:段地址×16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位(寄存器位数),16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。

“数据在21F60H内存单元中。”这句话对于8086PC机一般不这样讲;而是如下说法:

  1. 数据存在内存20001F60单元中;
  2. 数据存在内存的2000H段中的1F60H单元中。

2.9 段寄存器

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

2.10 CS和IP

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

  • CS为代码段寄存器;
  • IP为指令指针寄存器。

任意时刻,CPU将CS:IP指向的内容当作指令执行。具体的工作过程:

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

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

2.11 修改CS、IP的指令

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

能够改变CS、IP的内容的指令被统称为 转移指令 。若想同时修改CS、PP的内容,可用形如“jmp段地址:偏移地址”的指令完成。

jmp 2AE3:3 #执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。
jmp 3:0B16 #执行后:CS=0003H,IP=0B16H,CPU将从00B46H处读取指令。

若想仅修改IP的内容,可用形如“jmp某一合法寄存器”的指令完成。

jmp ax, #指令执行前:ax=1000H,CS=2000H,IP=000H
        #指令执行后:ax=1000H,CS=2000H,IP=1000H
jmp bx, #指令执行前:bx=0B16H,CS=2000H,IP=0003H
        #指令执行后:bx=0B16H,CS=2000H,IP=0B16H
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    110

    文章

    13786

    浏览量

    168209
  • 寄存器
    +关注

    关注

    30

    文章

    4413

    浏览量

    116071
  • 存储器
    +关注

    关注

    36

    文章

    6459

    浏览量

    160632
  • PC机
    +关注

    关注

    2

    文章

    188

    浏览量

    27831
  • 加法器
    +关注

    关注

    6

    文章

    152

    浏览量

    29403
收藏 人收藏

    评论

    相关推荐

    使用FPGA通过SPI总线控制AD9266寄存器无法改变寄存器

    通过SPI总线控制AD9266寄存器,可以回读寄存器默认值,但是无法改变寄存器值。不知道有没有人遇到过同样的问题。程序是自己写的,公司电脑不让联网,所以没有代码贴出来感觉不是时序的问题,因为回读没有问题。不知道是哪设置不对???
    发表于 01-16 11:52

    怎样通过输出比较寄存器来调整pwm输出的占空比

    寄存器怎样通过输出比较寄存器来调整pwm输出的占空比
    发表于 11-16 08:28

    怎样通过寄存器的输出来控制GPIO从而点亮LED

    怎样通过寄存器的输出来控制GPIO从而点亮LED
    发表于 11-29 07:33

    CPU的主要部件之寄存器详解

    寄存器寄存器CPU中程序员可以用指令读写的部件,CPU的主要部件是寄存器,程序员通过改变各种寄存器内容实现CPU控制CPU由运算控制器
    发表于 12-10 06:02

    怎样通过STM32使用SPI写入命令字节来实现对32个寄存器的读写操作

    怎样通过STM32使用SPI写入命令字节来实现对32个寄存器的读写操作
    发表于 12-17 07:03

    怎样通过寄存器控制STM32F4 IO口的高低电平

    怎样通过寄存器控制STM32F4 IO口的高低电平?并实现一个经典的跑流水灯程序?
    发表于 02-11 08:02

    Audio HAL控制驱动寄存器是如何实现

    控制驱动寄存器是如何实现的?[RK3288][Android6.0] 用户空间对音频寄存器怎样控制的?
    发表于 03-10 08:00

    什么样的寄存器不需要复位?哪些寄存器CPU能够访问的

    通过CPU实现。2、基地址/偏移地址几乎我们设计的每个模块都会有寄存器,而它们的寄存器或多或少能被CPU访问到。但CPU的接口通常只有一组总线
    发表于 07-08 17:43

    CS,IP和PC寄存器

    CPU在执行指令时,通过代码寄存器CS和指令指针寄存器IP(instruction Pointer)来确定要执行的下一条指令的内存地址。CS:IP 两个寄存器指示了CPU当前要赌气的指令地址,计...
    发表于 12-17 18:31 2次下载
    CS,IP和PC<b>寄存器</b>

    CPU寄存器详解

    CPU和内存以及外部设备组成。CPU负责数据处理,内存负责存储,外部设备负责数据的输入和输出,它们之间通过总线连接在一起。CPU内部主要由控制器、运算寄存器组成
    发表于 06-04 20:32 1.1w次阅读

    寄存器变量

    寄存器变量。寄存器变量的值会被存放在CPU寄存器,每当需要使用它们时,CPU就可以直接使用,而无须再通过控制器从内存获取。由于操作寄存器的速度远高于操作内存,所以正
    发表于 06-03 10:13 1800次阅读

    寄存器与内存的区别

    寄存器是中央处理内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理控制部件,包含的寄存器有指令寄存器(IR)和程序计数(PC)。在中央处理
    发表于 12-31 16:57 8244次阅读

    如何在VHDL实现一个简单的寄存器

    ,我们将学习如何在 VHDL 实现一个简单的寄存器
    发表于 07-29 16:48 3006次阅读
    如何在VHDL<b>中</b><b>实现</b>一个简单的<b>寄存器</b>

    解析CPU寄存器

    寄存器在16位寄存器,而16位寄存器在32位寄存器
    发表于 09-19 10:10 1750次阅读

    cpu寄存器和存储的区别

    cpu寄存器和存储的区别 寄存器存在于CPU,速度很快,数目有限;存储是内存,速度稍慢,但数量很大。寄存器的功能是存储二进制代码,是由具有存储功能的触发组合起来构成的。一个触发可以存储1位
    发表于 03-21 15:12 344次阅读