【计算机组成 课程笔记】3.1 算数运算和逻辑运算

news2024/11/17 16:36:26

课程链接:

计算机组成_北京大学_中国大学MOOC(慕课)

3 - 1 - 301-算术运算和逻辑运算(13-'7--)_哔哩哔哩_bilibili

计算机的核心功能就是运算,运算的基本类型包括算数运算和逻辑运算。想要了解计算机是如何实现运算的,我们就要从算数运算指令和逻辑运算指令开始说起。

1. 从模型机说起

这是我们非常熟悉的模型机,我们在开始介绍模型机时(【计算机组成 课程笔记】1.2 冯·诺伊曼结构_Elaine_Bao的博客-CSDN博客)就用了一条加法指令作为例子。加法指令就是一种算数运算指令。

这个例子中的加法指令是将R0寄存器当中的数和存储器地址为6的存储单元中的数相加,并将结果放回到R0寄存器当中。这条指令的格式比较接近X86指令,它可以在运算指令当中进行存储器的操作。而现在,为了简单起见,我们将选用MIPS指令进行讲解。

2. 算数运算指令 - R型指令

MIPS的运算指令只能对寄存器进行操作,例如如下的格式,add表示加法指令,$+数字表示对应的通用寄存器。所以这条指令要做的是把9号寄存器的内容和10号寄存器的内容相加,并存到8号寄存器。如果我们定义右边的这么一段C语言程序,并且假设在程序中定义的这几个变量,分别被分配到了8,9,10号寄存器中,那么在C语言中所写的这条加法语句就会经过MIPS的编译器生成左边这样的MIPS指令。

这条指令的操作数都是寄存器,所以它是一条R型指令。根据指令编码和指令操作数的二进制编码换算,我们可以得到这条指令的具体的编码是000000 01001 01010 01000 00000 100000。

根据opcode域是全0,知道了这是一条R型指令,再根据funct域的值,分析出这是一条add指令,因此控制电路会向ALU发送对应的控制信号,指明接下来要进行加法运算。与此同时,指令译码部件还会分析出第一个源操作数rs是9号寄存器,第二个源操作数rt是10号寄存器,那么控制电路会选通对应的源操作数寄存器,将其内容传送到ALU的输入。同时,指令译码部件也会分析出目的操作数rd是8号寄存器,因此控制寄存器还会将ALU的输出连通到8号寄存器。在这样的设定下,ALU会根据控制电路给出的信号进行加法运算,并送出运算的结果。这就完成了一次加法运算。

对于MIPS指令来说,其核心的算数运算指令,采用R型格式的有这几种:

add和addu的区别在于,add在运算中产生溢出时,会向控制器报告异常,由控制器进行相关处理。而addu不会报告异常。sub和subu的区别也类似。

这类R型指令的源操作数都是在寄存器中的,但如果有一个源操作数是立即数,就需要采用另一种格式的指令,也就是I型指令。

3. 算数运算指令- I型指令

这是一条I型格式的加法指令的例子,将22号寄存器的内容加上一个立即数-50,并将结果存到21号寄存器中。对应的I型指令的格式如下,根据指令编码和指令操作数的二进制编码换算,我们可以得到这条指令的具体的编码是001000 10110 10101 1111 1111 1100 1110。

那么当CPU将这条指令的编码取回放到IR寄存器后,指令译码部件会根据opcode域发现这是一条立即数的加法指令,因此控制电路会向ALU发出控制信号,指示接下来要进行加法运算。同时指令译码部件分析会发现其中一个源操作数rs来自22号寄存器,因此22号寄存器中的内容会在控制电路的控制下通过内部总线传送给ALU的一个输入。而另一个源操作数是立即数,这个立即数是存放在指令编码中的,因此控制电路会从指令编码中提取出这个立即数,并传送给ALU的另一个输入。同时,指令译码部件也会分析出目的操作数rt是21号寄存器,因此控制寄存器还会将ALU的输出连通到21号寄存器。这就是这条立即数加法指令的运算过程。

但是我们要注意的一点是,这个立即数是16位的,而另一个源操作数和目的操作数都是32位的。那如何将16位数和32位数进行相加呢?需要进行一些转换。

转换的方法在MIPS的指令说明中很清楚地指出了,SignExtImm表示立即数的符号扩展,也就是说立即数的高16位是由低16位中的最高位复制了16遍填充得到的。熟悉补码规则的可以知道,对于一个有符号数,进行符号扩展不会改变这个数的值。不了解这一点的话可以补充一下二进制的补码知识。

4. 逻辑运算指令

与算数运算指令类似,逻辑运算指令也分为R型和I型两种格式。其中I型指令对立即数的扩展与上面的扩展方式不同,采用的是0扩展,也就是说扩展后的高16位全都是0。

我们也来看一个例子,这里是一个逻辑“与”指令的编码示例。根据指令编码和指令操作数的二进制编码换算,我们可以得到这条指令的具体的编码是000000 01001 01010 01000 00000 100100。

相应的CPU的指令执行过程如下图:

5. 算数逻辑运算的需求

这些需求对应了MIPS核心指令中提供的加法,减法,与,或,或非这些指令的功能。

现在我们已经了解了这些运算指令的基本特点,下一步我们就来分析这些指令在硬件电路上是如何实现的。

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

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

相关文章

linux免密登录报错 Bad owner or permissions on /etc/ssh/ssh_config.d/05-redhat.conf

问题:权限不对的 解决: 1.检查文件的所有者和权限。 确保文件的所有者是正确的。 运行以下命令来确定文件的所有者和权限: ls -l /etc/ssh/ssh_config.d/05-redhat.conf 通常情况下,SSH配置文件应该属于root用户。如果所有者不是…

HDLBits 练习 Always if2

Always if2 一个常见的错误:如何避免产生锁存器。 当设计一的电路的时候,你首先应该从电路的角度去思考。 我想要一个逻辑门我想要一个有着3和输入和3输出的组合逻辑电路。我想要一个后边跟着一个触发器的组合逻辑电路。 你必须不能先写代码&#xf…

VC++6.0下载安装使用教程

一、前言 微软原版的 VC6.0 已经不容易找到,网上提供的都是经过第三方修改的版本,删除了一些使用不到的功能,增强了兼容性。这里我们使用 VC6.0 完整绿色版,它能够支持一般的 C/C 应用程序开发以及计算机二级考试。 二、VC6.0 下…

设计模式大白话——适配器模式

适配器模式 概述示例适配器的种类小结 概述 ​ 适配器其实非常好理解,放到生活中来,我们身边处处都有这样的例子,最常见的是用的比较多的各种转接线(如:USB 转 Type-C),有了这个“适配器”&…

基于 kube-vip 部署 kubernetes 高可用集群

kube-vip 简介 kube-vip 是一个开源项目,旨在简化为 Kubernetes 集群提供负载均衡服务。 kube-vip 为 Kubernetes 集群提供虚拟 IP 和负载均衡器,用于控制平面(用于构建高可用集群)和 Kubernetes 服务类型,而无需依赖…

智己 LS6 用实力和你卷,最强 800v ?

2023 成都车展期间,智己 LS6 正式公布预售价格,新车预售价为 23-30 万元。新车会在 10 月份进行上市,11 月正式交付。 此前我们对智己 LS6 做过非常详细的静态体验,感兴趣的可点击此链接了解。 造型方面,新车前脸相比…

CNN(六):ResNeXt-50实战

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 ResNeXt是有何凯明团队在2017年CVPR会议上提出来的新型图像分类网络。它是ResNet的升级版,在ResNet的基础上,引入了ca…

【C++】VS配置OpenCV/Libtorch环境

前言 本文是视频https://www.bilibili.com/video/BV1dp4y177L4的笔记。 OpenCV和Libtorch安装包:https://pan.baidu.com/s/1i3DqTcHFSC1rRDsIgYGCsQ?pwd8888 VS版本:2019 Opencv版本:3.4.1 Libtorch版本:2.0.1cu117 配置Open…

CUBLAS库入门教程(从环境配置讲起)

文章目录 前言一、搭建环境二、简单介绍三、 具体例子四、疑问 前言 CUBLAS库是NVIDIA CUDA用于线性代数计算的库。使用CUBLAS库的原因是我不想去直接写核函数。 (当然,你还是得学习核函数该怎么写。但是人家写好的肯定比我自己写的更准确!&…

利用MarkovJunior方法生成迷宫和图形的MATLAB演示[迷宫生成、贪吃蛇、地图生成、图案生成]

利用MarkovJunior方法生成迷宫和图形的MATLAB演示[迷宫生成、贪吃蛇、地图生成、图案生成] 0 前言1 介绍MarkovJunior2 迷宫生成2.1 深度优先迷宫生成2.2 广度优先迷宫生成 3 其它生成图案3.1 地牢地图3.2 贪吃蛇3.3 植物花 惯例声明:本人没有相关的工程应用经验&am…

Python爬虫抓取经过JS加密的API数据的实现步骤

随着互联网的快速发展,越来越多的网站和应用程序提供了API接口,方便开发者获取数据。然而,为了保护数据的安全性和防止漏洞,一些API接口采用了JS加密技术这种加密技术使得数据在传输过程中更加安全,但也给爬虫开发带来…

客路旅行(KLOOK)面试(部分)(未完全解析)

一面 用过Chatgpt的哪个版本,了解Chatgpt版本之间的差异吗 什么是优雅部署?newBing: 服务启动时,检查依赖的组件或容器是否就绪,如果不就绪,等待或重试,直到就绪后再注册到服务中心,对外提供服…

AcWing 844. 走迷宫 (每日一题)

给定一个 nm 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1表示不可通过的墙壁。 最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一…

WIFI模块的工作原理及AP模式和STA模式的区别

WiFi模块的运作原理: WiFi模块通常由两大核心组件构成:无线芯片和微处理器。无线芯片专注于处理无线信号的传送与接收,而微处理器则全面管理和调控WiFi模块的各项功能。数据传输过程中,无线芯片利用无线电波进行信号的交互。通过…

网络安全社区与资源分享: 推荐网络安全社区、论坛、博客、培训资源等,帮助从业者拓展人脉和知识。

第一章:引言 在当今数字化的世界中,网络安全问题变得愈发突出。随着各种新型威胁的涌现,网络安全从业者面临着持续不断的挑战。然而,正是因为这些挑战,网络安全社区应运而生,成为从业者们互相交流、学习和…

C语言常见字符串和内存函数详解

字符串和内存函数 1. 前言2. 求字符串长度2.1 strlen 3. 长度不受限制的字符串函数3.1 strcpy3.2 strcat3.3 strcmp 4. 长度受限制的字符串函数4.1 strncpy4.2 strncat4.3 strncmp 5. 字符串查找5.1 strstr5.2 strtok 6. 错误信息报告6.1 strerror 7. 字符操作函数7.1 字符分类…

windows使用vim编辑文本powershell

windows使用vim编辑文本 1、安装 chocolatey 包 以管理员身份打开 PowerShell 进行安装 Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(https://chocolatey.org/install.ps1))2、管理员身份打开 PowerShell 并使…

C++面试题(吴)-计算机网络部分(2)和常见设计模式

目录 1.网络部分 3.32 说说浏览器从输入 URL 到展现页面的全过程 3.33 简述 HTTP 和 HTTPS 的区别? 3.34 说说 HTTP 中的 referer 头的作用 3.35 说说 HTTP 的方法有哪些 3.36 简述 HTTP 1.0,1.1,2.0 的主要区别 3.37 说说 HTTP 常见的…

【笔记】PyCharm快捷键大全

PyCharm是一种Python集成开发环境(IDE),由JetBrains公司开发。它被认为是Python开发中最强大、最流行的IDE之一。PyCharm具有完整的Python开发工具链,包括先进的代码编辑器、代码分析工具、集成的调试器、版本控制系统集成、自动化…

打车系统网约车系统开发支持APP公众号H5小程序版本源码

一、操作流程 二、业务模式 三、用户端 用户注册登录:未注册的手机号将自动创建账号 通过好友的邀请链接进行注册,将会绑定上下级关系 也可以注册的时候输入好友的邀请码,也可以绑定关系 用户充值: 用户下单支付时,可以…