第3章 运算方法和运算部件_第1页
第3章 运算方法和运算部件_第2页
第3章 运算方法和运算部件_第3页
第3章 运算方法和运算部件_第4页
第3章 运算方法和运算部件_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 Ch3: Arithmetic and Logic Operate and ALU运算方法和运算部件运算方法和运算部件第一讲第一讲 不同层次程序员看到的运算及不同层次程序员看到的运算及ALUALU第二讲第二讲 定点数运算及其运算部件定点数运算及其运算部件第三讲第三讲 浮点数运算及其运算部件浮点数运算及其运算部件2022-3-272第一讲:第一讲:不同层次程序员看到的运算及不同层次程序员看到的运算及ALUALU主主 要要 内内 容容u高级语言程序中涉及的运算(以高级语言程序中涉及的运算(以C语言为例)语言为例) 整数算术运算、浮点数算术运算整数算术运算、浮点数算术运算 按位、逻辑、移位、位扩展

2、和位截断按位、逻辑、移位、位扩展和位截断u指令集中涉及到的运算(指令集中涉及到的运算( 以以MIPS为例为例 ) 涉及到的定点数运算涉及到的定点数运算- 算术运算算术运算 带符号整数运算:带符号整数运算:取负取负 / 符号扩展符号扩展 / 加加 / 减减 / 乘乘 / 除除 / 算术移位算术移位 无符号整数运算:无符号整数运算:0扩展扩展 / 加加 / 减减 / 乘乘 / 除除 - 逻辑运算逻辑运算 逻辑操作:逻辑操作:与与 / 或或 / 非非 / 移位操作:移位操作:逻辑左移逻辑左移 / 逻辑右移逻辑右移 涉及到的浮点数运算:加、减、乘、除涉及到的浮点数运算:加、减、乘、除u基本运算部件基本

3、运算部件ALU的设计的设计为什么房子里要有厨为什么房子里要有厨房、卫生间、卧室?房、卫生间、卧室?CPUCPU中需提供哪些运中需提供哪些运算部件?算部件?WhyWhy?人的需要人的需要! ! 程序的需要!程序的需要!我们从程序对运算的需求我们从程序对运算的需求开始分析。开始分析。浮点数有没有移位操作浮点数有没有移位操作和扩展操作?为什么?和扩展操作?为什么?2022-3-273C语言程序中涉及的运算语言程序中涉及的运算u算术运算(最基本的运算)算术运算(最基本的运算) 无符号数、带符号整数、浮点数的无符号数、带符号整数、浮点数的+、-、*、/ 运算等运算等u按位运算按位运算 用途用途-对对位串

4、位串实现实现“掩码掩码”(mask)操作或相应的其他处理)操作或相应的其他处理(主要用于对(主要用于对多媒体数据或状态多媒体数据或状态/控制信息控制信息进行处理)进行处理) 操作操作-按位或:按位或:“|” -按位与:按位与:“&”-按位取反:按位取反:“”-按位异或:按位异或:“”问题:如何从问题:如何从16位采样数据位采样数据y中提取高位字节,并使低字节为中提取高位字节,并使低字节为0?可用可用“&”实现实现“掩码掩码”操作:操作:y & 0 xFF00例如,当例如,当y=0 x2C0B时,得到结果为:时,得到结果为:0 x2C002022-3-274C语言程序中涉

5、及的运算语言程序中涉及的运算u逻辑运算逻辑运算 用途用途-用于关系表达式的运算用于关系表达式的运算例如,例如,if (xy and iy) & (i100) then -“!”表示表示“NOT”运算运算 与按位运算的差别与按位运算的差别-符号表示不同:符号表示不同:& & ;| ; -运算过程不同:运算过程不同:按位按位 整体整体-结果类型不同:结果类型不同:位串位串 逻辑值逻辑值2022-3-275C语言程序中涉及的运算语言程序中涉及的运算u移位运算移位运算 用途用途-提取部分信息提取部分信息-扩大或缩小数值的扩大或缩小数值的2、4、8倍倍 操作操作-左移左移::xk

6、-不区分是逻辑移位还是算术移位,由不区分是逻辑移位还是算术移位,由x的类型确定的类型确定-无符号数:逻辑左移、逻辑右移无符号数:逻辑左移、逻辑右移高(低)位移出,低(高)位补高(低)位移出,低(高)位补0,可能溢出!,可能溢出!问题:何时可能发生溢出?如何判断溢出?问题:何时可能发生溢出?如何判断溢出? 若高位移出的是若高位移出的是1,则左移时发生溢出,则左移时发生溢出-带符号整数:算术左移、算术右移带符号整数:算术左移、算术右移左移:高位移出,低位补左移:高位移出,低位补0。可能溢出!。可能溢出! 溢出判断:溢出判断:若移出的位不等于新的符号位,则溢出。若移出的位不等于新的符号位,则溢出。右

7、移:低位移出,高位补符,可能发生有效数据丢失。右移:低位移出,高位补符,可能发生有效数据丢失。如何从如何从1616位采样数据位采样数据y y中提取高位字节?中提取高位字节?某字长为某字长为8 8的机器中,的机器中,x x、y y和和z z都是都是8 8位带符号位带符号整数,已知整数,已知x=-81x=-81,则,则y=x/2=y=x/2=?z=2x=z=2x=?(y8) 送送8位寄存器位寄存器x补补=1 0101111y= 40? z= 162 ? x思考:因为当带符号整数不能整除2k时右移的结果不对,编译器该如何处理?2022-3-276C语言程序中涉及的运算语言程序中涉及的运算u位扩展和位

8、截断运算位扩展和位截断运算 用途用途-类型转换时可能需要数据扩展或截断类型转换时可能需要数据扩展或截断 操作操作-没有专门操作运算符,根据类型转换前没有专门操作运算符,根据类型转换前后数据长短确定是扩展还是截断后数据长短确定是扩展还是截断-扩展扩展:短转长短转长 无符号数:无符号数:0扩展,前面补扩展,前面补0 带符号整数:符号扩展,前面补符带符号整数:符号扩展,前面补符-截断:长转短截断:长转短 强行将高位丢弃,故可能发生强行将高位丢弃,故可能发生“溢出溢出”例例1(扩展操作):在大端机上输出(扩展操作):在大端机上输出si, usi, i, ui的十进制和十六进制值是什么?的十进制和十六进

9、制值是什么?short si = -32768;unsigned short usi = si;int i = si; unsingned ui = usi ;si = -32768 80 00usi = 32768 80 00i = -32768 FF FF 80 00 ui = 32768 00 00 80 00例例2(截断操作):(截断操作):i和和j是否相等?是否相等?int i = 32768;short si = (short) i;int j = si;不相等!不相等!i = 32768 00 00 80 00si = -32768 80 00 j = -32768 FF FF

10、80 00原因:对原因:对i i截断时发生截断时发生了了“溢出溢出”,即:,即:32768截断为截断为16位数时位数时,因其超出,因其超出16位能表位能表示的最大值,故无法示的最大值,故无法截断为正确的截断为正确的16位数位数!2022-3-277如何实现高级语言源程序中的运算?如何实现高级语言源程序中的运算?u总结:总结:C语言程序中的基本数据类型及其基本运算类型语言程序中的基本数据类型及其基本运算类型 基本数据类型基本数据类型-无符号数、带符号整数、浮点数、位串、字符(串)无符号数、带符号整数、浮点数、位串、字符(串) 基本运算类型基本运算类型-算术、按位、逻辑、移位、扩展和截断、匹配算术

11、、按位、逻辑、移位、扩展和截断、匹配u计算机如何实现高级语言程序中的运算?计算机如何实现高级语言程序中的运算? 将各类表达式编译(转换)为指令序列将各类表达式编译(转换)为指令序列 计算机直接执行指令来完成运算计算机直接执行指令来完成运算例:例:C语言赋值语句语言赋值语句“f = (g+h) (i+j);”中变量中变量i、j、f、g、h由编译器分别由编译器分别分配给分配给MIPS寄存器寄存器$t0$t4。寄存器。寄存器$t0$t7的编号对应的编号对应815,上述程序段对,上述程序段对应的应的MIPS机器代码和汇编表示(机器代码和汇编表示(#后为注释)如下:后为注释)如下:000000 0101

12、1 01100 01101 00000 100000 add $t5, $t3, $t4 # g+h000000 01000 01001 01110 00000 100000 add $t6, $t0, $t1 # i+j000000 01101 01110 01010 00000 100010 sub $t2, $t5, $t6 # f =(g+h)(i+j)下面以下面以MIPSMIPS为例,看指令中会提供哪些运算?能否完全支持高级语言需求?为例,看指令中会提供哪些运算?能否完全支持高级语言需求?2022-3-278MIPS定点算术运算指令定点算术运算指令InstructionExample

13、MeaningCommentsadd add $1,$2,$3$1 = $2 + $33 operands; exception possiblesubtractsub $1,$2,$3$1 = $2 $33 operands; exception possibleadd immediateaddi $1,$2,100$1 = $2 + 100+ constant; exception possibleadd unsignedaddu $1,$2,$3$1 = $2 + $33 operands; no exceptionssubtract unsigned subu $1,$2,$3$1 =

14、 $2 $33 operands; no exceptionsadd imm. unsign. addiu $1,$2,100 $1 = $2 + 100+ constant; no exceptionsmultiply mult $2,$3Hi, Lo = $2 x $3 64-bit signed productmultiply unsigned multu$2,$3Hi, Lo = $2 x $3 64-bit unsigned productdivide div $2,$3Lo = $2 $3,Lo = quotient, Hi = remainder Hi = $2 mod $3 d

15、ivide unsigned divu $2,$3Lo = $2 $3,Unsigned quotient & remainder Hi = $2 mod $3涉及到的操作数:涉及到的操作数:32/16位位 无符号数,无符号数, 32/16位带符号数带符号数涉及到的操作:涉及到的操作: (带符号数(带符号数 / 无符号数)加无符号数)加 / 减减 / 乘乘 / 除除问题:问题:IA-32指令如何区分无符号数加(减)法和带符号数加(减)法?指令如何区分无符号数加(减)法和带符号数加(减)法?例如,若例如,若 (AH)=A0H, (BH)=7EH, 则则ADD AH, BH的值为多少?的值

16、为多少? 无符:无符:160+126=30(循环队列指针时正确);带符:(循环队列指针时正确);带符:-96+126=30(正(正确)确)硬件不区分,硬件不区分,由软件处理。由软件处理。问题:为什么加减运算可以不区分无符和带符数,而乘除运算一定要区分?2022-3-279MIPS 逻辑运算指令逻辑运算指令涉及到的操作数:涉及到的操作数:32/16位位 逻辑数(位串)逻辑数(位串)涉及到的操作:按位与涉及到的操作:按位与 / 按位或按位或 / 按位或非按位或非 / 左移左移 / 右移右移2022-3-2710MIPS定点比较和分支指令定点比较和分支指令涉及到的操作数:涉及到的操作数:32/16位

17、位 无符号数,无符号数, 32/16位带符号数带符号数涉及到的操作:大小比较和相等比较(有符号涉及到的操作:大小比较和相等比较(有符号 / 无符号)无符号)通过减法运算实现通过减法运算实现“比较比较”操作操作! !2022-3-2711MIPS定点数据传送指令定点数据传送指令涉及到的操作数:涉及到的操作数: 32/16位带符号数(偏移量可以是负数)带符号数(偏移量可以是负数)涉及到的操作:加涉及到的操作:加 / 减减 / 符号扩展符号扩展 / 0扩展扩展 问题:问题:IA-32指令如何区分装入指令如何区分装入 / 存储?如何区分传送不同宽度数据?存储?如何区分传送不同宽度数据? 体会不同体会不

18、同ISA的不同做法,以比较各自的优缺点!的不同做法,以比较各自的优缺点! 如果你来设计一台机器时,你也可以有你的做法!如果你来设计一台机器时,你也可以有你的做法!2022-3-2712MIPS中的浮点算术运算指令中的浮点算术运算指令涉及到的浮点操作数:涉及到的浮点操作数: 32位单精度位单精度 / 64位双精度浮点数位双精度浮点数涉及到的浮点操作:加涉及到的浮点操作:加 / 减减 / 乘乘 / 除除 MIPS提供专门的浮点数寄存器:提供专门的浮点数寄存器: 32个个32位单精度浮点数寄存器:位单精度浮点数寄存器:$f0, $f1, , $f31 连续两个寄存器(一偶一奇)存放一个双精度浮点数连

19、续两个寄存器(一偶一奇)存放一个双精度浮点数2022-3-2713MIPS中的浮点数传送指令中的浮点数传送指令涉及到的浮点操作数:涉及到的浮点操作数: 32位单精度浮点数位单精度浮点数涉及到的浮点操作:传送操作(与定点传送一样)涉及到的浮点操作:传送操作(与定点传送一样)还涉及到定点操作:加还涉及到定点操作:加 / 减(用于地址运算)减(用于地址运算) 例:将两个浮点数从内存取出相加后再存到内存的指令序列为:例:将两个浮点数从内存取出相加后再存到内存的指令序列为: lwc1 $f1, x($s1) lwc1 $f2, y($s2) add.s $f4, $f1, $f2 swc1 $f4, z

20、(s3)2022-3-2714MIPS中的浮点数比较和分支指令中的浮点数比较和分支指令涉及到的浮点操作数:涉及到的浮点操作数: 3232位单精度浮点数位单精度浮点数/64/64位双精度浮点数位双精度浮点数涉及到的浮点操作:比较操作涉及到的浮点操作:比较操作(用(用 减法来实现比较)减法来实现比较)还涉及到的定点操作:加还涉及到的定点操作:加 / / 减(用于地址运算)减(用于地址运算) 有一个专门的浮点标志有一个专门的浮点标志cond,无需在指令中明显给出,无需在指令中明显给出cond2022-3-2715MIPS指令考察的结果指令考察的结果u涉及到的操作数:涉及到的操作数: 无符号整数、带符

21、号整数无符号整数、带符号整数 逻辑数(位串)逻辑数(位串) 浮点数浮点数u涉及到的运算涉及到的运算 定点数运算定点数运算带符号整数运算:带符号整数运算:取负取负 / 符号扩展符号扩展 / 加加 / 减减 / 乘乘 / 除除 / 算术移位算术移位无符号数运算:无符号数运算:0扩展扩展 / 加加 / 减减 / 乘乘 / 除除 逻辑运算逻辑运算逻辑操作:逻辑操作:与与 / 或或 / 非非 / 移位操作:移位操作:逻辑左移逻辑左移 / 逻辑右移逻辑右移 浮点数运算:加、减、乘、除浮点数运算:加、减、乘、除实现实现MIPS定点和浮点运算指令的思路:定点和浮点运算指令的思路:先实现一个能进行基本算术运算(

22、加先实现一个能进行基本算术运算(加/减)和基本逻辑运算,并生成基本条件减)和基本逻辑运算,并生成基本条件码(码(ZF/OF/CF/NF)的)的ALU,再由,再由ALU和移位器实现乘、除、浮点运算器。和移位器实现乘、除、浮点运算器。ALU是运算部件的核心!以下介绍是运算部件的核心!以下介绍ALU的实现。的实现。完全能够支持高级语言完全能够支持高级语言对运算的需求!对运算的需求!问题:计算机是如何实现各种运算功能的?2022-3-2716ALU的功能说明的功能说明uALU Control Lines (ALUop) Function 000 And 001 Or 010 Add 110 Subtr

23、act 111Set-on-less-thanALUNNNABResultOverflowZero3ALUopCarryOutALU可进行基本的加可进行基本的加/减算减算术运算和逻辑运算。术运算和逻辑运算。其核其核心部件是加法器。心部件是加法器。有关串行加法器和并行加有关串行加法器和并行加法器的原理在数字逻辑电法器的原理在数字逻辑电路课已讲过,在此仅简单路课已讲过,在此仅简单回顾。回顾。2022-3-2717回顾:串行进位加法器回顾:串行进位加法器假定与假定与/或门延迟为或门延迟为1ty,异或门异或门3ty,则则“和和”与与“进位进位”的延迟为多少?的延迟为多少?FA全加器符号:全加器符号:串

24、行加法器的缺点:串行加法器的缺点:进位按串行方式传递,速度慢!进位按串行方式传递,速度慢!问题:问题:n位串行加法器从位串行加法器从C0到到Cn的的延迟时间为多少?延迟时间为多少?最后一位和数的延迟时间为多少?最后一位和数的延迟时间为多少?2n+1级门延迟!级门延迟!2n级门延迟!级门延迟!Sum延迟为延迟为6ty;Carryout延迟为延迟为2ty。FAFAFAn位串行位串行(行波行波)加法器:加法器:C0Cn2022-3-2718回顾:并行进位加法器(回顾:并行进位加法器(CLA加法器)加法器)u为什么用先行进位方式?为什么用先行进位方式? 串行进位加法器采用串行进位加法器采用串行逐级传递

25、进位串行逐级传递进位,电路延迟与位数成正比关系,电路延迟与位数成正比关系因此,现代计算机采用一种因此,现代计算机采用一种先行进位先行进位(Carry look ahead)方式方式。u如何产生先行进位?如何产生先行进位? 定义辅助函数:定义辅助函数:Gi=AiBi进位生成函数进位生成函数 Pi=Ai+Bi进位传递函数(或进位传递函数(或 Pi=Ai Bi ) 通常把实现上述逻辑的电路称为通常把实现上述逻辑的电路称为进位生成进位生成/传递部件传递部件 全加逻辑方程:全加逻辑方程:Si=Pi Ci Ci+1=Gi+PiCi (i=0,1,n) 设设n=4,则:则:C1=G0+P0C0 C2=G1+

26、P1C1=G1+P1G0+P1P0C0 C3=G2+P2C2=G2+P2G1+P2P1G0+P2P1P0C0 C4=G3+P3C3=G3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0 通常把实现上述逻辑的电路称为通常把实现上述逻辑的电路称为4位位CLA部件部件 通常把实现通常把实现Si=Pi Ci的电路称为的电路称为求和部件求和部件 CLA加法器由加法器由“进位生成进位生成/传递部件传递部件”、“CLA部件部件”和和“求和部件求和部件”构成。构成。 2022-3-2719回顾:回顾: 8位全先行进位加法器位全先行进位加法器进位生成进位生成/ /传递部件传递部件A7A0B7B0

27、P7P1P0G7G1G08位位 CLA部件部件C0求和部件求和部件P7P1P0C0C1C7C8S7S0S11ty (或或3ty)2ty3ty和的总延迟多少?进位和的总延迟多少?进位C8的延迟多少?的延迟多少?和的总延迟:和的总延迟:1+2+3=6ty;进位进位C8的延迟:的延迟:1+2=3tyPi=Ai+Bi-1ty Pi=Ai Bi -3ty2022-3-2720回顾:局部(单级)先行进位加法器回顾:局部(单级)先行进位加法器问题:所有和数产生的延迟为多少?问题:所有和数产生的延迟为多少?或称或称 单级先行进位加法器单级先行进位加法器3+2+2+5=12ty2022-3-2721 多级先行进

28、位加法器多级先行进位加法器 单级单级(局部局部)先行进位加法器的进位生成方式:先行进位加法器的进位生成方式: “组内并行、组间串行组内并行、组间串行” 所以,单级先行进位加法器虽然比行波加法器延迟时间短,但高位组所以,单级先行进位加法器虽然比行波加法器延迟时间短,但高位组进位依赖低位组进位,故仍有较长的时间延迟进位依赖低位组进位,故仍有较长的时间延迟 通过引入组进位生成通过引入组进位生成/传递函数实现传递函数实现“组内并行、组间并行组内并行、组间并行”进位方式进位方式 设设n=4,则:则:C1=G0+P0C0 C2=G1+P1C1=G1+P1G0+P1P0C0 C3=G2+P2C2=G2+P2

29、G1+P2P1G0+P2P1P0C0 G3*=G3+P3C3=G3+P3G2+P3P2G1+P3P2P1G0 P3*=P3P2P1P0C4 =G3*+P3*C0。把实现上述逻辑的电路称为把实现上述逻辑的电路称为4位位BCLA部件。部件。回顾:回顾:多级先行进位多级先行进位加法器加法器2022-3-2722回顾:回顾:多级先行进位多级先行进位加法器加法器关键路径长度为多少?关键路径长度为多少?最终进位的延迟为多少?最终进位的延迟为多少?4位成组先行进位部件(4位BCLA部件)4 4位位CLACLA加法器加法器4 4位位CLACLA加法器加法器4 4位位CLACLA加法器加法器4 4位位CLACL

30、A加法器加法器1616位两级先行进位加法器位两级先行进位加法器3+2+3 = 8ty3+2=5ty2022-3-2723A 4-bit ALU 1-bit ALU 4-bit串行串行 ALUABFACarryOutMuxCarryInResultA0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut3MUX是什么?(数字电路课学过)是什么?(数字电路课学过)关键路径

31、延迟长,速度慢!关键路径延迟长,速度慢!2ALUop2022-3-2724先行进位先行进位ALUu先行进位先行进位ALU 芯片(芯片(SN74181) 四位四位ALU芯片,中规模集成电路。在先行进位加法器基础上附加部分芯片,中规模集成电路。在先行进位加法器基础上附加部分线路,具有基本的算术运算和逻辑运算功能。线路,具有基本的算术运算和逻辑运算功能。 SN74181的的逻辑图和功能表逻辑图和功能表 SN74182是是4位位BCLA (成组先行进位成组先行进位)芯片芯片。u多芯片级联构成先行进位多芯片级联构成先行进位ALU(用于专用场合,如教学机等)用于专用场合,如教学机等) 1个个SN74181

32、芯片直接构成一个芯片直接构成一个4位全先行进位位全先行进位ALU 4个个SN74181芯片串行构成一个芯片串行构成一个16位单级先行进位位单级先行进位ALU 4个个SN74181芯片与芯片与1个个SN74182芯片可构成芯片可构成16位两级先行进位位两级先行进位ALU 16个个SN74181芯片与芯片与5个个SN74182芯片可构成芯片可构成64位先行进位位先行进位ALUu现代主流计算机中现代主流计算机中ALU是否通过芯片级联而成?是否通过芯片级联而成?SKIPALUALU的的“加加”运算电路相当于运算电路相当于n n档二进制加法算盘档二进制加法算盘。所有其他运算都以。所有其他运算都以ALU

33、ALU 中中“加加”运算为基础!运算为基础!无需芯片级联!一个无需芯片级联!一个CPU芯片中有多个处理器核,芯片中有多个处理器核,一个核中有多个一个核中有多个ALU!2022-3-2725回顾:回顾:SN74181的引脚的引脚输入端:输入端:Ai和和Bi分别为第分别为第1和和2操作数,操作数,Cn为低位进位,为低位进位,M为功能选择为功能选择线,线,Si为操作选择线,共为操作选择线,共4位,故最多有位,故最多有16种运算。种运算。输出端:输出端:Fi为运算结果,为运算结果,Cn+4、P和和G为进位,为进位,“A=B”为相等标志为相等标志P输入端输入端输出端输出端2022-3-2726回顾:回顾

34、:SN74181正逻辑功能表正逻辑功能表BACK2022-3-2727回顾:回顾:SN74182芯片的引脚芯片的引脚输入端:输入端:Pi和和Gi分别为第分别为第i组的组内进位传递函数和进位生成函数,组的组内进位传递函数和进位生成函数, Cn为低位进位。为低位进位。输出端:输出端: Cn+4、Cn+8 、Cn+12为相应组的组内进位,为相应组的组内进位,P*和和G*分别分别为整个大组的组进位传递函数和进位生成函数。为整个大组的组进位传递函数和进位生成函数。2022-3-2728SN74182芯片的逻辑电路图芯片的逻辑电路图BACK2022-3-2729SN74181和和SN74182组成组成16

35、位先行进位位先行进位ALU4位位ALU4位位ALU4位位ALU4位位ALU1616位两级先行进位位两级先行进位ALUALUBACK2022-3-2730例:实现某例:实现某11条条MIPS指令的指令的ALU在第在第6章章CPU设计时详细介绍设计时详细介绍!2022-3-2731第一讲小结第一讲小结u高级语言程序中涉及的运算(高级语言程序中涉及的运算(C C语言为例)语言为例) 整数算术运算、浮点数算术运算整数算术运算、浮点数算术运算 按位、逻辑、移位、位扩展和位截断按位、逻辑、移位、位扩展和位截断u指令集中与运算相关的指令(指令集中与运算相关的指令(MIPSMIPS为例)为例) 涉及到的定点数

36、运算涉及到的定点数运算-算术运算算术运算带符号整数:带符号整数:取负、符号扩展、加、取负、符号扩展、加、减、乘、除、算术移位减、乘、除、算术移位无符号数:无符号数:0 0扩展、加、减、乘、除扩展、加、减、乘、除 -逻辑运算逻辑运算逻辑操作:逻辑操作:与、或、非与、或、非移位操作:移位操作:逻辑左移、逻辑右移逻辑左移、逻辑右移 涉及到的浮点数运算:加、减、乘、除涉及到的浮点数运算:加、减、乘、除u基本运算部件基本运算部件ALUALU的设计的设计 全加器、串行加法器、先行进位加法器全加器、串行加法器、先行进位加法器 串行串行ALUALU、先行进位、先行进位ALUALU(单级(单级/ /多级)多级)

37、 MSIMSI芯片级联、直接做在芯片级联、直接做在CPUCPU芯片内芯片内定点运算定点运算: : 无符号数无符号数 按位逻辑运算按位逻辑运算 逻辑移位运算逻辑移位运算 位扩展和截断运算位扩展和截断运算 加加/ /减减/ /乘乘/ /除运算除运算 带符号整数带符号整数 算术移位运算算术移位运算 扩展运算和截断运算扩展运算和截断运算 补码补码加加/ /减减/ /乘乘/ /除运算除运算浮点运算浮点运算: : 原码原码加加/ /减减/ /乘乘/ /除运算除运算 移码移码加加/ /减运算减运算是一种模运算系统!是一种模运算系统!下一讲开始介绍上述这些下一讲开始介绍上述这些运算算法及其运算电路运算算法及其

38、运算电路需求需求转换转换需求需求转换转换CPUCPU中需提供哪些中需提供哪些运算?运算?WhyWhy?2022-3-2732第二讲:定点数运算及运算部件第二讲:定点数运算及运算部件主主 要要 内内 容容u加加/ /减运算及其运算部件减运算及其运算部件 补码补码 / / 原码原码 / / 移码移码 加减运算加减运算u乘法运算及其运算部件乘法运算及其运算部件 原码原码 / / 补码补码 乘法运算乘法运算 快速乘法器快速乘法器u除法运算及其运算部件除法运算及其运算部件 原码原码 / / 补码补码 除法运算除法运算 快速除法器快速除法器u定点运算器定点运算器u十进制加减运算十进制加减运算注:无符号数的

39、按位逻辑运算可用逻辑门电路实现;无符号数的逻辑移位运算可用专门的移位器或斜送结果等多种方式来实现;带符号数的算术移位运算、无符号数和带符号整数的位扩展运算和截断运算也可用简单电路很容易地实现。为什么无需移码乘、除运算?2022-3-2733补码加补码加/减运算及其部件减运算及其部件u补码加减运算公式补码加减运算公式 A+B补补 = A补补 + B 补补 ( MOD 2n ) AB补补 = A补补 + B 补补 ( MOD 2n )u补码加减运算要点和运算部件补码加减运算要点和运算部件 加、减法运算统一采用加法来处理加、减法运算统一采用加法来处理 符号位符号位(最高有效位最高有效位MSB)和数值

40、位一起参与运算和数值位一起参与运算 直接用直接用Adder实现两个数的加运算(模运算系统)实现两个数的加运算(模运算系统) 问题:模是多少?问题:模是多少?运算结果高位丢弃,保留低运算结果高位丢弃,保留低n位,相当于取模位,相当于取模2n 实现减法的主要工作在于:求实现减法的主要工作在于:求B 补补问题:如何求问题:如何求 BB补补?B 补补=B+1ResultAdder444AZeroCarryInCarryOut4B401MuxSelSubBoverflow补码加补码加/ /减运算部件减运算部件当控制端当控制端SubSub为为1 1时,做减法时,做减法当控制端当控制端SubSub为为0 0

41、时,做加法时,做加法问题:问题:Adder中执行的中执行的是什么运算?是什么运算?相当于无符号数加!相当于无符号数加!2022-3-2734补码加补码加/减运算与减运算与“溢出溢出”判断判断Ex1: -7- 6 = -7 + (-6) = +3 -3 - 5 = - 3 + (- 5) = - 811+00011110011101111000100011Ex2: 用用8位补码计算位补码计算107+46=? 结果错误结果错误: 107 + 46 = -103.10710= 0110 10112 4610 = 0010 11102 0 1001 1001进位是真正的符号:进位是真正的符号:+153

42、+15311溢出现象:溢出现象:(1) 最高位和次高位的进位不同最高位和次高位的进位不同 (2) 和的符号位和加数的符号位不同和的符号位和加数的符号位不同X问题:若采用变形补码结果怎样?问题:若采用变形补码结果怎样?采用变形补码时采用变形补码时“溢出溢出”判断条件:判断条件:结果的两个符号位不同结果的两个符号位不同变形补码可保留运算中间结果。变形补码可保留运算中间结果。从乘除运算过程可看出这点!从乘除运算过程可看出这点!2022-3-2735Overflow Detection Logic(溢出判断逻辑溢出判断逻辑)uCarry into MSB ! = Carry out of MSB Fo

43、r a N-bit ALU: Overflow = CarryIn N-1 XOR CarryOut N-1OverflowXYX XOR Y00011101110A0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut30也可以用其他实现方式。也可以用其他实现方式。溢出标志(溢出标志(Overflew Flag)常用常用OF或或VF表示。表示。2022-3-2736

44、Zero Detection Logic(判判0逻辑逻辑)ZeroA0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut3 除除Zero(ZF)、Overflow(OF)外,外,许多机器还生成许多机器还生成进进/借位标志(借位标志(CF)、符符号标志(号标志(NF / SF)等。等。 标志(标志(Flag)在运算电路中产生,被记)在运算电路中产生,被记录到专门的寄存

45、器中,以便在分支指令中录到专门的寄存器中,以便在分支指令中被用来作为条件。被用来作为条件。 存放标志的寄存器通常称为存放标志的寄存器通常称为程序程序/状态字状态字寄存器寄存器或或标志寄存器。标志寄存器。每个标志对应标志每个标志对应标志寄存器中的一个标志位。寄存器中的一个标志位。 问题:问题:MIPS指令指令 “bne $1,$2,25” 的的含义为含义为“ If ($1!=$2) goto PC+4+100 else goto PC+4”,则执行,则执行bne指令需指令需判断什么标志?判断什么标志?零标志(零标志(Zero Flag)常用常用ZF表示。表示。2022-3-2737原码加原码加/

46、减运算减运算u用于浮点数尾数运算用于浮点数尾数运算u符号位和数值部分分开处理符号位和数值部分分开处理u仅对数值部分进行加减运算,符号位起判断和控制作用仅对数值部分进行加减运算,符号位起判断和控制作用u规则如下:规则如下:比较两数符号,对加法实行比较两数符号,对加法实行“同号求和,异号求差同号求和,异号求差”,对减法实行,对减法实行“异号求和,同号求差异号求和,同号求差”。求和:数值位相加,和的符号取被加数(被减数)的符号。若最高求和:数值位相加,和的符号取被加数(被减数)的符号。若最高位产生进位,则结果溢出。位产生进位,则结果溢出。求差:被加数(被减数)加上加数(减数)的补码。求差:被加数(被

47、减数)加上加数(减数)的补码。-最高数值位产生进位表明加法结果为正,所得数值位正确。最高数值位产生进位表明加法结果为正,所得数值位正确。-最高数值位没产生进位表明加法结果为负,得到的是数值位的补最高数值位没产生进位表明加法结果为负,得到的是数值位的补码形式,需对结果求补,还原为绝对值形式的数值位。码形式,需对结果求补,还原为绝对值形式的数值位。差的符号位:差的符号位:a)a)情况下,符号位取被加数(被减数)的符号;情况下,符号位取被加数(被减数)的符号; b)b)情况下,符号位为被加数(被减数)的符号取反。情况下,符号位为被加数(被减数)的符号取反。2022-3-2738原码加原码加/减运算减

48、运算例例1:已知:已知 X原原 = 1.0011,Y原原 = 1.1010,要求计算,要求计算X+Y原原解:由原码加减运算规则知:同号相加,则求和,和的符号同被加数符号。解:由原码加减运算规则知:同号相加,则求和,和的符号同被加数符号。 所以:和的数值位为:所以:和的数值位为:0011 + 1010 = 1101 (ALU中无符号数相加)中无符号数相加) 和的符号位为:和的符号位为:1 X+Y原原 = 1.1101例例2 :已知:已知 X原原 = 1.0011,Y原原 = 1.1010,要求计算,要求计算XY原原 解:由原码加减运算规则知:同号相减,则求差(补码减法)解:由原码加减运算规则知:

49、同号相减,则求差(补码减法) 差的数值位为:差的数值位为:0011+(1010)求补求补 = 0011 + 0110 = 1001 最高数值位没有产生进位,表明加法结果为负,需对最高数值位没有产生进位,表明加法结果为负,需对1001求补,还求补,还 原为绝对值形式的数值位。即:原为绝对值形式的数值位。即:(1001)补补= 0111 差的符号位为差的符号位为X原原的符号位取反,即:的符号位取反,即:0 XY原原 = 0.0111思考题:如何设计一个基于加法器的原码加思考题:如何设计一个基于加法器的原码加/减法器?减法器?求和:直接加,有进位则溢出,符号同被求和:直接加,有进位则溢出,符号同被求

50、差:加补码,不会溢出,符号分情况求差:加补码,不会溢出,符号分情况2022-3-2739移码加移码加/减运算减运算u用于浮点数阶码运算用于浮点数阶码运算u符号位和数值部分可以一起处理符号位和数值部分可以一起处理u运算公式运算公式(假定在一个(假定在一个n位位ALU中进行加法运算)中进行加法运算) E1移移+E2移移=2n-1+E1+2n-1+E2=2n+E1+E2=E1+E2补补 (mod 2n) E1移移E2移移=E1移移+E2移移补补=2n-1+E1+2nE2移移 =2n-1+E1+2n2n-1E2 = 2n+E1E2 = E1E2补补 (mod 2n) 结论:移码的和、差等于和、差的补码

51、!结论:移码的和、差等于和、差的补码!u运算规则运算规则 加法:直接将加法:直接将E1移移和和E2移移进行模进行模2n加,然后对结果的符号取反。加,然后对结果的符号取反。 减法:先将减数减法:先将减数E2移移求补(各位取反,末位加求补(各位取反,末位加1),然后再与被减),然后再与被减数数 E1移移进行模进行模2n相加,最后对结果的符号取反。相加,最后对结果的符号取反。 溢出判断:进行模溢出判断:进行模2n相加时,如果两个加数的符号相同,并且与和相加时,如果两个加数的符号相同,并且与和数的符号也相同,则发生溢出。数的符号也相同,则发生溢出。补码和移码的关系:符号位相反、数值位相同!补码和移码的

52、关系:符号位相反、数值位相同!2022-3-2740移码加移码加/减运算减运算例例1: 用四位移码计算用四位移码计算“7+( 6)”和和“3 + 6”的值。的值。解:解:7移移 = 0001 6移移= 0010 3移移= 01016移移= 1110 7移移 + 6移移 = 0001 + 0010 = 0011 (两个加数与结果符号都为(两个加数与结果符号都为0,溢出),溢出) 3移移 + 6移移 = 0101 + 1110 = 0011, 符号取反后为符号取反后为 1011,其真值为,其真值为+3 问题:问题:7+(6)移移=? 3+(6)移移 =? 例例2: 用四位移码计算用四位移码计算“7

53、 ( 6)”和和“3 5”的值。的值。解:解:7移移 = 0001 6移移= 0010 3移移= 01015移移= 1101 7移移 6移移 = 0001 + 1110 = 1111, 符号取反后为符号取反后为 0111,其真值为,其真值为1。 3移移 5移移 = 0101 + 0011 = 1000,符号取反后为,符号取反后为 0000,其真值为,其真值为 8。思考题:如何设计一个基于加法器的移码加思考题:如何设计一个基于加法器的移码加/减法器?减法器?在补码加在补码加/减法器结果的最高位(减法器结果的最高位(MSB)加一个反相器!)加一个反相器!2022-3-2741例:实现某例:实现某1

54、1条条MIPS指令的指令的ALU该该ALU能实现哪些运算?能实现哪些运算?add,sub,addu,subu,or,slt,sltu能否实现定点乘除运算?能否实现定点乘除运算?能否实现浮点运算?能否实现浮点运算?P. 243 图图6.15定点整数定点整数ALU!SIGctr=1(带符带符), less=OF SFSIGctr=0(无符无符), less=SUBctr CF2022-3-2742无符号数的乘法运算无符号数的乘法运算uPaper and pencil example: Multiplicand 1000Multiplier x 1001 1000 0000 0000 1000 Pr

55、oduct(积积) 0.1001000假定:假定:X原原=x0.x1xn,Y原原=y0.y1yn ,求,求xY原原数值部分数值部分 z1z2n = (0.x1xn ) (0. y1yn) (小数点位置约定,不区分小数还是整数小数点位置约定,不区分小数还是整数)X y4 2-4X y3 2-3X y2 2-2X y1 2-1 4XY= (X yi2-i) i=1整个运算过程中用到两种操作:加法整个运算过程中用到两种操作:加法 + + 左移左移因而,可用因而,可用ALUALU和移位器来实现乘法运算和移位器来实现乘法运算n=42022-3-2743无符号数的乘法运算无符号数的乘法运算u手工乘法的特点

56、:手工乘法的特点:每步计算:每步计算:Xyi,若,若yi = 0,则得,则得0;若;若yi = 1,则得,则得X把求得的各项结果把求得的各项结果X yi 逐次左移,可表示为逐次左移,可表示为X yi2-i 对中结果求和,即对中结果求和,即 (X yi2-i),这就是两个无符号数的乘积,这就是两个无符号数的乘积u计算机内部稍作以下改进:计算机内部稍作以下改进:每次得每次得Xyi后,与前面所得结果累加,得到后,与前面所得结果累加,得到Pi,称之为部分积。因,称之为部分积。因为不等到最后一次求和,减少了保存各次相乘结果为不等到最后一次求和,减少了保存各次相乘结果Xyi的开销。的开销。每次得每次得Xy

57、i后,不将它左移与前次部分积后,不将它左移与前次部分积Pi相加,而将部分积相加,而将部分积Pi右右移后与移后与Xyi相加。因为加法运算始终对部分积中高相加。因为加法运算始终对部分积中高n位进行。故用位进行。故用n位加法器可实现二个位加法器可实现二个n位数相乘。位数相乘。 对乘数中为对乘数中为“1”的位执行加法的位执行加法和右移,对为和右移,对为“0 0”的位只执行右移,而的位只执行右移,而不执行加法运算。不执行加法运算。2022-3-2744无符号乘法运算的算法推导无符号乘法运算的算法推导u上述思想可写成如下数学推导过程:上述思想可写成如下数学推导过程:XY = X ( 0.y1 y2 yn

58、) = Xy12-1 +Xy22-2 + +Xyn-12-(n-1) +Xyn2-n = 2-n Xyn+ 2-(n-1) Xyn-1 + + 2-2Xy2 + 2-1Xy1 =2-1 ( 2-1 (2-12-1 (2-1 (0 + Xyn) + Xyn-1) + + Xy2 ) + Xy1) n个个2-1u上述推导过程具有明显的递归性质,因此,无符号数乘法过程可归结为循环计上述推导过程具有明显的递归性质,因此,无符号数乘法过程可归结为循环计算下列算式的过程:设算下列算式的过程:设P0 = 0,每步的乘积为:,每步的乘积为: P1 = 2-1 (P0+ X yn) P2 = 2-1 (P1+

59、X yn-1) Pn = 2-1 (Pn-1+ X y1)u 其递推公式为:其递推公式为:Pi+1 = 2-1 (Pi + Xyn-i) ( i = 0, 1, 2, 3, , n-1 ) u 最终乘积最终乘积Pn = XY迭代过程从乘数迭代过程从乘数最低位最低位yn和和P0=0开始,经开始,经n次次“判断判断加法加法右移右移”循环,直到求出循环,直到求出Pn为止为止。2022-3-2745写使能写使能控制逻辑控制逻辑右移右移32位位 ALU被乘数寄存器被乘数寄存器X X乘积寄存器乘积寄存器P3264 位位323232加加计数器计数器Cn时钟时钟C乘数寄存器乘数寄存器Y32位乘法运算的硬件实现

60、位乘法运算的硬件实现u被乘数寄存器被乘数寄存器X:存放被乘数存放被乘数u乘积寄存器乘积寄存器P:开始置初始部分积开始置初始部分积P0 = 0;结束时,存放的是;结束时,存放的是64位乘积的高位乘积的高32位位u乘数寄存器乘数寄存器Y:开始时置乘数;结束时,存放的是开始时置乘数;结束时,存放的是64位乘积的低位乘积的低32位位u进位触发器进位触发器C:保存加法器的进位信号保存加法器的进位信号u循环次数计数器循环次数计数器Cn:存放循环次数。初值存放循环次数。初值32,每循环一次,每循环一次,Cn减减1,Cn=0时结束时结束uALU:乘法核心部件。在控制逻辑控制下,对乘法核心部件。在控制逻辑控制下,对P和和X的内容的内容“加加”,在,在“写使能写

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论