持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
算术逻辑部件(ALU)
进行基本算术运算与逻辑运算
- 无符号整数加,减
- 带符号整数加,减
- 与、或、非、异或等逻辑运算
核心电路是带标志加法器
输出除和/差等,还有标志信息
有一个操作控制端( ALUop ) ,用来决定ALU所执行的处理功能。ALUop的位数k决定了操作的种类,例如,当位数k为3时,ALU最多只有23=8种操作。
第二讲 从c表达式到逻辑电路
先从c表达式到运算类指令
对于y=(x>>2)+k
- 先转换为指令序列,通过执行运算类指令来实现,下图为指令序列
2. 计算机直接执行指令来完成运算
控制器对指令进行译码,产生控制信号送运算电路
- 操作数在运算电路中运算
移位器和整数加减运算器都是由逻辑门电路构成的!
数据的运算
第三讲 C语言中的各类运算
-81的机器数为10101111
分析:-81=-1010001B,为负号,即在前面加上1.其余1->0,0->1,最后一位加上1就变为10101111
short si= -32768;
unsigned short usi = si;
int i = si;
unsingned ui = usi ;
unsingned的意思是无符号整数
在大端机上输出si, usi, i, ui的十进制和十六进制值是什么?
分析一把:
十进制 十六进制
si -32768 8000
usi 32768 8000
i -32768 FFFF 8000
ui 32768 0000 8000
首先,short不用符号表示。那么si的十六进制直接为8000。因此转为无符号整数也为8000.但是int有符号表示,因此i的十六进制为FFFF 8000,其中FFFF表示为符号。ui为无符号整数,所以前面四位为0。
第四讲 整数加减运算
无符号整数
- 指针,地址
带符号整数
无符号整数和带符号整数的加、减运算电路完全一样,这个运算电路称为整数加减运算部件,基于带标志加法器实现
计算机中的加法器,因为只有n位,所以是一种模2n运算系统!
重要认识
- 计算机中所有运算都基于加法器实现
- 加法器不知道所运算的是带符号数还是无符号数。
- 加法器不判定对错,总是取低n位作为结果,并生成标志信息。
条件标志位
A+(-)B+(-)Cin +-有sub决定。输出 Sum 和Cout
OF:若A与B’同号但与Sum不同号,则1;否则0。
SF : sum符号
ZF:如Sum为0,则1,否则0。
CF : Cout 亦或sub
整数加法举例
做加法时,主要判断是否溢出
无符号加溢出条件:CF=1
带符号加溢出条件:OF=1,即两个相同符号的相加,结果与他们不同号,则溢出
例子:n=8,107+46=![image-20220628092309782]()
整数减法举例
带符号:-7-6=?
对于7的二进制为0111的补码为1001,
对于6的二进制为0110的补码为1010
因此结果为0011=3,结果为正数,因此溢出
带符号溢出
(1)最高位和次高位的进位不同
(2)和的符号位和加数的符号位不同
无符号:-3-5=-8;13-5=8
无符号减溢出∶差为负数,即借位CF=1
做减法以比较大小,规则:
Unsigned: CF=0时,大于
Signed : OF=SF时,大于