计算机组成原理习题课 1 授课老师 : 王浩宇 haoyuwang@bupt.edu.cn 1
练习 : 机器数的表示和相互转化 练习 1: 当十六进制数 9B 和 FF 分别表示为原码 补码 反码 移码和无符号数时, 所对应的十进制数各为多少 ( 设机器数采用一位符号位 )? 16 进制 真值 无符号数 原码 ( 真值 ) 反码 ( 真值 ) 补码 ( 真值 ) 移码 ( 真值 ) 9BH 二进制十进制 1001 1011 155-001 1011-27 -1100100-100 -1100101-101 +11011 +27 FFH 二进制十进制 1111 1111 255-1111111 -127-0000000 -0-0000001 -1 +1111111 +127 2
练习 : 机器数的表示范围 设机器数字长为 16 位, 写出下列各种情况下它能表示的数的范围 设机器数采用一位符号位, 答案均用十进制表示 (1) 无符号数 ; (2) 原码表示的定点小数 (3) 补码表示的定点小数 (4) 补码表示的定点整数 (5) 原码表示的定点整数 (6) 浮点数的格式为 : 阶码 6 位 ( 含 1 位阶符 ), 尾数 10 位 ( 含 1 位数符 ) 当阶码和尾数均采用原码, 非规格化数表示时, 分别写出其正数和负数的表示范围 (7) 浮点数格式同 (6), 机器数采用补码规格化形式, 分别写出其对应的正数和负数的真值范围 3
设机器数字长为 16 位, 写出下列各种情况下它能表示的数的范围 设机器数采用一位符号位, 答案均用十进制表示 掌握 : 浮点数和定点数的表示范围 解答 : (1) 无符号数 0~2 16-1 1111 1111 1111 1111 (2) 原码定点小数 (1-2 -15 ) ~ 1-2 -15 1.111 1111 1111 1111 0.111 1111 1111 1111 (3) 补码定点小数 -1 ~ 1-2 -15 1.000 0000 0000 0000 0.111 1111 1111 1111 (4) 补码定点整数 - 2 15 ~2 15-1 1000 0000 0000 0000 0111 1111 1111 1111 (5) 原码定点整数 (2 15-1) ~ 2 15-1 1111 1111 1111 1111 0111 1111 1111 1111 4
(6) 浮点数的格式为 : 阶码 6 位 ( 含 1 位阶符 ), 尾数 10 位 ( 含 1 位数符 ) 当阶码和尾数均采用原码, 非规格化数表示时, 分别写出其正数和负数的表示范围 正数 最大正数 = 0 11111;0.111 111 111 最小正数 = 1 11111;0.000 000 001 负数 最下负数 = 1 11111;1.000 000 001 最小负数 = 0 11111;1.111 111 111 5
设机器数字长为 16 位, 写出下列各种情况下它能表示的数的范围 设机器数采用一位符号位, 答案均用十进制表示 (7) 机器数采用补码规格化 6
练习 : 机器数表示范围 假定有 4 个整数用 8 位补码分别表示为 r1=feh,r2=f2h, r3=90h,r4=f8h 若将运算结构存放在一个 8 位寄存器中, 则下列运算中会发生溢出的是 A.r1 r2 B. r2 r3 C. r1 r4 D. r2 r4 用补码表示时,8 位寄存器能够表示的整数范围? r1=-2,r2=-14,r3=-112,r4=-8 r2*r3=1568, 结果溢出 -128~+127 7
练习 : 浮点数的表示范围 浮点数阶码 4 位 ( 含阶符 ), 尾数 9 位 ( 含数符 ), 均用补码表示, 求规格化和非规格化时数值范围 回顾 : 上溢区 负数区 下溢区 正数区 上溢区 最小负数 最大负数 0 最小正数 最大正数 尾数负的最小值负的最大值正的最小值正的最大值 阶码正的最大值负的最小值负的最小值正的最大值 8
阶码 4 位, 用补码表示, 其表示范围 : 1,000 1,111 0 0,001 0,111-2 3-1 1 2 3-1 尾数用补码, 且规格化, 其表示范围 : 1.00000000 1.01111111 0 0.10000000 0.11111111-1 -(2-1 +2-8 ) 2-1 1-2 -8 尾数用补码, 不规格化, 其表示范围 : 1.00000000 1.11111111 0 0.00000001 0.11111111-1 -2-8 2-8 1-2 -8 正最大 : 尾数正最大 *2 阶正最大负最大 : 尾数负最大 *2 阶负最小 正最小 : 尾数正最小 *2 阶负最小负最小 : 尾数负最小 * 2 阶正最大 9
练习 : 机器数的格式化表示 设浮点数格式为 : 阶码 5 位 ( 含 1 位阶符 ), 尾数 11 位 ( 含 1 位数符 ) 写出 51/128-27/1024 7.375-86.5 所对应的机器数 要求如下 : (1) 阶码和尾数均为原码 (2) 阶码和尾数均为补码 (3) 阶码为移码, 尾数为补码 阶符阶码数符尾数 将十进制数转换为二进制 : x 1 =51/128=(0.011 001 1) 2 =2-1 (0.110 011) 2 x 2 = -27/1024=(-0.000 001 101 1) 2 =2-5 (-0.110 11) 2 x 3 =7.375=(111.011) 2 =2 3 (0.111 011) 2 x 4 = -86.5=(-1 010 110.1) 2 =2 7 (-0.101 011 01) 2 10
则以上各数的浮点规格化数为 : X1= 2-1 (0.110 011) 2 (1)[x 1 ] 浮 =1,0001;0.110 011 000 0 (2)[x 1 ] 浮 =1,1111;0.110 011 000 0 (3)[x 1 ] 浮 =0,1111;0.110 011 000 0 (1) 阶码和尾数均为原码 (2) 阶码和尾数均为补码 (3) 阶码为移码, 尾数为补码 X2= 2-5 (-0.110 11) 2 (1)[x 2 ] 浮 =1,0101;1.110 110 000 0 (2)[x 2 ] 浮 =1,1011;1.001 010 000 0 (3)[x 2 ] 浮 =0,1011;1.001 010 000 0 11
则以上各数的浮点规格化数为 : x3 =2 3 (0.111 011) 2 (1)[x3] 浮 =0,0011;0.111 011 000 0 (2)[x3] 浮 =0,0011;0.111 011 000 0 (3)[x3] 浮 =1,0011;0.111 011 000 0 (1) 阶码和尾数均为原码 (2) 阶码和尾数均为补码 (3) 阶码为移码, 尾数为补码 x4 =2 7 (-0.101 011 01) 2 (1)[x 4 ] 浮 =0,0111;1.101 011 010 0 (2)[x 4 ] 浮 =0,0111;1.010 100 110 0 (3)[x 4 ] 浮 =1,0111;1.010 100 110 0 12
练习 : 机器数的格式化表示 将下列十进制数表示成浮点规格化数, 阶码 4 位 ( 含符号 ), 分别用补码和移码表示 ; 尾数 6 位 ( 含符号 ), 用补码表示 (1)19/512 (2) -19/512 解 : 19/512=10011 2-9 =0.10011 2-4 [ 阶 ] 原 =1100,[ 阶 ] 补 =1100,[ 阶 ] 移 =0100 [ 尾 ] 原 =0.10011, [ 尾 ] 补 =0.10011-19/512: [ 尾 ] 补 =1.01101 阶码用补码, 尾数用补码 阶码用移码, 尾数用补码 19/512 0 1100 10011 0 0100 10011-19/512 1 1100 01101 1 0100 01101 13
练习 : 机器数的格式化及表示范围 设浮点数的格式为 : 第 15 位为符号位, 第 14 位到第 8 位为阶码, 采用补码表示 ; 第 7 位到第 0 位为尾数, 与符号位一起采用规格化的补码表示, 基数为 2 问 : 它能表示的正数和负数的数值范围是什么? 符号阶码 尾数 阶码 7 位 ( 含符号 ), 尾数 9 位 ( 含符号 ) 阶码用补码, 表示范围 :-2 6 ~+2 6-1 尾数用规格化补码, 表示范围 : 1.00000000~1.01111111, 0.10000000~0.11111111-1~-(2-1 +2-8 ), +2-1 ~+(1-2 -8 ) 正数范围 : 2-1 2-26 ~ (1-2 -8 ) 2 (26-1) 负数范围 :-1 2 (26-1) ~ -(2-1 +2-8 ) 2-26 14
练习 :IEEE 754 标准 以 IEEE 754 单精度浮点数格式表示下列十进制数 : +1.75,+19, 1/8,258 32 位浮点数 31 30 23 22 S E M 0 1 位数符 8 位阶码, 包括阶符 23 位尾数, 仅为数值部分 +1.75 = +1.11B = 1.11B 2 0, 故阶码为 0+127=01111111B, 数符为 0, 尾数为 1.110 0, 小数点前为隐藏位, 所以 +1.7 表示为 0 01111111 110 0000 0000 0000 0000 0000, 用十六进制表示为 3FE00000H +19 = +10011B = +1.0011B 2 4, 故阶码为 4+127 = 10000011B, 数符为 0, 尾数为 1.00110 0, 所以 +19 表示为 0 10000011 001 1000 0000 0000 0000 0000, 用十六进制表示为 41980000H 15
练习 :IEEE 754 标准 32 位浮点数 31 30 23 22 S E M 0 1 位数符 8 位阶码, 包括阶符 23 位尾数, 仅为数值部分 1/8 = 0.125 = 0.001B = 1.0 2 3, 阶码为 3+127 = 01111100B, 数符为 1, 尾数为 1.0 0, 所以 1/8 表示为 1 01111100 000 0000 0000 0000 0000 0000, 用十六进制表示为 BE000000H 258=100000010B=1.0000001B 2 8, 故阶码为 8+127=10000111B, 数符为 0, 尾数为 1.0000001, 所以 258 表示为 0 10000111 000 0001 0000 0000 0000 0000, 用十六进制表示为 43810000H 16
练习 :IEEE 754 标准 float 类型 ( 即 IEEE754 单精度浮点数格式 ) 能表示的最大正整数是 A. 2 126-2 103 B. 2 127-2 104 C. 2 127-2 103 D. 2 128-2 104 IEEE 754 标准的单精度浮点数, 尾数采用隐藏位策略的原码表示, 阶码用移码表示 规格化的单精度浮点数真值? (-1) s * 1.f * 2 E-127 S 为符号位,E 的取值为 1~254(8 位表示 ),f 为 23 位, 故 float 类型能表示的最大整数是 1.111.1* 2 254-127 = 2 127 *(2-2 -23 ) = 2 128-2 104 17
练习 :IEEE 754 标准 假定一台 32 位字长的机器中带符号整数用补码表示, 浮点数用 IEEE754 标准表示, 寄存器 R1 和 R2 的内容分别为 R1: 0000108BH,R2:8080108BH 不同指令对寄存器进行不同的操作, 因而, 不同指令执行时寄存器内容对应的真值不同 假定执行单精度浮点数减法指令时, 操作数为寄存器 R1 和 R2 的内容, 则 R1 和 R2 中操作数的分别是多少? R1:0 000 0000 0 000 0000 0001 0000 1000 1011 B R2: 1 000 0000 1 000 0000 0001 0000 1000 1011 B 单精度浮点数 R1 的阶 :0-126=-126, R2 的阶 :-126 R1 的尾数 :0. 000 0000 0001 0000 1000 1011B R2 的尾数 : -1.000 0000 0001 0000 1000 1011B 18
练习 :IEEE 754 标准 float 型数据据常用 IEEE754 单精度浮点格式表示 假设两个 float 型变量 x 和 y 分别存放在 32 位寄存器 f1 和 f2 中, 若 (f1)=cc90 0000H,(f2)=B0C0 0000H, 则 x 和 y 之间的关系为 A.x<y 且符号相同 C.x>y 且符号相同 B.x<y 且符号不同 D.x>y 且符号不同 19
练习 :IEEE 754 标准 float 型数据据常用 IEEE754 单精度浮点格式表示 假设两个 float 型变量 x 和 y 分别存放在 32 位寄存器 f1 和 f2 中, 若 (f1)=cc90 0000H,(f2)=B0C0 0000H, 则 x 和 y 之间的关系为 A.x<y 且符号相同 C.x>y 且符号相同 B.x<y 且符号不同 D.x>y 且符号不同 20
练习 : 类型转化 假定编译器规定 int 和 short 类型长度占 32 位和 16 位, 执行下列 C 语言语句 unsigned short x = 65530; unsigned int y = x; 得到 y 的机器数为 A. 0000 7FFA B. 0000 FFFA C. FFFF 7FFA D. FFFF FFFA 一个 16 位的 unsigned short 转换成一个 32 位的 unsigned int, 新表示形式的所有附加位都用 0 进行填充 FFFA -> 0000 FFFA 21
练习 以下是 C 语言程序, 用来计算一个数组 a 中每个元素之和 当参数 len 为 0 时, 返回值应该是 0, 但在机器上执行时, 却发生了存储器异常 分析原因并修改程序 float sum_elem(float a[], unsigned len) { int i; } float result=0; for (i=0;i<=len-1;i++) result+=a[i]; return result; 解 :len 为 unsigned 类型, 因此,len 为 0 时,len-1 的值为 FF..FH, 而 i=0, 条件满足 但 a 并没开辟足够的空间 22
练习 : 大端与小端存储模式 假定在一个程序中定义了变量 x y 和 i, 其中,x 和 y 是 float 型变量 ( 用 IEEE754 单精度浮点数表示 ),i 是 16 位 short 型变量 ( 用补码表示 ) 程序执行到某一时刻, x = 0.125 y=7.5 i=100, 它们都被写到了主存 ( 按字节编址 ), 其地址分别是 100,108 和 112 请分别画出在大端机器和小端机器上变量 x y 和 i 在内存的存放位置 23
练习 : 大端与小端存储模式 24