第1页第一章计算机系统概论第二章运算方法和运算器第三章存储系统第四章指令系统第五章中央处理器第六章总线系统a0b1FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAa4b0a3b0a2b0a1b0a0b000000a1b1a2b1a3b1a4b1a0b2a3b2a2b2a1b2a4b2a0b3a3b3a2b3a1b3a4b3a0b4a3b4a2b4a1b4a4b4p8p999p7p6p5p4p3p2p1p0目录第2页【例】用一台40MHz处理机执行标准测试程序,程序所含的混合指令数和每类指令的CPI如表所示,求有效CPI、MIPS速率和程序的执行时间。【解】:总指令数为:45000+32000+15000+8000=100000条各类指令所占的比例分别是:整数运算为45%,数据传送为32%,浮点操作为15%,控制传送为8%。有效CPI、MIPS速率和程序的执行时间分别计算如下:(1)有效CPI为1×0.45+2×0.32+2×0.15+2×0.08=1.55CPI(2)MIPS速率为40×106/(1.55×106)≈25.8MIPS(3)程序的执行时间为100000×1.55/(40×106)=0.003875s第3页【例】若浮点数x的二进制存储格式为(41360000)16,求其32位浮点数的十进制值。【解】:将x展开成二进制:0100,0001,0011,0110,0000,0000,0000,0000数符:0阶码:1000,0010尾数:011,0110,0000,0000,0000,0000指数e=阶码-127=10000010-01111111=00000011=(3)10包括隐藏位1的尾数:1.M=1.01101100000000000000000=1.011011于是有x=(-1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10第4页【例】:将十进制数20.59375转换成32位浮点数的二进制格式来存储。【解】:首先分别将整数和分数部分转换成二进制数:20.59375=10100.10011然后移动小数点,使其在第1,2位之间10100.10011=1.010010011×24e=4于是得到:e=E–127S=0,E=4+127=131=1000,0011,M=010010011最后得到32位浮点数的二进制存储格式为01000001101001001100000000000000=(41A4C000)16第5页【例】设机器字长16位,定点表示,尾数15位,数符1位,问:(1)定点原码整数表示时,最大正数是多少?最小负数是多少?(2)定点原码小数表示时,最大正数是多少?最小负数是多少?【解】(1)定点原码整数表示最大正数值=(215-1)10=(+32767)100111111111111111最小负数值=-(215-1)10=(-32767)101111111111111111(2)定点原码小数表示最大正数值=(1-2-15)10=(+0.111...11)2最小负数值=-(1-2-15)10=(-0.111..11)2若把问题换成补码,则结果又是什么?即(1)定点补码整数表示时,最大正数是多少?最小负数是多少?(2)定点补码小数表示时,最大正数是多少?最小负数是多少?【解】(1)定点补码整数表示最大正数值=(215-1)10=(+32767)100111111111111111最小负数值=-215=(-32768)101000000000000000(2)定点补码小数表示最大正数值=(1-2-15)10=(+0.111...11)2最小负数值=-1第6页【解】[x]补=00.1100[y]补=00.1000[x]补00.1100+[y]补00.100001.0100符号位出现“01”,表示已溢出,正溢。即结果大于+1【例】x=+0.1100,y=+0.1000,用变形补码求x+y。【解】[x]补=11.0100[y]补=11.1000[x]补11.0100+[y]补11.100010.1100符号位出现“10”,表示已溢出,负溢出。即结果小于-1【例】x=-0.1100,y=-0.1000,用变形补码求x+y。第7页【例】:x=+011,y=+110,变形移码求[x+y]移和[x-y]移,并判断是否溢出。【解】:阶码取3位(不含符号位),其对应的真值范围是:-8~+7[x]移=01011,[y]补=00110,[-y]补=11010[x+y]移=[x]移+[y]补=[x-y]移=[x]移+[-y]补=01011+0011010001结果上溢。结果正确,为-3。01011+1101000101第8页【例】设x=+15,y=-13,用带求补器的原码阵列乘法器求出乘积x×y=?(设最高位为符号位)【解】输入数据为:[x]原=01111[y]原=11101乘积符号位:xf⊕yf=1算前求补器的使能控制信号=0,算前求补输出为:|x|=1111,|y|=11011111×)11011111000011111111011000011算后求补器的使能控制信号也为0,算后求补输出为:11000011,加上符号位,最后乘积[x·y]原=111000011其真值为:x×y=-11000011B=-195第9页【例】设x=+15,y=-13,用带求补器的补码阵列乘法器求出乘积x·y=?【解】设最高位为符号位,则输入数据为:[x]补=01111[y]补=10011符号位单独运算,算前求补级输出为:|x|=1111,|y|=11011111×)11011111000011111111011000011算后求补级输出为:00111101,最后乘积[x·y]补=100111101其真值为:-11000011B=-195第10页【例】设x=0.1101,y=-0.1011,分别用带求补器的原码阵列乘法器、带求补器的补码阵列乘法器和直接补码阵列乘法器计算x×y。【解】①带求补器的原码阵列乘法器[x]原=0.1101[y]原=1.1011乘积的符号位为:xf⊕yf=0⊕1=1因符号位单独考虑,算前求补器的使能控制信号为0,经算前求补后输出x′=1101,y′=1011,其中x′和y′分别是x和y原码的数值位。因算后求补器的使能控制信号为0,经算后求补后输出为10001111,加上乘积符号位1,得[x×y]原=1.10001111所以x×y=-0.100011111101×1011110111010000+1101。10001111第11页【解】②带求补器的补码阵列乘法器[x]补=0.1101[y]补=1.0101乘积的符号位为:xf⊕yf=0⊕1=1因算前求补器的使能控制信号分别为被乘数和乘数的符号位,经算前求补后输出x′=1101,y′=1011,其中x′和y′分别是x和y原码的数值位。1101×1011110111010000+1101。10001111因算后求补器的使能控制信号为乘积的符号位,经算后求补后输出为01110001,加上乘积符号位1,得[x×y]补=1.01110001所以x×y=-0.10001111第12页③直接补码阵列乘法器[x]补=0.1101[y]补=1.0101(0)1101×(1)0101(0)1101(0)0000(0)1101(0)0000+0(1)(1)(0)(1).00(1)(1)110001(1)101110001[x×y]补=1.0111001所以x×y=-0.10001111注意:在这三种阵列运算中,一定要注意运算结果的位数。例如,参与运算的数位都是5位,则运算结果的位数就应该是10位。第13页【例】设x=101001,y=-111,用原码阵列除法器计算x÷y。【解】:[x]原=0101001,[y]原=1111商的符号位为:xf⊕yf=0⊕1=1令x′=101001,y′=111,其中x′和y′分别为[x]原和[y]原的数值部分:[x′]补=0101001,[y′]补=0111,[-y′]补=1001第14页被除数/余数商说明0101001被除数[x′]补+[-y′]补1001第一步减去除数,即+[-y′]补1110001q0=0最高位向前产生的进位为0,即商0+[y′]补0111向右错开1位,加上除数,即+[y′]补001101q1=1最高位向前产生的进位为1,即商1+[-y′]补1001向右错开1位,减去除数,即+[-y′]补11111q2=0最高位向前产生的进位为0,即商0+[y′]补0111向右错开1位,加上除数,即+[y′]补0110q3=1最高位向前产生的进位为1,即商1故得商q=q0q1q2q3=0101,余数r=r3r4r5r6=0110所以[x÷y]原=1101,[余数]原=0110其中,余数的符号位与被除数相同即x÷y=-101,余数=110第15页【例】:利用74181和74182器件设计如下三种方案的64位ALU;(1)行波CLA;(2)两级行波CLA;(3)三级CLA。【解】:(1)行波CLA仅使用74181,用芯片的Cn+4进位输出作为下一级的进位输入Cm,片子内部有先行进位,片与片之间采用串行进位。64位ALU共需要16片74181,运算速度最慢。第16页(2)两级行波CLA需要16片74181和4片74182。每4片74181为一组,使用1片74182,可实现4片74181之间的第二级先行进位。共有四组,组与组之间采用行波进位。速度比(1)快。第17页(3)三级CLA如图所示:多用一片74182,实现第三级先行进位。此方案速度最快,最低位的进位信号可以直接传送到最高位(第64位)。第18页【例】两浮点数x=201×0.1101,y=211×(-0.1010)。假设尾数在计算机中以补码表示,可存储4位尾数,2位保护位,阶码以原码表示,求x+y。【解】:将x,y转换成浮点数据格式[x]浮=0001,00.1101,[y]浮=0011,11.0110步骤1:对阶,阶差为11-01=10,即2,因此将x的尾数右移两位,得[x]浮=0011,00.001101步骤2:对尾数求和,得:[x+y]浮=0011,11.100101步骤3:由于符号位和第一位数相等,不是规格化数,向左规格化,得[x+y]浮=0010,11.001010步骤4:截去。[x+y]浮=0010,11.0010步骤5:数据无溢出,因此结果为x+y=210×(-0.1110)第19页【例】设有浮点数x=2-50.0110011,y=23(-0.1110010),阶码用4位移码表示,尾数(含符号位)用8位补码表示。求[xy]浮。要求用补码完成尾数乘法运算,运算结果尾数保留高8位(含符号位),并用尾数低位字长值处理舍入操作。【解】:阶码采用双符号位,尾数补码采用单符号位,则有[Mx]补=0.0110011,[My]补=1.0001110,[Ex]移=00011,[Ey]移=01011,[Ey]补=00011,[x]浮=00011,0.0110011,[y]浮=01011,1.0001110(1)求阶码和[Ex+Ey]移=[Ex]移+[Ey]补=00011+00011=00110,值为移码形式-2。第20页(2)尾数乘法运算可采用补码阵列乘法器实现,即有[Mx]补[My]补=[0.0110011]补[1.0001110]补=[1.1010010,1001010]补(3)规格化处理乘积的尾数符号位与最高数值位符号相同,不是规格化的数,需要左规,阶码变为00101(-3),尾数变为1.0100101,0010100。(4)舍入处理尾数为负数,取尾数高位字长,按舍入规则,舍去低位字长,故尾数为1.0100101。最终相乘结果为其真值为xy=2-3(-0.1011011)[xy]浮=00101,1.0100101第21页【例】设有若干片256K×8位的SRAM芯片,设CPU的接口信号有地址信号、数据信号、控制信号MREQ#