当前位置:首页 > 经验 >

寄存器的工作原理及逻辑功能(寄存器电路工作原理)

来源:原点资讯(www.yd166.com)时间:2022-11-06 07:33:35作者:YD166手机阅读>>

32位CPU总共有cr0-cr4共5个控制寄存器,64位增加了cr8。他们各自有不同的功能,但都存储了CPU工作时的重要信息:

cr0: 存储了CPU控制标记和工作状态

cr1: 保留未使用

cr2: 页错误出现时保存导致出错的地址

cr3: 存储了当前进程的虚拟地址空间的重要信息——页目录地址

cr4: 也存储了CPU工作相关以及当前人任务的一些信息

cr8: 64位新增扩展使用

其中,CR0尤其重要,它包含了太多重要的CPU信息,值得单独关注一下:

寄存器的工作原理及逻辑功能,寄存器电路工作原理(9)

一些重要的标记位含义如下:

PG: 是否启用内存分页

AM: 是否启用内存对齐自动检查

WP: 是否开启内存写保护,若开启,对只读页面尝试写入时将触发异常,这一机制常常被用来实现写时复制功能

PE: 是否开启保护模式

除了CR0,另一个值得关注的寄存器是CR3,它保存了当前进程所使用的虚拟地址空间的页目录地址,可以说是整个虚拟地址翻译中的顶级指挥棒,在进程空间切换的时候,CR3也将同步切换。

调试寄存器

在x86/x64CPU内部,还有一组用于支持软件调试的寄存器。

调试,对于我们程序员是家常便饭,必备技能。但你想过你的程序能够被调试背后的原理吗?

程序能够被调试,关键在于能够被中断执行和恢复执行,被中断的地方就是我们设置的断点。那程序是如何能在遇到断点的时候停下来呢?

寄存器的工作原理及逻辑功能,寄存器电路工作原理(10)

对于一些解释执行(PHP、Python、JavaScript)或虚拟机执行(Java)的高级语言,这很容易办到,因为它们的执行都在解释器/虚拟机的掌控之中。

而对于像C、C 这样的“底层”编程语言,程序代码是直接编译成CPU的机器指令来执行的,这就需要CPU来提供对于调试的支持了。

对于通常的断点,也就是程序执行到某个位置下就停下来,这种断点实现的方式,在x86/x64上,是利用了一条软中断指令:int 3来进行实现的。

注意,这里的int不是指高级语言里面的整数,而是表示interrupt中断的意思,是一条汇编指令,int 3则表示中断向量号为3的中断。

在我们使用调试器下断点时,调试器将会把对应位置的原来的指令替换为一个int 3指令,机器码为0xCC。这个动作对我们是透明的,我们在调试器中看到的依然是原来的指令,但实际上内存中已经不是原来的指令了。

顺便提一句,两个0xCC是汉字【烫】的编码,在一些编译器里,会给线程的栈中填充大量的0xCC,如果程序出错的时候,我们经常会看到很多烫烫烫出现,就是这个原因。

寄存器的工作原理及逻辑功能,寄存器电路工作原理(11)

言归正传,CPU在执行这条int 3指令时,将自动触发中断处理流程(虽然这实际上不是一个真正的中断),CPU将取出IDTR寄存器指向的中断描述符表IDT的第3项,执行里面的中断处理函数。

而这个中断描述符表,早在操作系统启动之初,就已经提前安排好了,所以执行这条指令后,操作系统的中断处理函数将介入,来处理这一事件。

后面的过程就多了,简单来说,操作系统会把触发这一事件的进程冻结起来,随后将这一事件发送到调试器,调试器拿到之后就知道目标进程触发断点了。这个时候,咱们程序员就能通过调试器的UI交互界面或者命令行调试接口来调试目标进程,查看堆栈、查看内存、变量都随你。

如果我们要继续运行,调试器将会把之前修改的int 3指令给恢复回去,然后告知操作系统:我处理完了,把目标进程解冻吧!

上面简单描述了一下普通断点的实现原理。现在思考一个场景:我们发现一个bug,某个全局整数型变量的值老是莫名其妙被修改,但你发现有很多线程,很多函数都有可能会去修改这个变量,你想找出到底谁*,怎么办?

这个时候上面的普通断点就没办法了,你需要一种新的断点:硬件断点

这时候就该本小节的主人公调试寄存器登场表演了。

寄存器的工作原理及逻辑功能,寄存器电路工作原理(12)

栏目热文

移位寄存器的工作原理(八位循环移位寄存器工作原理)

移位寄存器的工作原理(八位循环移位寄存器工作原理)

今天我们将使用几个基本的电子“构建模块”,移位寄存器。这些方便的设备可用于各种用途,如数据转换、缓冲和存储,但今天我们将...

2022-11-06 07:23:36查看全文 >>

变频器寄存器通俗解释(变频器作用通俗解释)

变频器寄存器通俗解释(变频器作用通俗解释)

1、系统配置1.1 软件安装 Step7 Micro/Win SMART software(含 Modbus协议库)的P...

2022-11-06 07:27:33查看全文 >>

3分钟看懂时序图(plc时序图通俗解释)

3分钟看懂时序图(plc时序图通俗解释)

操作时序永远使用是任何一片IC芯片的最主要的内容。一个芯片的所有使用细节都会在它的官方器件手册上包含。所以使用一个器件事...

2022-11-06 07:40:21查看全文 >>

plc寄存器基础知识(plc中寄存器有哪几种)

plc寄存器基础知识(plc中寄存器有哪几种)

1、 S7-200将1个字长(16位)数字值按比例转换为电流或电压。可以用区域标识符(AQ)、数据长度(W)及字节的起始...

2022-11-06 06:56:07查看全文 >>

寄存器通俗图解(寄存器编程知识讲解)

寄存器通俗图解(寄存器编程知识讲解)

这些显示电子系统中信号波形的动图,有助于帮助我们理解传输的机理。1SPI传输▲ 图1 SPI 数据传输▲ 图1.2 SP...

2022-11-06 07:09:25查看全文 >>

图解寄存器(寄存器寻址图解)

图解寄存器(寄存器寻址图解)

引言指令计数器即程序计数器。它是计算机处理器中的寄存器,它包含当前正在执行的指令的地址(位置)。当每个指令被获取,指令计...

2022-11-06 07:26:17查看全文 >>

8位移位寄存器原理(8位移位寄存器电路设计)

8位移位寄存器原理(8位移位寄存器电路设计)

Arduino从零开始你将学到什么1、你将学到如何增加arduino uno的数字输出针脚2、你将学到74HC595移位...

2022-11-06 07:03:05查看全文 >>

寄存器通俗解释(单片机寄存器通俗解释)

寄存器通俗解释(单片机寄存器通俗解释)

我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 starhttps://github.com/crisxua...

2022-11-06 07:22:54查看全文 >>

计算机寄存器原理图(计算机中所有的寄存器)

计算机寄存器原理图(计算机中所有的寄存器)

通过前面的学习,我们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机内部究竟还有些什...

2022-11-06 07:20:50查看全文 >>

变址寄存器v和z有什么区别(为什么不建议学单片机)

变址寄存器v和z有什么区别(为什么不建议学单片机)

示例说明:一个简易保安系统,在规定次数(如5次)的范围内,若密码不正确将启动报警系统,并关闭安全通道。若规定的次数内密码...

2022-11-06 07:35:31查看全文 >>

文档排行