当前位置: 首页 > news >正文

计算机系统的工作原理

计算机系统的工作原理

一, “存储程序” 工作方式

“存储程序” 工作方式规定, 程序执行前, 需要将程序所含的指令和数据送入主存储器, 一旦程序被启动执行, 就无须操作人员的干预, 自动逐条完成指令的取出和执行任务.如下如所示, 一个程序的执行就是周而复始地执行一条一条指令的过程.
在这里插入图片描述

每条指令的执行过程包括:

  1. 根据PC从主存储器中取指令
  2. 对指令进行译码,
  3. 计算下一条指令地址(2和3)
  4. 取操作数并执行
  5. 将结果送回存储器.

程序执行前, 先将程序第一条指令的地址存放到PC中, 将PC的内容作为地址访问主存储器.
在每条指令执行过程中, 都需要计算下一条将执行指令的地址, 并送至PC.
若当前指令为顺序型指令, 则下一条指令地址为PC的内容加上当前指令的长度;若当前指令为跳转型指令, 则下一条指令地址为指令中指定的目标地址.
当前指令执行完后, 根据PC的内容到主存储器中取出的是下一条将要执行的指令, 因而计算机能周而复始地自动提取并执行一条一条的指令.

二, 从源文件到可执行文件

翻译过程的四个阶段

在计算机中编写的C语言程序, 都必须被转换为一系列的低级机器指令, 这些指令按照一种称为可执行目标文件的格式打好包, 并以二进制磁盘文件的形式存放起来.
以UNIX系统中的GCC编译器程序为例, 读取源程序文件hello.c, 并吧=把它翻译成一个可执行目标文件hello, 整个翻译过程可分为四个阶段完成, 如下图
在这里插入图片描述
在这里插入图片描述

  1. 预处理阶段: 预处理器(cpp)对源程序中以字母#开头的命令进行处理, 例如将#include命令后面的h文件内容插入程序文件. 输出结果是一个以.i为扩展名的源程序hello.i.
  2. 编译阶段: 编译器(cc1)对预处理后的源程序进行编译, 生成一个汇编语言源程序hello.s.
    汇编语言源程序中的每条语句都以一种文本格式描述了一条低级语言指令系统.
  3. 汇编阶段: 汇编器(as)将hello.s翻译成机器语言指令, 这些指令打包成一个称为可重新定位目标代码文件hello.o, 它是一种二进制文件, 因此用文本编辑器打开会显示乱码.
  4. 链接阶段: 链接器(ld)将多个可重定位目标代码文件和标准库函数合并为一个可执行目标文件, 简称可执行文件.

本例中, 链接器将hello.o和标准函数库printf所在的可重新定位目标模块printf.o合并, 生成可执行文件hello, 最终生成的可执行文件被保存在磁盘上.

三, 指令执行过程的描述

在这里插入图片描述

四, 总结

http://www.xdnf.cn/news/520237.html

相关文章:

  • 2.2.5
  • 进程间通信--信号量【Linux操作系统】
  • leetcode解题思路分析(一百六十四)1418 - 1424 题
  • [论文品鉴] DeepSeek V3 最新论文 之 MHA、MQA、GQA、MLA
  • 进程状态并详解S和D状态
  • C++学习:六个月从基础到就业——C++17:结构化绑定
  • 什么是dom?作用是什么
  • 产品周围的几面墙
  • C++高级用法--绑定器和函数对象
  • 垂直智能体:企业AI落地的正确打开方式
  • [人月神话_6] 另外一面 | 一页流程图 | 没有银弹
  • 三:操作系统线程管理之用户级线程与内核级线程
  • 大模型应用开发工程师
  • 从逻辑学视角探析证据学的理论框架与应用体系;《证据学》大纲参考
  • Java学习手册:服务熔断与降级
  • 朴素贝叶斯
  • 做什么, what to do?
  • 面试题总结二
  • atcoder C - ~
  • EmuEdit
  • 网页 H5 微应用接入钉钉自动登录
  • python29
  • 【从基础到模型网络】深度学习-语义分割-ROI
  • C++ - 网络编程之初始连接(Winsock2 概述、初始连接案例、初始连接案例解读)
  • 封装、继承、多态的理解
  • Java面试实战:从Spring Boot到分布式缓存的深度探索
  • 程序代码篇---python获取http界面上按钮或者数据输入
  • 批量下载AlphaFold结构
  • leetcode刷题日记——翻转二叉树
  • 第11章 JDBC与MySQL数据库