资源描述:
《定点数运算及其运算部件第三讲 浮点数运算及其运算部件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第一讲不同层次程序员看到的运算及ALU第二讲定点数运算及其运算部件第三讲浮点数运算及其运算部件Ch3:ArithmeticandLogicOperateandALU运算方法和运算部件第一讲:不同层次程序员看到的运算及ALU高级语言程序中涉及的运算(以C语言为例)整数算术运算、浮点数算术运算按位、关系、逻辑、移位、位扩展和位截断汇编语言中涉及到的运算(以MIPS为例)定点数运算浮点数运算基本运算部件ALU的设计人的行为靠什么来支配?脑-思维(判断)-控制计算机的工作靠什么来完成?CPU-运算-控制人的思维其本质是基于运算来完成的
2、:学习,搜索(记忆/存储),数学计算,比较,表达……C语言程序中涉及的运算(1)算术运算(最基本的运算)无符号数、带符号整数、浮点数的+、-、*、/运算(2)按位运算按位或:“
3、”按位与:“&”按位取反:“~”按位异或:“^”可用“&”实现“掩码”操作:y&0xFF00(3)关系和逻辑运算“‖”表示“OR”运算,“&&”表示“AND”运算“>”“<”“>=”“<=”例如,if((x>y)&&(i<100))then……“!”表示“NOT”运算C语言程序中涉及的运算(4)移位运算用途提取部分信息扩大或缩小数值的2、4、8…倍操作左
4、移(扩大):x<>k由x的类型确定是逻辑移位还是算术移位(I)无符号数:逻辑左移、逻辑右移左移:高位移出,低位补0。右移:低位移出,高位补0。(II)带符号整数:算术左移、算术右移左移:高位移出,低位补0。右移:低位移出,高位补符。若高位移出的是1,则溢出若移出的位不等于新的符号位则溢出。可能发生数据(精度)丢失可能发生数据(精度)丢失怎么知道数据类型呢?:靠汇编(机器)指令来区分例:某字长为8的机器中,x、y和z都是8位带符号数,已知x=-81,则y=x/2=?z=2x=?(81)two=0101000
5、1(-81)补=10101111/2:110101111-41精度丢失-40.5*2:10101111094溢出-162<-128C语言程序中涉及的运算(5)位扩展和位截断运算用途:类型转换时可能需要操作:没有专门运算符,根据类型转换前后数据长短来区分扩展:短转长无符号数:0扩展,前面补0带符号整数:符号扩展,前面补符截断:长转短强行将高位丢弃,故可能发生“溢出”例1(扩展操作):在大端机上输出si,usi,i,ui的十进制和十六进制值是什么?(假定short16位,int32位)shortsi=-32768;unsigneds
6、hortusi=si;inti=si;unsignedintui=usi;si=ui;si=-327688000usi=327688000符号扩展i=-32768FFFF80000扩展ui=3276800008000截断si=-327688000截断时发生了“溢出”,因为32768超过了16位补码能表示的最大值!如何实现高级语言源程序中的运算?将各类表达式转换成指令序列计算机执行指令来完成运算00000010001100100100000000100000datapathcontrol信号输入信息输入信息输出指令+数据inta,
7、b=5,c=-8;c=a+b为变量分配寄存器把变量按类型编码机器数放入寄存器按类型完成运算运算结果放入寄存器Add$t0,$s1,$s202324020H运算!17号寄存器S118号寄存器S2xx号寄存器8号寄存器t0…………abc高级语言程序中涉及的运算(以C语言为例)整数浮点数算术运算,按位、关系、逻辑、移位、位扩展和位截断汇编语言中涉及到的运算(以MIPS为例)数据存取涉及到的定点数运算算术运算带符号整数运算:取负/符号扩展/加/减/乘/除/算术移位无符号整数运算:0扩展/加/减/乘/除逻辑运算逻辑操作:与/或/非/…
8、移位操作:逻辑左移/逻辑右移涉及到的浮点数运算:加、减、乘、除(1)MIPS定点算术运算指令InstructionExampleMeaningCommentsaddadd$1,$2,$3$1=$2+$33operands;exceptionpossiblesubtractsub$1,$2,$3$1=$2–$33operands;exceptionpossibleaddimmediateaddi$1,$2,100$1=$2+100+constant;exceptionpossibleaddunsignedaddu$1,$2,$3$
9、1=$2+$33operands;noexceptionssubtractunsignedsubu$1,$2,$3$1=$2–$33operands;noexceptionsaddimm.unsign.addiu$1,$2,100$1=$2+100+consta