1. | 已提交首次提交时间:2022-10-25 10:12:23 最后一次提交时间:2022-10-25 10:12:23
以下关于n位带标志加法器的叙述中,错误的是 【 正确答案: D】 A n位带标志加法器和n位加法器一样,都可用于实现两个n位无符号数的加运算。 B n位带标志加法器的输入与n位加法器的输入完全一样,包含两个n位加数和一位低位进位。 C n位带标志加法器的输出比n位加法器的输出多了几个标志信息。 D 通常的标志信息包括溢出标志OF、符号标志ZF、零标志SF和进位/借位标志CF。 得分:5.00
(1)n位带标志加法器和不带标志加法器的主要区别在于:带标志加法器会额外输出进位或溢出的信号,而不带标志加法器只输出计算结果。
(2)n位带标志加法器会输出以下两个标志信息: |
---|---|
2. | 已提交首次提交时间:2022-10-25 10:43:40 最后一次提交时间:2022-10-29 17:54:29
以下关于ALU的叙述中,错误的是 【 正确答案: A】 A ALU可以实现加、减、乘、除运算。() B ALU可以实现与、或、非等逻辑运算。 C 控制端ALUop可以控制ALU实现哪种运算。 D ALU是CPU中的主要运算部件之一。 得分:5.00 ALU 不能直接实现乘除法,CPU通过将多条基本指令组合使用来完成乘除运算 |
3. | 已提交首次提交时间:2022-10-25 10:49:41 最后一次提交时间:2022-10-29 17:52:44
以下对运算类指令的叙述中,错误的是 【 正确答案: D】 A 指令系统中有专门的带符号整数乘和带符号整数除运算指令。 B 指令系统中有专门的无符号整数乘和无符号整数除运算指令。 C 指令系统中有专门的无符号整数移位和带符号整数移位运算指令。 D 指令系统中有专门的浮点数左移和右移运算指令。 得分:5.00
|
4. | 已提交首次提交时间:2022-10-25 10:19:21 最后一次提交时间:2022-10-25 10:19:21
若8位带符号整数的补码表示为1001 0101,则右移一位后的结果为 【 正确答案: D】 A 0100 1010 B 0100 1011 C 1000 1010 D 1100 1010 得分:5.00 因为是带符号整数,最高位补符号位 |
5. | 已提交首次提交时间:2022-10-25 10:19:58 最后一次提交时间:2022-10-25 10:19:58
CPU中能进行算术运算和逻辑运算的最基本运算部件是 【 正确答案: C】 A 移位器 B 多路选择器 C ALU D 加法器 得分:5.00 |
6. | 已提交首次提交时间:2022-10-25 20:06:33 最后一次提交时间:2022-10-25 20:06:33
ALU有一个操作控制端ALUop,ALU在ALUop的控制下执行相应的运算。以下给出的运算中,(? ?)运算不能由ALUop直接控制完成。 【 正确答案: A】 A 乘法和除法 B 加法和减法 C 与、或、非等逻辑运算 D 传送(ALU输入直送为输出) 得分:5.00 |
7. | 已提交首次提交时间:2022-10-25 10:25:34 最后一次提交时间:2022-10-25 10:25:34
若在一个8位整数加/减运算器中完成x–y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x–y的值及相应的溢出标志OF分别是 【 正确答案: D】 A 119、0 B 115、1 C 115、0 D 119、1 得分:5.00 判断是否补码溢出的两种方式:(1)符号位和最高数值位向的进位不同,则产生溢出 (2)若两个加数的符号位相同且与和的符号位不同,则产生溢出 本题中:【x】补=1111 0101 【y】补=0111 1110 【y补=1000 0010 计算结果:x-y=【x】补+【-y】补=1111 0101+1000 0010=(溢出值为1)0111 0111=(119)十进制 符号位和最高数值进位不同,因此结果溢出 |
8. | 已提交首次提交时间:2022-10-25 10:32:51 最后一次提交时间:2022-10-29 18:00:58
若在一个8位整数加/减运算器中完成x+y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x+y的值及相应的溢出标志OF分别是 【 正确答案: A】 A 115、0 B 119、0 C 115、1 D 119、1 得分:5.00 x+y=1111 0101+0111 1110=(溢出值为1) =0111 0011=115 符号位和最高数值进位相同(均为一),因此结果未溢出 |
填空题
1. | 已提交首次提交时间:2022-10-25 10:36:49 最后一次提交时间:2022-10-28 23:59:27
已知32位寄存器R1中存放的变量x的机器数为80 00 00 04H,请回答下列问题。 (1)当x是unsigned int类型时,x的值是多少 2^31+2^2 【 正确答案: 2^31+2^2 或 2^2+2^31】 (用2的幂来表示比如2^7+2^3)?
x/2的值是多少 2^30+2 【 正确答案: 2^30+2 或 2^30+2^1 或 2+2^30】? 除以2相当于右移一位(如果是乘则为左移) x/2的机器数是什么 40 00 00 02H 【 正确答案: 40 00 00 02H 或 0100 0000 0000 0000 0000 0000 0000 0010】 ?2x的值是多少 2^32+2^3 【 正确答案: 2^32+2^3】? 2x的机器数是什么 00 00 00 08H 【 正确答 最高位溢出,不用管 案:00 00 00 08H 或 0000 0000 0000 0000 0000 0000 0000 1000】?
(2)当x是int类型时,x的值是多少 -(2^31-2^2) 【 正确答案: -(2^31-2^2) 或 -2^31+2^2】 ? 当为int型,则为有符号数,做高位为1,说明是负数(注:计算机中负数一定是用补码表示) 80 00 00 04H的补码的原码(最高位的符号位不变)FF FF FF FCH x/2的值是多少 -(2^30-2) 【 正确答案: -(2^30-2^1) 或 -(2^30-2) 或 -2^30+2 或 -2^30+2^1】? (无论是正数还是负数,除以2都是右移一位) x/2的机器数是什么 C0 00 00 02H 【 正确答案: C0 00 00 02H 或 1100 0000 0000 0000 0000 0000 0000 0010】 机器数是数字在计算机中的二进制表示形式,因此负数还是用补码表示
?2x的值是多少 -(2^32-2^3) 【 正确答案: -(2^32-2^3) 或 -2^32+2^3】?2x的机器数是什么 80 00 00 08H 【 正确答案: 00 00 00 08H 或 0000 0000 0000 0000 0000 0000 0000 1000】? 得分:9.00 |
---|
简答题
(1)与门/或门的延迟是1ty,异或门是3ty,
(2)进位的产生Ci=Gi+Pi*C(i-1),(Gi=AiBi与门, Pi=Ai+Bi或门,),此处的“+”是门电路的或门表示形式,与下文的加法中的“+”不同,加法通过异或门(3ty的延时)实现
(3)前面三个加法器的作用是得到进位,因此不需要慢慢计算Ai+Bi+Ci,直接用Ci=Gi+Pi*C(i-1)得到,而最后一个加法器需要计算Ai加Bi加C24,由于r=Ai+Bi在前面计算进位时就可以直接计算,因此得到进位C24后只需再计算r加C24【异或门实现(3ty的延时)】
# | 题目 | 分值 | 提交/评阅状态 |
---|---|---|---|
1. | 请求出所有和数产生的延迟为多少? (PS:与门/或门的延迟是1ty,异或门是3ty) | 10.00 | 得分:10.00
所有和数产生的延迟是12ty :3+2+2+5=12ty 由题易知,关键路径为:(A7-0,B7-0,C0)->C8->c16->C24->(R31-24)
计算依据:并行进位全加器令进位生成函数Gi=Ai*Bi,进位传递函数Pi=Ai+Bi 其的进位表达式为:Ci=Gi+Pi*C(i-1); 所以所有加法器同时计算Ci,Pi需要1ty , 需要2ty求出第一个先行进位加法器的进位C8。 因为这四个8位先行进位加法器之间是串行相连所以,计算出c8后需要2ty计算第二个加法器的进位C16,同理,算出C16后需要2ty计算得到进位C24,2ty计算得到进位C32.此外,还需要3ty求出所有和数 因此所有和数产生的延迟是12ty.
(2)并行进位加法器中的pi也可以表示为Pi=Ai异或Bi 所以如采用这种连接方式,则计算Ci,Pi需要3ty.所有和数产生的延迟是14ty.
参考答案: 关键路径为:关键路径: (A7-0、B7-0、C0) → C8→ C16 → C24 →(R31-24) 其中C8产生的延迟为3ty,为产生Pi Gi的输入时延为一个ty,加上先行进位的2ty,所以一共是3ty; 产生 C16 和 C24的延迟分别为2ty,因为其Pi Gi已经产生处于等待状态; 产生R31-24的时钟延迟为5ty,因为Pi Gi已经产生处于等待状态,而先行进位需要2ty,和数的输出需要再经过一级异或门延迟3ty。 所以总的延迟为:3+2+2+5=12ty。 |
2. | 采用IEEE 754单精度浮点数格式计算下列表达式的值。
0.75+(– 65.25) | 10.00 | 得分:8.00
初次提交时间: 2022-10-25 14:18:51 最后一次修改时间: 2022-10-25 21:56:40 (1)将十进制转化为二进制: 0.75(D)=0.11(B)=1.1*(2^-1) -65.25(D)=-1000001.01=-1.00000101*(2^6) 所以用IEEE754单精度浮点数格式表示为 [x]浮=0 0111 1110 100 0000 0000 0000 0000 0000 [y]浮=1 1000 0101 000 0010 1000 0000 0000 0000 (2)[x]移+[-y]移=0111 1110+0111 1011=1111 1001 所以两个阶数之差为-7 所以对x进行右移7位,则其尾数部分:000 0001 1000 0000 0000 0000 其阶码:1000 0101 [x]浮=0 1000 0101 000 0001 1000 0000 0000 0000 (3)两个尾数进行相加:(小数点前最高位为符号位,次高位为隐含的数) 00.000 0001 1000 0000 0000 0000 + 11.111 1101 1000 0000 0000 0000(y为负数所以用补码) 11.111 1111 00 0000 0000 0000 0000(求出来的结果是补码) 转换为原码:11.000 0001
(4)规格化:数值部分最高为一,不需规格化 (5)舍入:无需舍入 (6)溢出判断:阶码没有发生上溢或下溢,所以没有溢出 则结果为:(-1)*(1+0.000 0001)*2^6=-1000 000.1=-64.5
参考答案: x=0.75=0.11B=(1.10…0)2×2-1,y= –65.25= –1000001.01B = (–1.00000101…0) 2 ×26。 用IEEE 754标准单精度格式表示为[x]浮=0 01111110 10…0,[y]浮=1 10000101 000001010…0。假定用Ex、Ey分别表示[x]浮和[y]浮中的阶码,Mx、My分别表示[x]浮和[y]浮中的尾数,即Ex=0111 1110,Mx=0(1).10…0,Ey=1000 0101,My=1(1).000001010…0。尾数Mx和My的小数点前面有两位,第一位为数符,第二位加了括号,是隐藏位“1”。以下是机器中浮点数加/减运算过程(假定保留两位附加位:保护位和舍入位)。 ① 对阶。 [ΔE]补=Ex+[–E y]补=0111 1110 + 0111 1011=1111 1001 (mod 28),ΔE= –7,故需对x进行对阶,结果为Ex=Ey=1000 0101,Mx=00.000000110…0 00,即将x的尾数Mx右移7位,符号不变,数值高位补0,隐藏位右移到小数点后面,最后移出的高两位保留。 ② 尾数相加。 Mb=Mx+My=00.000000110…0 00+11.000001010…0 00 (注意小数点在隐藏位后)。根据原码加/减法运算规则(加法运算规则为“同号求和,异号求差”),得:00.000000110…0 00+11.000001010…0 00=11.000000100…0 00。上式尾数中最左边第一位是符号位,其余都是数值部分,尾数最后两位是附加位。 ③ 规格化。 根据所得尾数的形式,数值部分最高位为1,所以不需要进行规格化。 ④ 舍入。 将结果的尾数Mb中最后两位附加位舍入,从本例来看,不管采用什么舍入法,结果都一样,都是把最后两个0去掉,得:Mb = 11.000000100…0。 ⑤ 溢出判断。 在上述阶码计算和调整过程中,没有发生“阶码上溢”和“阶码下溢”的问题。 最终结果为Eb=1000 0101,Mb=1(1).00000010…0,即结果为(–1.0000001)2×2^6 = –64.5。 |
3. | 在IEEE 754浮点数运算中,当结果的尾数出现什么形式时需要进行左规,什么形式时需要进行右规?如何进行左规?如何进行右规? | 10.00 | 得分:10.00
初次提交时间: 2022-10-25 21:02:11 最后一次修改时间: 2022-10-25 21:21:27 (1)对结果为(+/-)1X.XXX……XX的情况需要右规,对于结果为(+/-)0.0001.XXX……XX的情况需要左规 (2)右规的方法:因为二进制两数相加不可能出现进两个位的情况,所以右规时只需尾数右移一位,阶码加一。右规时需注意,最高位的”1“被移到小数点前作为隐藏位,移动时不要忘记小数点前的“1”也要移动。且最后一位移出时,要考虑舍入。 (3)左规的方法:数字位逐次左移,阶码逐次加一,直到第一位的“1”被移到小数点的左边,(即个位);eg:假设左边第一个“1”与小数点之间零的个数为K,则左规表示为:M*(2^k)->M,阶码:(E-K)-->E。 左规时需要注意:左规后尾数和阶码都相对改变但值本身不变,所以左规后当前小数点前的“1”即为隐藏位。
参考答案: IEEE 754浮点数加、减、乘、除运算结果的尾数不可能大于等于4,因而尾数溢出的情况只可能是±1x .xx…x的形式。 (1) 对于结果为±1x .xx…x的情况,需进行右规。即尾数右移一位,阶码加1。右规操作可以表示为MbMb×2-1,EbEb+1。 右规时注意以下两点:a) 尾数右移时,最高位“1”移到小数点前一位作为隐藏位,最后一位移出时,要考虑舍入。b) 阶码加1前,先判断阶码是否为全1或1…10,若是,则发生阶码上溢导致结果溢出;否则,直接在阶码末位加1。 (2) 对于结果为±0.0…01x…x的情况,需进行左规。即数值位逐次左移,阶码逐次减1,直到将第一位“1”移到小数点左边。假定k为结果中“±”和左边第一个1之间连续0的个数,则左规操作可以表示为MbMb×2k,EbEb–k。 左规时注意以下几点:a) 尾数左移时数值部分最左k个0被移出,因此,相对来说,小数点右移了k位。b) 每次减1前,先判断阶码是否为全0,若是全0,则发生阶码下溢,不再进行左规操作,结果为非规格化数(尾数不为0时)或0(尾数为0时);否则,通过执行+11…1进行减1操作。c) 减1操作最多k次。 |
4. | 已知x = 10,y = – 6,采用6位机器数表示。请按如下要求计算,并把结果还原成真值。 (1) 求[x + y]补,[x–y]补。 (2) 用原码一位乘法计算[x×y]原。 ps:符号位是分开算,y虽然是负数但是还是用原码表示,相当于只看绝对值 (3) 用布斯乘法计算[x×y]补。 (4) 用不恢复余数法计算[x/y]原的商和余数。 | 10.00 | 得分:8.00 评语:还原真值 初次提交时间: 2022-10-25 22:18:39 最后一次修改时间: 2022-10-28 15:51:01 (1)[x]原=[x]补=001010 [y]原=100110, [y]补=111010 ,[-y]补=000110 [x+y]补=[x]补+[y]补=000100(B)=4(D) [x-y]补=[x]补+[-y]补=001010+000110=010000(B)=16(D)
参考答案: 先将x和y转换为二进制数。x=10=+01010B,y = –6 = –00110B。 (1)[x]补=0 01010 B,[y]补=1 11010 B,[–y]补=0 00110 B。 [x+y]补= [x]补+[y]补=0 01010 B + 1 11010 B =0 00100 B,因此,x+y=4。 [x–y]补= [x]补+[–y]补=0 01010 B + 0 00110 B = 0 10000 B,因此,x–y=+16。 (2)[x]原 = 0 01010 B,[y]原=1 00110 B。 将符号和数值部分分开处理。乘积的符号为0⊕1=1,数值部分采用无符号整数乘法算法计算01010×00110的乘积。原码一位乘法过程描述如下:初始部分积为0,在乘积寄存器前增加一个进位位。每次循环首先根据乘数寄存器中最低位决定+X还是+0,然后将得到的新进位、新部分积和乘数寄存器中的部分乘数一起逻辑右移一位。共循环5次,最终得到一个10位无符号数表示的乘积00001 11100 B。所以,[x×y]原=1 00001 11100 B,因此,x×y= –60。若结果取6位原码,则因为高5位00001是一个非0数,所以,结果溢出,即[x×y]原≠1 11100。验证:6位原码的表示范围为-31~+31,显然乘积–60不在其范围内,结果应该溢出。(过程略) (3)[x]补=0 01010 B,[–x]补=1 10110 B, [y]补=1 11010 B。 采用Booth算法时,符号和数值部分一起参加运算,最初在乘数后面添0,初始部分积为0。每次循环先根据乘积寄存器中最低两位决定执行+X、–X还是+0操作,然后将得到的新的部分积和乘数寄存器中的部分乘数一起算术右移一位。–X用+[–x]补实现。共循环6次。最终得到一个12位补码表示的乘积111111 000100 B,所以,[x×y]补=111111 000100 B,因此,x×y=–60。若结果取6位补码,则根据乘积低6位000100的符号位为0,而高6位为111111,不等于全0,说明结果溢出,即[x×y]补≠0 00100。验证:6位补码的表示范围为-32~+31,显然乘积–60不在其范围内,结果应该溢出。(过程略) (4)[x]原 =0 01010 B,[y]原=1 00110 B。 将符号和数值部分分开处理。商的符号为0⊕1=1,数值部分采用无符号整数除法算法计算01010 B和00110 B的商和余数。无符号整数不恢复余数除法过程描述如下:初始中间余数为0 00000 01010 0,其中,最高位为添加的符号位,用于判断余数是否大于等于0;最后一位0为第一次上的商,该位商只是用于判断结果是否溢出,不包含在最终的商中。因为结果肯定不溢出,所以该位商可以直接上0,并先做一次–Y操作得到第一次中间余数,然后进入循环。每次循环首先将中间余数和商一起左移一位,然后根据上一次上的商(或余数的符号)决定执行+Y还是–Y操作,以得到新的中间余数,最后根据中间余数的符号确定上商为0还是1。–Y采用+[–y]补的方式进行。整个循环内执行的要点是“正、1、减;负、0、加”。共循环5次。最终得到一个6位无符号数表示的商0 00001和余数00100,其中第一位商0必须去掉,添上符号位后得到最终的商的原码表示为1 00001,余数的原码表示为0 0100。因此,x/y的商为–1,余数为4。(过程略) |
5. | 已知x=0.5, y=-0.0625, 求x+y=? (用IEEE754标准单精度格式计算)
| 10.00 | 得分:8.00
初次提交时间: 2022-10-25 21:22:24 最后一次修改时间: 2022-10-25 22:15:35 (1)x=0.5(D)=0.1(B)=1*2^(-1) y=-0.0625(D)=-0.0001(B)=-1*2^(-4) 所以用IEEE754单精度浮点数格式表示为 [x]浮=0 0111 1110 000 0000 0000 0000 0000 0000 [y]浮=1 0111 1011 000 0000 0000 0000 0000 0000 (2) [x]移+(-[y]移)补=0111 1110+1000 0101=0000 0011 所以两个阶数之差为3 所以对y进行右移3位,则其尾数部分:001 0000 0000 0000 0000 0000 其阶码:0111 1110 [y]浮=0 0111 1110 001 0000 0000 0000 0000 0000 因为y是负数,因此应该用补码进行计算得到的结果也是补码,应该还原为原码
(3)尾数相加: (x) 01.000 0000 0000 0000 0000 0000 + (y的补)11.111 0000 0000 0000 0000 0000 00.111 0000 0000 0000 0000 0000 (4)规格化:数值部分最高为一,不需规格化 (5)舍入:无需舍入 (6)溢出判断:阶码没有发生上溢或下溢,所以没有溢出 则结果为:(-1)*(0.111)*2^(-1)=-0.0475 |