程序的表示、转换与链接:三、运算电路基础

目录

  • 一、整数加减运算理论
  • 二、数字逻辑电路基础和整数加减运算部件
  • 三、如何启用逻辑电路:从C表达式到逻辑电路
  • 四、C语言中的各类运算

一、整数加减运算理论

  1. 整数加减运算
    • 无符号整数加减运算:指针、地址等通常被说明为无符号整数,因而在进行指针或地址运算时,需要进行无符号整数的加减运算
    • 整数加减运算:无符号整数和带符号整数的加减运算电路一样,这个运算电路称为整数加减运算部件,基于带标志加法器实现。又由计算机中的加法器只有n位,因此是一种模 2 n 2^n 2n运算系统
  2. 整数加减法溢出判断程序/思路
    • 无符号数相加
      • 溢出条件:红框内情况为溢出
        请添加图片描述
      • 判断程序
      int uadd_ok(unsigned x, unsigned y){unsigned sum = x + y;return sum >= x;
      }
      
    • 带符号数相加
      • 溢出条件:
        请添加图片描述
      • 判断程序
      int tadd_ok(int x, int y){int sum = x + y;int neg_over = x<0 && y<0 && sum>=0;int pos_over = x>=0 && y>=0 && sum<0;return !neg_over && !pos_over;
      }
      
    • 带符号数相减
      • 判断程序
      int tsub_ok(int x, int y){return tadd_ok(x, -y);
      }
      

二、数字逻辑电路基础和整数加减运算部件

  1. 布尔代数:用0和1代表假和真,通过逻辑关系构建基于0和1的布尔代数运算,最基本的逻辑运算有与、或、非(如下图所示),任何一种逻辑表达式都可写成这三种基本运算的逻辑组合,如异或(XOR)
    请添加图片描述
  2. 一位/n位逻辑门电路
    • 逻辑门电路:可通过逻辑门电路来实现逻辑运算
      • 三种基本门电路:与门、或门、非门
      • 其他门电路可由三种基本门电路组合形成(如异或门电路)
    • n位逻辑门电路:对于n位逻辑运算,只需重复使用n个相同的门电路即可
      • 如假设 A = A n − 1 A n − 2 . . . A 1 A 0 , B = B n − 1 B n − 2 . . . B 1 B 0 A=A_{n-1}A_{n-2}...A_1A_0, B=B_{n-1}B_{n-2}...B_1B_0 A=An1An2...A1A0,B=Bn1Bn2...B1B0,则与运算 F = A ⋅ B F=A·B F=AB实际上是按位相与,即 F i = A i ⋅ B i ( 0 ≤ i ≤ n − 1 ) F_i=A_i·B_i (0\le i\le n-1) Fi=AiBi(0in1)
      • 假设逻辑值位数为n,则按位与、按位或、按位取反、按位异或的逻辑符号如下图所示:
        请添加图片描述
  3. 组合逻辑部件
    • 逻辑电路的两种类型:
      • 组合逻辑电路:没有存储功能,其输出仅依赖于当前输入
      • 时序逻辑电路:有存储功能,其输出不仅依赖于当前输入,还依赖于存储单元的当前状态
    • 功能部件:即具有特定功能的组合逻辑部件,如译码器、编码器、多路选择器、加法器等,可利用基本逻辑门电路构成
    • 实现一个功能部件的过程:1)用一个真值表描述功能部件的输入和输出之间的关系;2)根据真值表确定逻辑表达式;3)根据逻辑表达式实现逻辑电路
    • 多路选择器MUX
      • 二路选择器:最简单的多路选择器。有两个输入端A、B,一个输出端F,一个控制端S。当S为0时,F=A;当S为1时,F=B
      • k路选择器:有k路输入,因而控制端S的位数应为 ⌈ l o g 2 k ⌉ \lceil log_2k\rceil log2k。如三路/四路选择器,S有两位;5~8路选择器,S有3位
        请添加图片描述
  4. ALU的核心电路:带标志加法器
    • 一位加法器(全加器)
      • 规则:有两个加数A、B,低位进位为 C i n C_{in} Cin,本位和为F,向高位的进位为 C o u t C_{out} Cout
      • 全加器真值表:
        请添加图片描述
      • 逻辑表达式:
        请添加图片描述
      • 全加器逻辑电路
        请添加图片描述
      • 全加器符号:
        请添加图片描述
    • n位加法器(无符号整数加)
      • 规则:n位加法器可用n个全加器实现
      • 符号
        请添加图片描述
      • 逻辑电路
        请添加图片描述
      • 重要认识:
        • 加法是由逻辑部件实现的(如上面全加器的逻辑电路是由基本的与或非门实现的)
        • 其他所有算术运算(乘除法等)部件都基于加法器和(辅助的)逻辑运算实现
        • 因此,所有算术运算是基于0和1,以及逻辑运算实现的
    • n位带标志加法器
      • 条件标志:零标志ZF、溢出标志OF、进/借位标志CF、符号标志SF称为条件标志。条件标志在运算电路中产生,被记录到专门的寄存器(程序/状态字寄存器或标志寄存器)中,如IA-32中的EFLAGS寄存器。条件标志的存在意义就是在分支指令(条件转移指令)中被用作是否执行转移的条件
      • 标志规则(OF和CF)
        请添加图片描述
      • 符号:
        请添加图片描述
      • 逻辑电路
        请添加图片描述
    • n位整数加/减运算器
      • 补码加减公式推导:
        请添加图片描述
        其中:
        请添加图片描述
      • 逻辑电路
        请添加图片描述
        • 如上图,加减法运算统一采用加法来处理,实现减法的主要操作在于求 [ − B ] 补 [-B]_补 [B] [ A − B ] 补 = [ A ] 补 + [ − B ] 补 , [ − B ] 补 = B ˉ + 1 [A-B]_补=[A]_补+[-B]_补, [-B]_补=\bar B+1 [AB]=[A]+[B],[B]=Bˉ+1)。当Sub为1时做减法,当Sub为0时做加法
        • 加法器不知道所运算的是带符号数还是无符号数
        • 加法器不判定对错,总是取低n位为结果,并生成标志信息
  5. 算术逻辑部件ALU
    • 功能:进行基本算术运算和逻辑运算(无符号整数加减、带符号整数加减、与或非异或等逻辑运算)
    • 核心电路:带标志加法器。输出和/差等结果,以及标志信息
    • 有一个操作控制端ALUop:用来决定ALU所执行的处理功能。ALUop的位数k决定了操作的种类,如当k=3时,ALU最多有8种操作
    • ALU符号:
      请添加图片描述

三、如何启用逻辑电路:从C表达式到逻辑电路

由上可知,计算机中所有运算都是由相应的运算电路完成的,而这些运算电路是由基本的逻辑门电路实现的。

那么计算机是如何知道在运算电路中该执行什么操作?该对什么样的操作数进行运算的呢?

本节主要介绍高级语言程序中的表达式、运算类指令和运算电路之间的关系

  1. C语言支持的基本数据类型
    请添加图片描述
  2. C语言支持的基本运算类型
    • 算术:+、-、*、/、%、>、<、>=、<=、==、!=
    • 按位:|、&、~、^
    • 逻辑:||、&&、!
    • 移位:<<、>>
    • 扩展和截断
  3. 计算机如何实现高级语言程序(如C)中的运算(以y=(x>>2)+k为例):
    • 【C->指令】将各类表达式编译(转换)为指令序列:将y=(x>>2)+k转化为指令序列
      • sarw $2, %ax;(x>>2)
      • addw %bx, %ax;(x>>2+k)
    • 【指令->电路】计算机直接执行指令来完成运算:控制器对指令进行译码,产生控制信号送运算电路
    • 操作数在运算电路中运算(其中,移位器和整数加减器都是由逻辑门电路构成的)
      • sarw $2, %ax:将操作数“2”和“R[ax]”送移位器运算
      • addw %bx, %ax:将“R[ax]”和“R[bx]”送整数加减器中运算
  4. 将上述实现运算过程概括一下:
    • 高级语言程序(如C)中的运算:整数/浮点数算术运算、按位/逻辑/移位/位扩展/位截断等运算
    • 指令集中的运算:
      • 定点数运算:算术运算(带符号和无符号整数)和逻辑运算(与或非等逻辑操作)
      • 浮点数运算:浮点数的加减乘除
    • 指令中的运算在运算电路中运行:ALU、通用寄存器组、其他部件

四、C语言中的各类运算

上面谈到高级语言程序中的各类运算,会被编译器转换为相应的运算指令,程序运行时,CPU执行这些指令,控制操作数在运算电路中被处理。

本节讲C语言程序中涉及的运算,如算术运算、按位运算、逻辑运算、移位运算等

  1. 算术运算:无符号整数、带符号整数、浮点数的加减乘除运算等
  2. 按位运算
    • 用途:对位串实现“掩码”或其他操作(主要用于对多媒体数据或状态/控制信息进行处理)
    • 操作:按位或“|”、按位与“&”、按位取反“~”、按位异或“^”

如若实现从数据y中提取低位字节,并使高位字节为0的话,可用“&”实现:作“y&0x00FF”。

  1. 移位运算
    • 用途:提取部分信息、扩大或缩小2/4/8…倍
    • 操作:左移“x<<k”、右移“x>>k”(若x为无符号数则进行逻辑左/右移;若x为带符号整数则进行算术左/右移)
      请添加图片描述
  2. 逻辑运算
    • 用途:用于关系表达式的运算。如if (x>y and i<100) then...中的and运算
    • 操作:OR运算“||”、AND运算“&&”、NOT运算“!”
    • 逻辑运算与按位运算的差别:符号表示不同(&& vs &)、运算过程不同(整体vs按位)、结果类型不同(逻辑值vs位串)

逻辑值即真假值

  1. 位扩展和位截断运算
    • 用途:类型转换时可能需要数据扩展或截断
    • 操作:
      • 没有专门操作运算符,根据类型转换前后数据长短确定是扩展还是截断
      • 扩展:短->长。无符号数为0扩展、带符号整数是符号扩展
      • 截断:长->短。强行将高位丢弃,可能发生“溢出”
        请添加图片描述
        请添加图片描述

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

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

相关文章

pycharm远程连接server

1.工具–部署–配置 2.部署完成后&#xff0c;将现有的项目的解释器设置为ssh 解释器。实现在远端开发 解释器可以使用/usr/bin/python3

Opencv_10_自带颜色表操作

void color_style(Mat& image); Opencv_10_自带颜色表操作&#xff1a; void ColorInvert::color_style(Mat& image) { int colormap[] { COLORMAP_AUTUMN, COLORMAP_BONE , COLORMAP_JET , COLORMAP_WINTER, COLORMAP_RAINBOW , COLOR…

Ts支持哪些类型和类型运算(下)

目录 1、条件判断 &#xff08;extends &#xff1f;&#xff09; 2、推导 infer 3、联合 | 4、交叉 & 5、映射类型 1、条件判断 &#xff08;extends &#xff1f;&#xff09; ts里的条件判断&#xff0c;语法为 T extends XXX ? true : false &#xff0c;叫做…

【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件 | Check Box的使用及说明 文章编号&#xff…

智能时代 | 合合信息Embedding模型荣获C-MTEB榜单第一

目录 前言 1. MTEB与C-MTEB 2. acge模型的优势 3. Embedding模型应用 4. 大模型发展的关键技术 结语 前言 随着人工智能的不断发展&#xff0c;大语言模型吸引着社会各界的广泛关注&#xff0c;支撑模型应用落地的Embedding模型成为业内的焦点&#xff0c;大模型的发展给…

解放生产力:项目管理软件的神奇作用大揭秘!

对于刚刚进入项目管理领域的新人首先要了解的概念就是项目管理软件是什么&#xff1f;项目管理软件的作用&#xff0c;如今的项目管理软件已经非常成熟&#xff0c;融合了一整套的项目管理理论&#xff0c;在管理项目进度、管理工时、团队协同方面发挥着重要作用。 一、项目管理…

vue 关键字变红

1.html <div v-html"replaceKeywordColor(item.title)" ></div> 2.js //value为搜索框内绑定的值 replaceKeywordColor(val) {if (val?.includes(this.value) && this.value ! ) {return val.replace(this.value,<font color"red&…

游戏黑灰产识别和溯源取证

参考&#xff1a;游戏黑灰产识别和溯源取证 1. 游戏中的黑灰产 1. 黑灰产简介 黑色产业&#xff1a;从事具有违法性活动且以此来牟取利润的产业&#xff1b; 灰色产业&#xff1a;不明显触犯法律和违背道德&#xff0c;游走于法律和道德边缘&#xff0c;以打擦边球的方式为“…

【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 | 再谈构造函数:初始化列表,隐式类型转换,缺省值)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 取地址及const取地址操作符重载 再谈构造函数 初始化列表 隐式类型转换 explicit关键字 成员变量缺省值 结语 前言 本篇主要内容&#xff1a;类的六个默认成员函数中…

Stable Diffusion 模型分享:_CHEYENNE_(欧美漫画)CHEYENNE_v16.safetensors

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八下载地址模型介绍<

吉林省教育学院学报杂志社吉林省教育学院学报编辑部2024年第3期目录

特稿《吉林省教育学院学报》投稿&#xff1a;cn7kantougao163.com 吉林省2023年初中毕业学业水平考试评价与分析报告 Junior High School Teaching Research and Training Department, Jilin Provincial Institute of Education; 1-25 基于吉林省图书馆专利数据资源的吉…

刷题训练之二分查找

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握二分查找算法 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

解决“找不到MSVCP120.dll”或“MSVCP120.dll丢失”的错误方法

在计算机使用过程中&#xff0c;遇到诸如“找不到MSVCP120.dll”或“MSVCP120.dll丢失”的错误提示并不罕见。这类问题往往会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。本文旨在详细阐述MSVCP120.dll文件的重要性、其丢失的可能原因&#xff0c;以及解决方法&a…

C++ //练习 12.32 重写TextQuery和QueryResult类,用StrBlob代替vector<string>保存输入文件。

C Primer&#xff08;第5版&#xff09; 练习 12.32 练习 12.32 重写TextQuery和QueryResult类&#xff0c;用StrBlob代替vector保存输入文件。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*****************************…

Jammy@Jetson Orin - Tensorflow Keras Get Started: 000 setup for tutorial

JammyJetson Orin - Tensorflow & Keras Get Started: 000 setup for tutorial 1. 源由2. 搭建环境2.1 安装IDE环境2.2 安装numpy2.3 安装keras2.4 安装JAX2.5 安装tensorflow2.6 安装PyTorch2.7 安装nbdiff 3. 测试DEMO3.1 numpy版本兼容问题3.2 karas API - model.compil…

STC15L2K60S2-28I-LQFP44 单片机芯片 STC宏晶

STC15L2K60S2-28I-LQFP44 规格信息&#xff1a; 产品类型STC(宏晶) UART/USART2 额定特性- SPI1 USB Device0 USB Host/OTG0 PWM3 I2C&#xff08;SMBUS/PMBUS&#xff09;0 LCD0 工作电压2.4V ~ 3.6V EEPROM 尺度1KB Ethernet0 A/D8x10bit CAN0 D/A3x10bit CPU…

【VI/VIM】基本操作备忘录

简介 新建/打开文件 工作模式 常用命令 补全命令 命令模式输入&#xff1a;ctrl p 移动命令 文本选中 撤销、删除 复制粘贴 替换 缩排 查找 替换 插入 分屏 练习

Spectre-v2 以及 Linux Retpoline技术简介

文章目录 前言一、Executive Summary1.1 Spectre-v2: Branch Predictor Poisoning1.2 Mitigating Spectre-v2 with Retpolines1.3 Retpoline Concept 二、BackgroundExploit Composition 三、(Un-)Directing Speculative Execution四、Construction (x86)4.1 Speculation Barri…

Linux文件权限核心知识

1.1 权限概念 Linux 里面不同 用户 对不同 文件、目录、用户 等对象的控制能力。 1.2 权限属性 ##创建文件 [rootoldboyedu ~]# touch oldboy.txt [rootoldboyedu ~]# ls -l oldboy.txt -rw-r--r-- 1 root root 14 9月 26 10:22 oldboy.txt ##创建目录 [rootoldboyedu ~]# mk…

项目上线流程(保姆级教学)

01&#xff1a;注册阿里云账户 02&#xff1a;登录阿里云 03&#xff1a;在桌面新建记事本保存个人账号密码等信息 04&#xff1a;完成重置密码 05&#xff1a;安装宝塔面板 命令行 yum install -y wget && wget -O install.sh http://download.bt.cn/install/instal…