2.31~4.31

布尔代数和基本逻辑电路

布尔代数

关于0和1的一套数学运算体系起源于1850年前后英国数学家乔治·布尔的工作,因此称为布尔代数。 0和1分别代表逻辑值“假”和“真 通过逻辑关系可以构建基于0和1的布尔代数运算 最基本的运算有:与(AND)、或(OR)、非(NOT),运算符分别为“·”(“^”)、“+”(“v”)、“ ̄”(“﹁”)

一位逻辑门电路

可通过逻辑门电路来实现逻辑运算*三种基本门电路:与门、或门、非门。 其他门电路可以由三种基本门电路组合形成(如异或门电路)。

n位逻辑门电路

对于n位逻辑运算,只要重复使用n个相同的门电路即可 例如,若A=An-1An-2…A1A0,B=Bn-1Bn-2…B1B0,则与运算F=A·B,实际上是按位想与,即Fi=Ai·Bi(0<=i<=n-1) 假定逻辑值位数为n,则按位与、按或与、按位取反、按位异或的逻辑符号如图所示。

组合逻辑部件

根据电路是否具有存储功能,讲逻辑电路划分为两种类型 组合逻辑电路:没有存储功能,其输出仅依赖于当前输入。 时序逻辑电路:具有存储功能,其输出不仅依赖于当前输入,还依赖于存储单元的当前状态。 可以利用基本逻辑门电路构成一些具有特定功能的组合逻辑部件(功能部件) 如译码器、编码器、多路选择器、加法器等。 实现一个功能部件的过程 用一个真值表描述功能部件的输入和输出之间的关系。 根据真值表确定逻辑表达式。 根据逻辑表达式实现逻辑电路。

多路选择器

最简单的多路选择器(MUX)是二路选择器 有两个输入端A和B,一个输出端F,并有一个控制端S,其功能是:当S为0时,F=A;当S为1时,F=B。 k路选择器应有k路输入,因而控制端S的位数应是【log2k】 例如,三路或四路选择器,S有两位;5~8路选择器,S有3位。


无符号数加法器

一位加法器(全加器)

一位加法器称为全加器 两个加数称为A和B,低位进位为Cin,和为F,向高位的进位为Cout。

化简后,逻辑表达式如下

n位加法器

n位加法器可用n个全加法器实现

n位带标志加法器

n位加法器无法用于两个n位带符号整数(补码)相加,无法判断是否溢出 程序中经常需要比较大小,通过(在加法器中)做减法得到的标志信息来判断。

整数加减运算和ALU

n位整数加/减运算器

算术逻辑部件(ALU)

进行基本算术运算与逻辑运算 无符号整数加、减。 带符号整数加、减。 与、或、非、异或等逻辑运算。 核心电路是带标志加法器 输出除和/差等,还有标志信息 有一个操作控制端(ALUop),用来决定ALU所执行的处理功能。ALUop的位数k决定了操作的种类,例如,当位数k为3时,ALU最多只有2^3=8种操作。


从C语言表达式到逻辑电路

C语言支持的基本数据类型

从C表达式到运算类指令

C语言程序中的基本数据类型、基本运算类型

基本数据类型

  • 无符号数(二进制位串)、带符号整数(补码)

  • 浮点数(IEEE 754标准)

  • 位串、字符(串)(ASCII码)、

基本运算类型

  • 算数(+ - * / % > < >= <= == !=)

  • 按位(| & ~ ^)

  • 逻辑(|| && !)

  • 移位(<< >>)

  • 扩展和截断

从运算类指令到运算电路

计算机如何实现高级语言程序中的运算

从运算类指令到运算电路

  • 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]送整数加减器中运算。

数据的运算

高级语言程序中涉及的运算(以C语言为例) 整数算术运算、浮点数算术运算 按位、逻辑、移位、位扩展和位截断等运算 指令集中涉及到的运算 涉及到的定点数运算

  • 算术运算

    • 带符号整数:取负/符号扩展/加/减/乘/除/算术移位

    • 无符号整数:0扩展/加/减/乘/除/逻辑左移/逻辑右移

  • 逻辑运算

    • 逻辑操作:与/或/非/…

涉及到的浮点数运算:加、减。乘、除 指令中的运算操作在运算电路中进行 基本运算部件ALU、通用寄存器组,以及其他部件


C语言中的各类运算

C语言程序中涉及的运算

算术运算(最基本的运算) 无符号数、带符号整数、浮点数的加减乘除求余等

按位运算 用途

  • 对位串实现“掩码”(mask)操作或相应的其他处理(主要用于对多媒体数据或状态/控制信息进行处理)

操作

  • 按位或:“|”

  • 按位与:“&”

  • 按位取反:“~”

  • 按位异或:“^”

如何从数据y中提取低位字节,并使高字节为0? 可用“&”实现掩码操作:y & 0x00FF 例如,当y=0x0B2C时,得到结果为:0x002C

移位运算 用途

  • 提取部分信息

  • 扩大或缩小2、4、8…倍

操作

  • 左移:x<<k;右移:x>>k

  • 从运算符无法区分逻辑位移还是算术位移,由x的类型确定

  • 若x为无符号数:逻辑左(右)移 高(低)位移出,低(高)位补0,可能溢出!

  • 若x为带符号整数;算术左移、算术右移 左移:高位移出,低位补0.可能溢出!

逻辑运算 用途

  • 用于关系表达式的运算 例如,if(x>y and i<100)then ……中的”and“运算

操作

  • ”||“表示”OR“运算

  • ”&&“表示”AND“运算 例如,if((x>y)&&(i<100))then……

  • ”!“表示”NOT“运算

与按位运算的区别

  • 符号表示不同:& ~ &&;| ~||;……

  • 运算过程不同:按位 ~ 整体

  • 结果类型不同:位串 ~ 逻辑值

位扩展和位截断运算 用途

  • 类型转换时可能需要数据扩展或截断

操作

  • 没有专门操作运算符,根据类型转换前、后数据长短确定是扩展还是截断

  • 扩展:短转长 无符号数:0扩展(前面补0) 带符号整数:符号扩展(前面补符)

  • 截断:长转短 强行将高位丢弃,故可能发生”溢出“


加减运算生成的标志信息

整数加、减运算

C语言程序中的整数有 带符号整数,如char、short、int、long型等 无符号整数,如unsigned char、unsigned short、unsigned等 指针、地位等通常被说明为无符号整数、因而在进行指针或地址运算时,需要进行无符号整数的加、减运算 无符号整数和带符号整数的加、减运算电路完全一样,这个运算电路称为整数加减运算部件,基于带标志加法器实现 计算机中的加法器,因为只有n位,所以是一种模2^n运算系统!


加减运算公式及举例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值