パタヘネ第6版 第2章演習問題解答
6th editionについての解答。
解答がおかしいとかがありましたらSen(@nonpro3)のTwitterアカウントにDMやリプライ飛ばしてください。
大体ここにある。ほとんどそろっている。先駆者様ありがとうございます!
上で事足りると思うが、ここにもあるよ!
ただし、これは最新の6th editionではないので、下に対応表と乗ってない問題の回答を載せる。
6th edition | old |
---|---|
2.1 | 2.1 |
2.2 | 2.2 |
2.3 | 2.3 |
2.4 | 2.4 |
なし | 2.5 |
なし | 2.6 |
2.5 | 2.7 |
2.6 | 2.8 |
2.7 | 2.9 |
2.8 | 2.10 |
2.9 | 2.11 |
2.10 | 2.12 |
2.11 | 2.13 |
2.12 | 2.14 |
2.13 | 2.15 |
2.14 | 2.16 |
2.15 | 2.17 |
2.16 | 2.18 |
2.17 | 2.19 |
2.18 | 2.20 |
2.19 | 2.21 |
2.20 | 2.22 |
2.21 | 2.23 |
2.22 | 2.24(少し違う) |
2.23 | 2.25 |
2.24 | 2.26 |
2.25 | 2.27 |
2.26 | 2.28 |
2.27 | 2.29 |
2.28 | 2.30 |
2.29 | 2.31 |
なし | 2.32 |
2.30 | 2.33 |
2.31 | 2.34 |
2.32 | 2.35 |
2.33 | 2.36 |
2.34 | 2.37 |
2.35 | 2.38(全てじゃない) |
2.36 | なし |
なし | 2.39 |
なし | 2.40 |
なし | 2.41 |
なし | 2.42 |
なし | 2.43 |
2.37 | 2.44 |
2.38 | 2.45?(少し違う) |
2.39 | 2.46 |
2.40 | 2.47 |
2.41 | なし |
2.42 | なし |
以下の者はすべて6th editionのもので新規追加された問題の回答。
2.22
2.22.1
jal命令は、J形式で、即値は32-6=26bit これで実際のPCで使用される値は、2進数に直すと末尾が00なので、26bitは2bit左へシフトして28bitとして扱う。そしてその際、上位4bitはプログラムカウンタの値そのままとして使って、変更しない。今回は0x 2000 0000
なので上位4bitは変更されず、PCはjal命令を使っても、0x 2000 0000
のまま。
2.22.2
beq命令は即値は16bit。実際は2bit左にシフトした18bitぶんだけPCをずらすことができる。この場合、即値の18bit相当分を32bitに符合拡張して、PCと足し合わせた範囲へ行ける。すなわち、0x 1FFF 0000 - 0x 2000 FFFF
2.35
問題文は\$t2について言及は一切ないが、上のブログを参考する限り、
レジスタ$t1にはアドレス0x10000000が保持されており,レジスタ$t2にはアドレス0x10000010が保持されているものとする.アドレス0x10000000に収められているデータ(16進数)は0x11223344であるとする.レジスタ$t2によって指されるアドレスには,どんな値が収められるか.
が本来の意味と思われる。
lbu
は1バイトぶんだけ、下の1-8桁に入れる命令 なお上の24bitは0埋めされる。(lb
なら符号拡張もされる)
2.35.1
ビッグエンディアンは、数字の上位桁がアドレスの小さい方になる。0x11223344
なら、11側がアドレスが小さいので、スタート(アドレスが小さい左端)から数えて1バイトぶんを下1-8桁に入れるlbuは、0x00000011
となる。それを$t2
にロードしてるので、$t2
にあるのは0x00000011
。
2.35.2
リトルエンディアンは、数字の下位桁がアドレスの小さい方になっている。0x11223344
なら、44側がアドレスが小さいので、lbu
でロードする1バイトぶんは44
となり、それは$t0
では上1-8桁に入れる。よって$t2
にあるのは0x44000000
。
ここは確信をもって正解かどうかわからない。
2.41, 2.42
よくわからないです……(院試に出なさそうなのでスキップ)