码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
计算机组成原理(六)
指令跳转
CPU 是如何执行指令的?
逻辑上,我们可以认为,CPU 其实就是由一堆寄存器组成的。
寄存器就是CPU内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路。
触发器和锁存器,其实就是两种不同原理的数字电路组成的逻辑门。
N 个触发器或者锁存器,就可以组成一个 N 位(Bit)的寄存器,能够保存 N 位的数据。
一个 CPU 里面会有很多种不同功能的寄存器。
一个是
PC 寄存器(Program Counter Register)
,我们也叫指令地址寄存器(Instruction Address Register)。顾名思义,它就是用来
存放下一条需要执行的计算机指令的内存地址
。
第二个是
指令寄存器(Instruction Register)
,用来
存放当前正在执行的指令
。
第三个是
条件码寄存器(Status Register)
,用里面的一个一个标记位(Flag),存放 CPU 进行算术或者逻辑计算的结果。
实际上,一个程序执行的时候,CPU 会根据 PC 寄存器里的地址,从内存里面把需要执行的指令读取到指令寄存器里面执行,然后根据指令长度自增,开始顺序读取下一条指令。一个程序的一条条指令,在内存里面是连续保存的,也会一条条顺序加载。
实际在机器指令层面,无论是 if…else…也好,还是 for/while 也好,都是用和 goto 相同的跳转到特定指令位置的方式来实现的。
除了简单地通过 PC 寄存器自增的方式顺序执行外,条件码寄存器会记录下当前执行指令的条件判断状态,然后通过跳转指令读取对应的条件码,修改 PC 寄存器内的下一条指令的地址,最终实现 if…else 以及 for/while 这样的程序控制流程。
虽然我们可以用高级语言,可以用不同的语法,比如 if…else 这样的条件分支,或者 while/for 这样的循环方式,来实现不用的程序运行流程,但是回归到计算机可以识别的机器指令级别,其实都只是一个简单的地址跳转而已,也就是一个类似于 goto 的语句。
想要在硬件层面实现这个 goto 语句,除了本身需要用来保存下一条指令地址,以及当前正要执行指令的 PC 寄存器、指令寄存器外,我们只需要再增加一个条件码寄存器,来保留条件判断的状态。这样简简单单的三个寄存器,就可以实现条件判断和循环重复执行代码的功能。
相关阅读:
分类网络知识蒸馏【附代码】
【owt】p2p 通道建立连接及发布流过程
【云原生之kubernetes实战】在k8s环境下部署Teleport堡垒机系统
[python]pytest运行报错pytest: error: unrecognized arguments: --reruns
基于PRM(probabilistic roadmaps)算法的机器人路线规划算法matlab仿真
Python学习(5)-基础语法(输入和输出)
想知道怎么把过曝的图片进行修复?这些方法可以做到
生成器建造者模式(Builder)——创建型模式
完全背包问题--找零钱
windows10杀进程
原文地址:https://blog.csdn.net/fangzhan666/article/details/125442568
最新文章
【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
用 Hashids 优雅解决 C 端自增 ID 暴露问题
V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
LLVM Pass快速入门(四):代码插桩
milkup:桌面端 markdown AI续写和即时渲染
基于项目工程构建SBOM(软件物料清单)的研究
鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
.NET 中如何快速实现 List 集合去重?
扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
浅谈数据访问层
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
小工具
小游戏
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
京公网安备 11010502049817号