67
《计算机组成原理》部分答案(ch6~ch7)
6.2. 解:(1) 0.1××××1,所以,a1=a6=1,其余任取0或1;
(2) 0.001×××,所以,a1=a2=0,a3=1其余任取0或1;
(3) 0.00×1×× < X <= 0.010000,所以,a1=0,且:
当a2=1时,其余取0;当a2=0时,a4=1,其余取0或1。
6.3. 解:x为整数,且 [x]补=1,x1x2x3x4x5,则x一定为负整数,|x|=-x。
[ |x| ]补 = [-x]补=
要求x<-16,则 |x| >16,则[ |x| ]补 > 0,10000
由上两式知: > 0,01111,所以,( )min=0,10000。
所以:x1=0,其余任取0或1
6.4. 解:(-13/64)=((-8-5)/26 )= -(1000+0101) B /(26) =(-1101)B /(26)= (-0.001101)B
已知符号位1,数值位7,令x=(-13/64), 则 [x]原=1,0011010,[x]补=1,1100110
6.7 解:当x>=0时成立,x<0 时不成立。
证明:x<0,-x = x*,[-x]补= [x*]补;
x*为绝对值,则(-x*)<0,则 [-x*]补 [x*]补。
由上两式知:x<0 时,[-x*]补 [-x]补。
6.8 [ 提示 ] 分4种情况讨论:x>=0, y>=0;x<0, y<0;x>=0, y<0;x<0, y>=0;
6.10 解:设机器数符号位1,数值位7。
[+0]原=0,0000000,[+0]反=0,0000000,[+0]补=0,0000000,[+0]移=1,0000000,
[-0]原=1,0000000, [-0]反=1,1111111, [-0]补=0,0000000,[-0]移=1,0000000,
结论:在补码、移码中, 用一个码表示。
6.12. 解:x=(51/128)= (110011) B /(27) = (+0.0110011)B
规格化后为:x= + 0.110011×2(-01)。所以:s = +0.110011, J=-01
当阶码、尾数为原码,则浮点数: 1,0001;0,1100110000。
当阶码、尾数为补码,则浮点数: 1,1111;0,1100110000。
当阶码为移码、尾数为补码,则浮点数:0,1111;0,1100110000。
6.15. 解: (见P232)。
(1) 机器零定义:下面两种情况均称之为“机器零”,①浮点数的尾数为0,不论阶码为何值, ②浮点数的阶码等于或小于它所能表达的最小数,不论尾数为何值。
若要求全零表示“机器零”,则浮点数的阶码以移码表示,尾数以补码表示。
6.16 解:(1) 16位机器数,无符号数表示范围:0~(215-1)
(2) 定点小数原码表示,数的范围:-(1-2-15)~+(1-2-15)
(3) 定点小数补码表示,数的范围:-1~+(1-2-15)
(4) 定点整数补码表示,数的范围:-215~+(215-1)
(5) 定点整数原码表示,数的范围:-(215-1)~+(215-1)
(6) 浮点数阶码与尾数均为原码,阶码位6(含阶符1位),尾数位10(含数符1位),则
阶码为整数,数值位5: |J|max= 25-1 = 31
尾数为小数,数值位9,非规格化:|S|max= 1-2-9, |S|min= 2-9
浮点数为正数,其范围:2-9×2-31~(1-2-9)×231
浮点数为负数,其范围:-(1-2-9)×231~-2-9×2-31
(7) 浮点数阶码与尾数均为补码,阶码位6(含阶符1位),尾数位10(含数符1位),则
阶码为整数,数值位5: Jmax= 25-1 = 31,Jmin= -25= -32
尾数为小数,数值位9,规格化:S为正数,则 2-1~(1-2-9)
S为负数,则 -(2-1+2-9)~-1
浮点数为正数,其范围:2-1×2-32~(1-2-9)×231
浮点数为负数,其范围:-1×231~-(2-1+2-9)×2-32
6.17 解(第1题,移位规则见书P234表6.4):(1) [x]原=0.0011010,x = +(13/64)
原码算术左移1位:[x]原=0.0110100,x=+(26/64)。算术左移1位相当于x*2,结果正确。
原码算术左移2位:[x]原=0.1101000,x=+(52/64)。算术左移2位相当于x*4,结果正确。
原码算术右移1位:[x]原=0.0001101,x=+(13/128)。算术右移1位相当于x/2,结果正确。
原码算术左移2位:[x]原=0.0000110,x=+(6/128)。算术右移2位,最低位“1”移丢,近似等于x*4,所以影响精度。
[结论] 原码左移一次高位丢0,相当于*2,左移一次高位丢1,结果溢出。
原码右移一次低位丢0,相当于/2,右移一次低位丢1,影响精度。
(负数反码移位是否正确,判断见P236)
[x]反=1. 0101111, x=-(5/8)
反码算术左移1位:[x]反=1. 1011111,x=-(1/4)。负数算术左移丢0,结果溢出,不正确。
反码算术左移2位:[x]反=1.0111111,x=-(1/2)。结果不正确。
反码算术右移1位:[x]反=1. 1010111,x=-(5/16)。算术右移1位相当于x/2,结果正确。
反码算术右移2位:[x]反=1.1101011,x=-(5/32)。算术右移2位相当于x/4,结果正确。
[结论] 反码左移一次高位丢1,结果相当于x*2,左移一次高位丢0,结果溢出。
反码右移一次低位丢1,相当于x/2,右移一次低位丢0,影响精度。
[x]补=0. 1010100, x= +(21/32),x为正数,[x]补=[x]反=[x]原,移位规则均相同,书P234表6.4。
略。
[x]补=1.1101000, x= -(3/16),负数补码移位规则见书P234表6.4。
补码算术左移1位:[x]补=1.1010000,x=-(3/8)。结果正确。
补码算术左移2位:[x]补=1. 0100000,x=-(3/4)。结果正确。
补码算术右移1位:[x]补=1.1110100,x=-(3/32)。结果正确。
补码算术右移2位:[x]补=1.1111010,x=-(3/64)。结果正确。
[结论] 补码左移一次高位丢1,结果相当于x*2,左移一次高位丢0,结果溢出。
补码右移一次低位丢0,相当于x/2,右移一次低位丢1,影响精度。
6.19 (4) A=-87=-(1010111)B,B=+53=+(110101)B
机器数符号位1,数值位7,则:[A]补=1,0101001,[B]补=0,0110101,[-B]补=1,1001011
[A-B]补=[A+(-B)]补=[A]补+[-B]补
所以, 11, 0101001
+ 11, 1001011
----------------------- 结果溢出判断:最高位1溢出,因此双符号位为10。
110 ,1110100 因符号位两位不同,所以结果溢出。
A=9/64,B=-(13/32) ,机器数符号位1,数值位7。
A=(1001)B/26=+(0.0010010)B,B=-(1101)B/25=-(0.0110100) B
[A]补=0.0010010,[B]补=1.1001100
所以, 00.001 0010
+ 11.100 1100
----------------------- 结果溢出判断:双符号位为11,两符号位同号,
11 .101 1110 所以结果为负,不溢出。
[A+B]补=[A]补+[B]补=1.1011110,所以,A+B=-(0.0100010)B=-(17/64)
6.22 由题知:机器数符号位1,数值位15。因此,
原码一位乘需:右移15次,加法15次。则共需要时间15×1+15×1=30微秒。
补码加减交替需:右移15次,加法16次。则共需要时间15×1+16×1=31微秒。
6.28 定点加减运算结果溢出判断有2种方法:
(1) 变形补码判断溢出原则,符号位为2位,当2位符号位不同时,表示溢出,否则无溢出。
(2)符号位为1位,符号位进位 数值位最高有效位进位,其结果为1表示溢出,结果为零表示无溢出。
7.10 解:(参见书P314~316) 两种寻址方式定义如下:
基址寻址:操作数的有效地址(EA)为:EA = A + (BR)。其中,操作数的基地址存放于寄存器(BR)中,指令中的形式地址(A)为地址增量。
变址寻址:操作数的有效地址(EA)为:EA = A + (IX)。其中,指令中的形式地址(A)为操作数的基地址,地址增量存放于寄存器(IX)中。
基址寻址和变址寻址都可扩大操作数的寻址范围,两者的寻址过程也极为相似。但两者的应用场合不同,存在本质上的区别。
基址寻址:主要用于为程序和数据分配存储空间,在多道程序中极为有用。基址寄存器的值通常由操作系统或管理程序根据主存的使用状况来赋予,并且在程序执行过程中,指令中的形式地址A可更改,但基址寄存器的值不可变,以确保系统安全可靠地允许。
变址寻址:变址寄存器的内容由用户设定。在程序执行过程中变址寄存器的值可变,而指令中的形式地址A不可变。因此,变址寻址主要用于处理数组问题。在数组处理过程中,设定A为数组的首地址,利用循环程序不断改变变址寄存器的内容,可很容易地形成数据组中任一数据的地址。
7.14(参见书P317) 相对寻址:操作数的有效地址(EA)为EA = (PC) + A。其中,(PC)表示PC寄存器的值,A为指令字中的形式地址。
[ 分析 ] (PC) 是指PC寄存器的当前值。我们知道,当CPU从主存中读取一条指令后,PC要自动指向下一条指令的地址。因此,按题意,PC读取了一条“JMP * A”指令后,PC的值自动指向下一条指令的地址。
JMP |
Δ |
|
|
…… |
PCà 2000H
PC+1=PCà 2001H
PC+1=PCà 2002H
以“JMP * -9”为例:当该条指令被读入CPU后,PC自动指向下一条指令的地址。如题所述:该指令占2B,CPU每取一个字节,自动完成“PC+1=PC”。因此,该指令取出后,PC的当前值为PC= PC+2=2000+2=2002H,记为:
“(PC)current= 2002H”。
[ 说明 ] 程序员在用汇编语言写指令时,无需知道指令在内存中的存放方式,及指令执行过程中CPU内部寄存器值的变化。因此,程序员写转移指令时所要求的目的地址应为:
(EA)dest = 2000H+(-9H) = 1FF7H
但我们知道,计算机直接面对的是二进制代码,即机器语言,并非汇编语言或其他高级语言。因此,汇编语言要通过编译软件编译为机器语言,保存在主存中的也是机器语言。因此,主存里的该条指令的第二个字节(相对位移量)有可能不等于指令中的形式地址。具体为多少,必须分析相对寻址方式的特点,以及指令寄存器PC的值的变化才能知道。
解:此转移指令占2字节,且CPU每取一字节便自动完成(PC)+1àPC的操作,所以:
(PC)current= 2000+2=2002H,H为16进制符号。
又该指令是采用相对寻址方式的转移指令,其目的地址为程序员所要求的目的地址:
(EA)dest=2000H+(-9H)=1FF7H,H为16进制符号。
根据公式(EA)dest = (PC)current + A,则内存中该转移指令的第2个字节内容应为:
A = (EA)dest-(PC)current
前面分析可知:(EA)dest=1FF7H,(PC)current = 2002H。将它们代入上式,可得:
A =1FF7H-2002H=-0BH
由题知,相对位移量以补码表示。所以,主存中的该转移指令的第2个字节应为:
Δ = [A]补= [-0001011]补 = 1,1110101B=F5H
即,主存中的该转移指令的第2个字节为:F5
7.16(指令设计请参考书P324~325题7.5与题7.6)解:
(1) 由题知:108种操作 指令字中操作码长度 log2(108),所以,操作码长度 = 7 bits。
6种寻址方式 指令字中寻址方式码长 log2(6),所以,寻址方式码长 = 3 bits。
指令字长 = 存储字长 = 16 bits,则一地址指令格式下,指令中地址码长度=16-7-3=6 bits
一地址指令设计如下:
OP |
M |
AD |
7 |
3 |
6 |
直接寻址方式下,指令字中的地址字段直接指出存储在主存中的操作数的地址。上题中已设计出一地址指令格式,其地址字段长度 = 6 bits。所以:
直接寻址方式的最大寻址范围是:0~(26-1)
一次间接寻址范围与多次间接寻址范围都取决于主存的存储字长,所以为:0~(216-1)。
立即寻址方式下,指令字中的AD字段表示操作数,其范围为:-(25-1)~( 25-1)。
相对寻址的位移量:-(25-1)~( 25-1)。
立即寻址方式的指令,其执行时间最短,因为CPU对指令译码后直接获得操作数;间址寻址方式的的指令,其执行时间最长,因为CPU对指令译码后需要至少2次访存才能获得操作数;基址寻址便于程序浮动,变址寻址适合处理数组问题。
4M = 222。一地址指令中,地址字段长度 = 6 bits,则 22-6=16 bits。
同时,存储字长=16 bits,所以,指令格式修改为:
7 |
3 |
6 |
OP |
M |
AD1 |
AD2 | ||
22 |
AD1//AD2表示地址,
地址字段长度 = 6+16=22 bits,该指令在主存中占2个存储字。
7.20 解:RISC——简单指令系统计算机。
RISC的7项特点:参加书P330。
-------------------------------------------------
!!!作者:木由水 http://www.cnblogs.com/muyoushui