《计算机组成原理》理论课程作业与笔记归档¶
📖 阅读信息
阅读时间约 4 分钟 | 约 440 字 | 约 11 个公式 | 约 103 行代码
供存档和复习用。
第一次作业¶
李琰,2024302183007
第二次作业¶
这个题并不需要我们进行具体的运算。只需要按规则译码即可。
(1) 无符号整数,直接原码译码: \(R_1: 108B_{16}=4235_{10}\),\(R_2: 8080108B_{16}=2155876491_{10}\)
(2) 有符号整数,按补码译码: \(R_1: 108B_{16}=4235_{10}\),\(R_2\) 直接模运算: \(2155876491-4294967296=-2139090805\)
(3) FP32: S1E8M23, FP64: S1E11M52,首先写成二进制并且把符号位,阶码,尾数断开:
得到:
为简便,使用十六进制表记。
关系表达式 | 运算类型 | 结果 | 说明 |
---|---|---|---|
0==0U | 无符号整数 | 1 | 0000 0000H = 0000 0000H |
-1 < 0 | 带符号整数 | 1 | FFFF FFFFH(-1) < 0000 0000H(0) |
-1 < 0U | 无符号整数 | 0 | 11…1B(2³²-1)>00…0B(0) |
2147483647 > -2147483647 - 1 | 带符号整数 | 1 | 011…1B(2³¹-1)>100…0B(-2³¹) |
2147483647U > -2147483647 - 1 | 无符号整数 | 0 | 7FFF FFFFH(2³¹-1) < 8000 0000H (2³¹) |
2147483647 > (int)2147483648U | 带符号整数 | 1 | 7FFF FFFFH > 8000 0000H (-2³¹) |
-1 > -2 | 带符号整数 | 1 | FFFF FFFF(-1) > FFFF FFFE(-2) |
(unsigned)-1 > -2 | 无符号整数 | 1 | FFFF FFFF(2³²-1) > FFFF FFFE(2³²-2) |
我们首先得到数据的字节型表示:
在小端序机器上面:
在大端序机器上面:
第三次作业¶
w | func1(w) | func2(w) | |||
---|---|---|---|---|---|
机器数 | 值 | 机器数 | 值 | 机器数 | 值 |
0000 007F | 127 | 0000 007F | 127 | 0000 007F | 127 |
0000 0080 | 128 | 0000 0080 | 128 | FFFF FF80 | -128 |
0000 00FF | 255 | 0000 00FF | 255 | FFFF FFFF | -1 |
0000 0100 | 256 | 0000 0000 | 0 | 0000 0000 | 0 |
关键点是逻辑移位不补零,算术移位补零,以及整数移位的截断。
表示 | X | x | Y | y | X+Y | x+y | OF | SF | CF | X-Y | x-y | OF | SF | CF |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
无符号 | 0xB0 | 176 | 0x8C | 140 | 0x3C | 316 | 1 | 0 | 1 | 0x24 | 36 | 0 | 0 | 0 |
带符号 | 0xB0 | -80 | 0x8C | -116 | 0x3C | -196 | 1 | 0 | 1 | 0x24 | 36 | 0 | 0 | 0 |
从硬件角度理解,\(OF = C_{out} \oplus C_{n-1}\), \(SF = F_{n}\), \(CF = C_{out} \oplus Sub\)。
加法时,\(C_{out}=1,C_{n-1}=0,F_{n}=0,Sub=0\),根据上述计算规则可得各标志位值。
减法时,\(C_{out}=1,C_{n-1}=1,F_{n}=0,Sub=1\),根据上述计算规则可得各标志位值。
从意义上理解,加法时结果为正数,出现溢出且最高位产生进位;减法时结果也为正数,未出现溢出或产生最高位的进位。
55 = 56 - 1, 56 = 7 * 8 = (8 - 1) * 8,由此可以构造:
仅需 3 + 1 + 3 + 1 = 8 个 clk.
(1) 永真。int 转 double 不会出现 INF 或者 NaN,因此无论如何都是大于零的。
(2) float 在 x 接近 INT_MAX 的时候,粒度会变稀到小于 1。因此当 x = 2146483647 时为假。
(3) 显然 x+y 溢出时两者不等。取 x = 2146483647, y = 1 即可。
(4) 永真。这里没有大数吃小数的问题,因为 double 在 int 的粒度足够。
(5) 永真,理由同上。
(6) 取 x = 0, y = 1,这样 dx/dx = -nan。
📝 如果您需要引用本文
Yan Li. (Sep. 28, 2025). 《计算机组成原理》理论课程作业与笔记归档 [Blog post]. Retrieved from https://dicaeopolis.github.io/campus-sources/SDC_assignments
在 BibTeX 格式中: