《操作系统真象还原》——0.24 如何控制CPU的下一条指令

简介: 与x86不同的是在ARM中可以用mov指令来修改程序流,在ARM体系CPU的汇编器中,寄存器的名称在汇编语言中是以“r数字”的形式命名的,例如汇编代码:mov pc,r0,表示将寄存器r0中的内容赋值给程序寄存器PC,这样就直接改变了程序的执行流。

本节书摘来自异步社区《操作系统真象还原》一书中的第0章,第0.24节,作者:郑钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看

0.24 如何控制CPU的下一条指令

其实此问题我一直犹豫要不要写出来,因为大部人都觉得这个问题有些匪夷所思,CPU是负责执行指令的,它会按照程序的执行流程走,此问题的目的其实就是想知道如何牵着CPU的鼻子走。当初我被问这个问题时也觉得很诧异,甚至我觉得自己可能没理解人家的意思。后来他这样跟我说:“CPU要执行的下一条指令是在CS:IP寄存器吧?”我说:“是啊”。他又问:“CS和IP寄存器,是用mov指令修改的吗?”我听后,顿时觉得他这个问题很有意义,暗自对他有些小敬佩,我相信很多人都没想过,CS和IP能不能用mov指令去修改。

是这样的,我们常说的用于存放下一条指令地址的寄存器称为程序计数器PC(Program Counter)。这个名词在我看来是个概念级别的内容,它只是CPU中有关下一条指令存放地址的统称,也就是说PC是用来表示下一条指令的存放地址,具体的实现形式不限,后面会有所讨论。

CPU按照指令集可以分为很多种,由于PC只是个概念,所以在不同种类的CPU中,有不同的实现。注意啦,这里的“不同种类”不是指CPU品牌,而是指CPU体系结构,如INTEL和AMD同属x86构架,如果您对此不了解,细心的我早已在下面为您准备好了体系结构、指令集的相关内容。由于此方面内容较独立,我专门将其组织成一个小节供大伙儿参考,如果您现在感兴趣,可以先参阅“指令集、体系结构、微架构、编程语言”这一节。

在x86体系结构的CPU中,也就是咱们大多数人使用的INTEL或AMD公司出品的桌面处理器,程序计数器PC并不是单一的某种寄存器,它是一种寄存器组合,指的段寄存器CS和指令指令寄存器IP。

CS和IP是CPU待执行的下一条指令的段基址和段内偏移地址,不能直接用mov指令去改变它们,我想可能的一个原因是:mov指令一次只能改变一个寄存器,不能同时将cs和ip都改变。如果只改变了其中一个会引起错误。如改变了cs的值后,ip的值还是原先cs段的偏移,很难保证新的cs段内的偏移地址ip处的指令是正确的。因此,有专门改变执行流的指令,如jmp、call、int、ret,这些指令可以同时修改cs和ip,它们在硬件级别上实现了原子操作。

以上说的是x86体系的CPU,其他类型的CPU是怎样的呢?这就取决于具体实现啦,咱们这里拿ARM举例,它的程序计数器有个专门的寄存器,名字就叫PC,想要改变程序流程,直接对该寄存器赋值便可。

与x86不同的是在ARM中可以用mov指令来修改程序流,在ARM体系CPU的汇编器中,寄存器的名称在汇编语言中是以“r数字”的形式命名的,例如汇编代码:mov pc,r0,表示将寄存器r0中的内容赋值给程序寄存器PC,这样就直接改变了程序的执行流。

总结一下,程序计数器PC负责处理器的执行方向,它只是获取下一条指令的方法形式,在不同体系结构的CPU中有不同的实现方法。

目录
打赏
0
0
0
0
1813
分享
相关文章
|
4月前
CPU的工作原理基于其内部结构,通过执行指令来完成各种任务
CPU的工作原理基于其内部结构,通过执行指令来完成各种任务
119 2
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
111 23
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
【AI系统】CPU 指令集架构
本文介绍了指令集架构(ISA)的基本概念,探讨了CISC与RISC两种主要的指令集架构设计思路,分析了它们的优缺点及应用场景。文章还简述了ISA的历史发展,包括x86、ARM、MIPS、Alpha和RISC-V等常见架构的特点。最后,文章讨论了CPU的并行处理架构,如SISD、SIMD、MISD、MIMD和SIMT,并概述了这些架构在服务器、PC及嵌入式领域的应用情况。
232 5
|
8月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
129 1
|
8月前
|
【Linux操作系统】基本指令-2
【Linux操作系统】基本指令
【Linux操作系统】基本指令-2
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
客户机操作系统已禁用 CPU。请关闭或重置虚拟机。解决方法
客户机操作系统已禁用 CPU。请关闭或重置虚拟机。解决方法
3031 0
【Linux操作系统】基本指令-1
【Linux操作系统】基本指令
|
8月前
|
芯片设计 | 一文读懂,CPU、精简指令集、复杂指令集该如何理解
芯片设计 | 一文读懂,CPU、精简指令集、复杂指令集该如何理解
483 0