一、n位整数加减运算器
利用带标志加法器,可构造整数加/减运算器,进行运算:
无符号整数加。无符号整数减
带符号整数加、带符号整数减
(当Sub为1时,做减法。当Sub为0时,做加法)
在整数加/减运算部件基础上,加上寄存器、移位器以及控制逻辑,就可实现ALU、乘/除运算以及浮点运算
二、ALU(算术逻辑部件) 进行基本算术运算与逻辑运算
无符号整数加减
有符号整数加减
与或非异或等运算
(注意没有乘除)
操作控制端(ALUop),用来决定所执行的处理功能
三、从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]送整数加减器中运算
移位器和整数加减运算器都是由逻辑门电路构成的
四、C语言的运算
包括:算术运算、按位运算、移位运算、逻辑运算、位扩展位截断
按位运算
用途:•对位串实现“掩码”(mask)操作或相应的其他处理
(主要用于对多媒体数据或状态/控制信息进行处理)
位扩展和位截断运算:
用途:类型转换时可能需要数据扩展或截 断
没有专门操作运算符,根据类型转换前、后数据长短确定是扩展还是截断
扩展:短转长无符号数:0扩展(前面补0)带符号整数:符号扩展(前面补符)
截断:长转短强行将高位丢弃,故可能发生“溢出”
参考:南京大学计算机系统基础(一)