【计算机系统基础读书笔记】1.1.3 程序和指令的执行过程

news2024/11/24 22:32:15

冯诺依曼结构计算机的功能通过执行程序实现,程序的执行过程就算所包含的指令的执行过程。
指令(instruction)是用0和1表示的一串0/1序列,用来指示CPU完成一个特定的原子操作。

指令(instruction)在计算机科学中,指的是机器语言中的命令,用于告诉计算机执行某个特定的操作或动作。这些指令通常由0和1组成的二进制序列表示,这些序列是CPU能够识别和执行的。
关于原子操作(atomic operation),它是一个在执行过程中不可分割的操作。也就是说,这个操作要么完全执行,要么完全不执行,不存在只执行一部分的情况。原子操作在多线程环境中尤为重要,因为它可以确保数据的一致性和完整性。
以计算机中的加法操作为例,可以将其视为一个指令,这个指令告诉CPU完成一个特定的原子操作。具体来说,假设我们有两个数值A和B,我们需要将它们相加。这个加法操作就是一个原子操作,因为在执行过程中,它不能被其他操作打断。CPU会完整地读取A和B的值,完成加法运算,然后将结果存储到指定的内存位置。这个过程中,不会有其他操作插入进来改变A或B的值,从而保证了加法运算的准确性和一致性。
值得注意的是,虽然单个的加法操作是原子的,但在更复杂的操作序列中,可能需要使用特定的同步机制来确保整个序列的原子性。例如,在多线程环境中,如果一个线程正在读取A和B的值进行加法运算,而另一个线程同时修改了A或B的值,那么最终的结果可能是错误的。为了避免这种情况,可能需要使用锁或其他同步机制来确保加法操作的原子性。
总的来说,指令是计算机执行操作的基础,而原子操作则是确保这些操作在多线程环境中正确执行的关键。

例如,取数指令(load)从主存单元中取出数据存放到通用寄存器中;存数指令(store)将通用寄存器的内容写入主存单元;加法指令(add)将两个通用寄存器内容相加后送入结果寄存器;传送指令(mov)将一个通用寄存器的内容送到另一个通用寄存器;如此等等。
指令通常被划分为若干个字段,有操作码、地址码等字段。操作码字段指出指令额操作类型,如取数、存数、加、减、传送、跳转等;地址码字段指出指令所处理的操作数的地址,如寄存器编号、主存单元编号等。
【例】假设图1.1所示模型机字长为8位;有4个通用寄存器r0~r3,编号分别位0~3;有16个主存单元,编号为0~15。每个主存单元和CPU中的ALU、通用寄存器、IR、MDR的宽度都是8位,PC和MAR的宽度都是4位;连接CPU和主存的总线中有4位地址线、8位数据线和若干位控制线(包括读/写命令线)。该模型机采用8位定长指令字,即每条指令有8位。指令格式有R型和M型两种,如图所示:

根据其描述,其冯诺依曼结构对应的模型图 (我自己画的)如下:

op为操作码字段,R型指令的op为0000时是寄存器间传送mov操作,为0001时是寄存器间相加add操作,M型指令的op为1110时是取数操作load,为1111时是存数操作store,rs和rt为通用寄存器编号,addr为主存单元地址。
R[r]表示编号为r的通用寄存器中的内容,M[addr]表示地址为addr的主存单元内容,“←”表示从右向左传送数据。比如,指令1110 0110,1110是取数load,其要取的数据在主存中的地址为0110,取得的数据要存放在第0号通用寄存器,则R[0]←M[0110],也就表示将0110B(末尾写B表示二进制)=6号主存单元中的内容取到0号寄存器;指令0001 0001,0001是add操作,它是R型指令,也就是后面那个0001要拆开看成00和01,也就是将1号寄存器和0号寄存器的内容相加并保存到0号寄存器,即R[0]←R[0]+R[1],表示将0号和1号寄存器内容相加的结果送0号寄存器。
若在该模型机上实现z=x+y,x和y分别存放在主存5号和6号单元中,结果z存放在7号单元中,则相应程序在主存单元中的初始内容为(字长8位,主存地址就8位):

其对应的结构图是:

主存地址为0时
1110 0110是M型指令,1110是取数,从主存地址0110取数据存到0号通用寄存器,也就是R[0]←M[0110B]即R[0]←M[6];
主存地址为1时
0000 0100是R型指令,0000是寄存器间传送mov操作,也就是R[01]←R[01]+R[00],将0号通用寄存器和1号通用寄存器的数据相加保存到1号通用寄存器中;
主存地址为2时
1110 0101是M型指令,1110是取数,从主存地址0101取数据存到0号通用寄存器,也就是R[0]←M[0101B]即R[0]←M[5];
主存地址为3时
0001 0001是R型指令,0001是add操作,即R[00]←R[00]+R[01]亦即R[0]←R[0]+R[1]
主存地址为4时
1111 0111是M型指令,1111是存数,是将0号通用寄存器的数据存入0111B即7号主存单元中M[0111B]←R[0]即M[7]←R[0]
主存地址为5时,此时是数据,不是指令
0001 0000操作数x,值为16(二进制转十进制后)
主存地址为6时,此时是数据,不是指令
0010 0001操作数y,值为1+32=33
主存地址为7时,此时是数据,不是指令
0000 0000结果z,初始值为0

“存储程序”工作方式规定,程序执行前,需将程序包含的指令和数据先送入主存,一旦启动程序执行,则计算机必须能够在不需操作人员干预下自动完成逐条指令取出和执行的任务。如图所示:

一个程序的执行就算周而复始地执行一条一条指令的过程。每条指令的执行过程包括:从主存取指令、对指令进行译码、PC增量(也就是图中的PC+“1”表示PC的内容加上当前这一条指令的长度)、取操作数并执行、将结果送主存或寄存器保存。
程序执行前,首先将程序的起始地址存放在PC中,取指令时,将PC的内容作为地址访问主存。每条指令执行过程中,都需要计算下一条将执行指令的主存地址,并送入到PC中。若当前指令为顺序型指令,则下条指令地址为PC的内容加上当前指令的长度;若当前指令为跳转型指令,则下条指令地址为指令中指定的目标地址
当前指令执行完后,根据PC的值到主存中取到的是下条将要执行的指令,因而计算机能够周而复始地自动取出并执行一条一条指令。
刚才的程序,首地址为0,因此程序开始执行时,PC为0000(题目说明PC宽度为4位),下面就演示的刚才程序执行的指令,但是它从l1开始,不是从l0开始:

注意PC的变化,
l1:1110 0110:首先,IR通过MDR将主存地址0000对应的内容取过来(即1110 0110),它是M型指令,操作码是1110。

1110是取数指令,将1110送入控制部件CU进行译码,同时PC进行“+1”操作,PC(4位宽度)中的内容变为0001,因为是取数指令,控制部件CU产生“主存读”控制信号read,同时控制在取数并执行阶段将read信号送控制线,指令后4位的0110(addr字段)作为主存地址送MAR并自动送地址线,经过一段时间,主存将0110B=6号主存单元的33(0010 0001B)变量y送到数据线并自动存储在MDR中,最后由控制器控制将MDR的内容送入0号通用寄存器,因此,指令L1执行的结果是R[0]=33。
指令执行的各阶段包含若干个微操作,微操作需要相应的控制信号(control signal)进行控制。
取指令阶段IR←M[PC]微操作有:MAR←PC;控制线←Read;IR←MDR。(如果是刚开机,将PC设定的预定义地址(看起来这个模型结构,预定义地址是0000,如果不是刚开机,PC传送的是上一条加1后的指令的地址)送入MAR,然后MAR通过地址总线和主存通信,将Read读数指令送入控制线,控制线再将读数指令送入主存,主存再将0000这个地址对应的主存的内容1110 0110送入通过数据总线送入MDR,MDR将读取到的数据1110 0110送入IR)

【注】计算机开机时,程序计数器pc的值通常会被设置为一个预定义的地址,这个地址指向操作系统的启动程序或者BIOS程序的入口点。当计算机开始执行这个地址所指向的程序时,程序计数器pc的值会逐步增加,指向下一条要执行的指令的地址。

取数阶段R[0]←M[addr]微操作有:
MAR←addr;控制线←Read;R[0]←MDR(addr地址送入MAR,MAR通过地址总线将addr送入主存,发送Read读数信号,主存收到读数信号后,将addr地址对应在主存中的数据通过数据总线送入MDR,MDR将读取到的数据送入R[0]寄存器)

存数阶段M[addr]←R[0]微操作有:
MAR←addr;MDR←R[0];控制线←Write
(addr地址送入MAR,MAR通过地址总线将addr送入主存,主存接收到这是存数指令,然后将R[0]寄存器的数据送入MDR,MDR通过数据总线将数据送入主存,主存将数据存入addr地址对应的内存空间内)

ALU运算R[0]←R[0]+R[1]微操作有:
A←R[0];B←R[1];ALUop←add;R[0]←F(R[0]寄存器的数据送入输出端A,R[1]寄存器的数据送入输出端B,ALU执行加指令,A+B,最后将计算结果送入输出端F,输出端F将计算结果送入R[0]寄存器)

这里的Read、Write、mov、add等微操作控制信号部件对op字段进行译码后送出,冯诺依曼结构图中虚线是控制信号线,每条指令执行过程中,所包含的微操作具有先后顺序关系,需要定时信号进行定时。通常,CPU中所有微操作都由时钟信号进行定时,时钟信号(clock signal)的宽度为一个时钟周期(clock cycle)。一条指令的执行时间包含一个或多个时钟周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 键值型数据库

一、Redis是什么 Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据 库,基于内存…

悟空大爆,OZON有哪些悟空产品推荐

Top1 减压玩具 Электронный поп ит пикачу Pop It антистресс 商品id:1592564066 月销量:811 OZON有哪些悟空产品,详情看工具:D。DDqbt。COm/74rD 此款减压玩具以其独特的设计,为…

保姆级教程!奶奶都能学会的Mac本地部署Stable Diffusion教程

一、为什么选择Stable-diffusion 举一个简单的例子,Midjourney和Stable diffusion在照片处理领域就好比是“美图秀秀”和“PS”;在短视频制作领域,就好比是“剪映”和“PR”。 这样说是不是更容易理解了,如果你是新手只想单纯的…

最高身高(c语言)

1.//描述 //KiKi想从n行m列的方阵队列中找到身高最高的人的位置,请你帮助他完成这个任务。 // //输入描述: //第一行包含两个整数n和m,表示这个方阵队列包含n行m列。从2到n 1行, // 每行输入m个整数(范围 - 231~231 -…

当黑神话遇上AI:悟空背后的策划逆袭战

声明:此篇为 ai123.cn 原创文章,转载请标明出处链接:https://ai123.cn/2192.html 哈喽,亲爱的游戏迷,随着《黑神话:悟空》的上线,大家都在忙着“直面天命”了吧?今天我想和大家分享最…

基于Java爬取微博数据(四) 获取 图片 or 视频

基于Java爬取微博数据四 获取 图片 or 视频 图片 or 视频转存 图片 or 视频注意点 前面已经讲述了基于 Java 爬取微博正文列表内容,微博用户主页内容以及导出爬取到的微博数据等操作,那么下面讲述一下如何处理微博正文中的图片/视频等内容。 图片 or 视…

linux笔记1

命令格式 命令行界面的提示符解析: [rootlocalhost ~]# root位置: 登录用户名 : 连接符号 localhost位置: 本机的主机名 ~位置: 当前的所在位置 #位置: 表示是超级管理员还是普通用户 超级管…

Cesium 自定义MaterialProperty原理解析

MaterialProperty是一个抽象接口类,它定义了Entity图元的材质要实现的属性和函数。这些属性和函数主要是cesium 内部调用,用于减少cesium 内部对材质的重复创建和缓存,减少内存开销。 1. Property 类 Property类是所有属性的抽象接口类&…

B2B⼤宗电商交易系统功能案例分析

B2B大宗电商交易系统是构建高效、安全、可扩展电子商务平台的重要基石。以下是对该系统后端架构与关键功能的详细解析: 后端架构 B2B大宗电商交易系统的后端架构通常涉及多个关键组件和技术,以确保系统的稳定运行和高效处理。主要组成部分包括&#xff…

UE4编安卓时Core模块为何只include Android文件夹?

Core模块 Core模块是整个引擎中最核心的模块。几乎UE4中的每个其他模块都导入Core。Engine\Source\Runtime\Core\Private下有很多文件夹&#xff0c;下面罗列一部分&#xff1a; G:\St\EngineSource\Engine\Source\Runtime\Core\Private 的目录 2024/07/18 12:02 <DIR…

AOC U27U2P创作设计旗舰——传递情感,用色彩说话!

摘要&#xff1a;每一次设计都是一种表达&#xff0c;每一次创作都是一次成长 并不是所有的路在一开始走的时候&#xff0c;都能找到正确的方向。对于设计师而言&#xff0c;在创作与设计的道路上&#xff0c;亦是如此。灵感的枯竭、无休止的改稿、色彩的偏差等等&#xff0c;…

基于springboot的校园失物招领系统--论文pf

TOC springboot483基于springboot的校园失物招领系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人…

Linux yum提示Error downloading packages

很明显的错误&#xff0c;没有考虑过磁盘空间&#xff0c;记录一下。 Error downloading packages:gcc-4.8.5-44.el7.x86_64: Insufficient space in download directory /var/cache/yum/x86_64/7/base/packages* free 0 * needed 16 M使用du查看当前目录下所有文件大小 du …

mac安装ipa包【金铲铲为例】

mac安装ipa包 安装PlayCover 链接&#xff1a;https://github.com/PlayCover/PlayCover 1、点最新Releases 2、cmd ↓&#xff0c;拉到最下面下载dmg 3、安装 图标拖拽到Applications里 IPA下载 以金铲铲为例&#xff0c;良心砸壳包站点&#xff0c;有能力可以支持一下…

Python办公自动化 python-pptx模块的安装与使用【1】

学好办公自动化&#xff0c;走遍天下都不怕&#xff01;&#xff01; 前面已经学习了python自动处理Excel数据和自动生成word试卷的案例&#xff0c; 今天学习一下python中的python-pptx模块&#xff0c;主要用于自动化生成和更新PPT文件。主要是python-pptx的用法&#xff0c;…

react 的学习随记

npx create-react-app my-app 创建一个名叫my-app的react的项目 npm run eject 运行 显示config 文件夹 react jsx &#xff08;使用时将babel 将jsx转为js&#xff09; 单页面时需要引用 1&#xff0c;样式&#xff08;在虚拟dom时&#xff09; 1. 引用样式时 用classNa…

(第三十三天)

1. 设置主从从 mysql57 服务器 &#xff08; 1 &#xff09;配置主数据库 [rootmsater_5 ~] # systemctl stop filewalld [rootmsater_5 ~] # setenforce 0 [rootmsater_5 ~] # systemctl disable filewalld [rootmsater_5 ~] # ls anaconda-ks.cfg mysql-5.7.44-linux-g…

解决STM32使用J-Link可以擦除和读取但是无法烧录问题

现象 使用J-Link烧录模组固件&#xff0c;出现可以读取和擦除&#xff0c;但是无法烧录问题&#xff0c;提示错误如下&#xff1a; ERROR: Programming failed address 0x08000080 (program error)End of flash programmingERROR: Program failed 读出来的时候这个地址数据…

AWS EC2:助力中国企业扬帆出海

在全球化的今天&#xff0c;中国的企业家们正积极寻找机会走向世界舞台。在这个过程中&#xff0c;云计算成为了不可或缺的技术支撑。亚马逊AWS作为全球领先的云服务提供商&#xff0c;其EC2&#xff08;Elastic Compute Cloud&#xff09;弹性云服务器以其卓越的性能和广泛的基…

【学习笔记】灰色预测 GM(1,1) 模型 —— Matlab

文章目录 前言一、灰色预测模型灰色预测适用情况GM (1,1)模型 二、示例指数规律检验(原始数据级比检验)级比检验的定义GM(1,1) 模型的级比检验 模型求解求解微分方程 模型评价(检验模型对原始数据的拟合程度)残差检验级比偏差检验 三、代码实现----Matlab级比检验代码模型求解代…