这部分内容比较简单,就是有几个符号不太好理解,与后续的控制指令关系密切,需要充分理解,最近状态不太好,希望慢慢调整回来,come back
数字逻辑电路基础
逻辑电路基础
基于0和1构造所有运算电路
⭐布尔代数:0/1代表逻辑值假/真
- 将命题逻辑问题化为代数问题
- 最基本的表示:与或非,真值表
⭐一位逻辑门电路
⭐n位逻辑门电路(按位运算)
⭐组合逻辑部件: - 组合逻辑电路/时序逻辑电路
- 功能部件
画出真值表→写出逻辑函数→确定电路组成
⭐多路选择器:一个输出端F,控制端S,两个输入端A/B
无符号数加法器
一位加法器(全加器)
两个加数A/B,一个进位Cin,向高位进位cout,输出本位F
{cout,F}=A+B+cin;//这种表示按照verilog语法
当A/B/cin中有奇数个1时,F为1,当有两个以上1时,cout为1
fully add(FA)
n位加法器
- n位无符号数加(无法判断溢出吧啦吧啦,就是简单的相加)
由n个全加器组成
所有的算术运算都基于全加器
- n位带标志加法器
想办法实现减法运算(判断溢出,取补码等等)
利用标志信息表示比较运算等等其他运算
[-y]补=~[y]补+1
在此基础上加入寄存器,移位器,控制逻辑,就能实现ALU,乘除运算和浮点运算。
ALU(只含整数加减运算和逻辑运算)
无符号整数加减,带符号整数加减,与或非等逻辑运算
核心为带标志加法器
输出有结果和标志信息,有操作控制端决定执行功能。
c表达式和逻辑电路
- c语言到逻辑电路的转换
高级语言→汇编语言:通过运算指令实现(媒介)
汇编语言→运算电路:对指令译码,根据指令译码结果控制电路实现。
- c语言中的各类运算
1 算术运算
2 按位运算,由x的类型确定是逻辑移位还是算术移位
判断溢出:
逻辑移位:高位移出为1,说明溢出
算数移位:新的符号位与原符号位不同
3 逻辑运算:区分与按位运算的符号区别
4 截断和扩展
整数加减运算
加减标志信息
需要解决的问题:利用符号位实现整数的比较大小
加/减运算部件不考虑运算的信息是带符号还是无符号,结果是否正确,就是简单的机械运算。
标志位会在标志寄存器中存储,用于转移指令和控制指令等等。
ZF:零标志,判断位串是否全0,全0则ZF值为1
OF:判断是否溢出,若A/B’(已经进行补码处理)同号但与sum不同号,则溢出
解释:假设为4位带符号运算
全正:溢出后符号位必为1
全负:溢出后符号位必为0
若一正一负:不可能溢出(范围不允许)
SF:sum符号
CF:进位/借位符号(这真的是困扰了我很久)xor cout sub
解释:加法计算时:为0是说明没有进位
减法运算时:为1时说明产生借位,同号可以比较,异号不能直接通过CF判断大小
加减法溢出公式及举例
判断是否溢出:
带符号溢出判断:OF=1
无符号减溢出:CF=1(有借位),通过CF判断大小