2017-12-13 10 views
0

が分岐命令のオフセットを計算する:分岐命令オフセットの計算方法は?

Picture with the answers

やあみんな、

私の教授は私たちの答えと研究ガイドを送りました。彼は実際に彼が答えを得た方法を実際に乗り越えたことはありません。私はオンラインで検索しましたが、私は説明を見つけることができませんでしたので、この時点で私は少し切望しています。

著者がこれらの回答にどのように到着したか知っていますか?

+0

あなたは自宅仕事ですか? –

+1

いいえ、そうではありません。私は明日の最終試験をしているので、ただ勉強しています。私は私の質問に答えを見つけました:instr 1へのブランチから5命令がありますので、-5を取る。 FFFBを得るには2を補数で-5に変換してください。 質問の他の部分については、誰もが知っている場合、私は本当に説明を感謝します –

答えて

0

0xfffbは-5の16ビット符号付き2の補数表現です。したがって、このマシンでは、オフセットは(おそらく固定された)命令長でスケーリングされ、バイトアドレスを取得します。 (バイトサイズの命令を持つこともできますが、オフセット自体は16ビットなので不可能です)。アーキテクチャは、分岐が実行されるまでにPCがすでにインクリメントされているので、0オフセットはNOP、分岐自体の1つのオフセット分岐、分岐の前の命令への-2分岐など。loop:になるまで後方にカウントします。 (質問に加えていくつかの情報や既知の文脈があり、回答の作成に使用したアーキテクチャの詳細を提供しているか、かなりひどく書かれた質問です)。

キャッシュの質問については、ほとんどの場合、キャッシュアーキテクチャ(または「キャッシュジオメトリ」、「キャッシュシェイプ」など)を記述するために使用される名前を知る必要があります。 「2-way set associative」は、任意のアドレスを配置できるキャッシュに2つの場所があることを意味します。 128個のセットがあり、それぞれが2ウェイ・アソシアティブであるため2つのブロックを保持することができ、各ブロックは32バイトです。 (私は通常、32バイト構造を "キャッシュライン"と呼んでいますが、ここでは "ブロック"という用語はそこに格納されているデータを特に指し、 "ライン"は有効なビットとタグなども含みます)キャッシュ・ジオメトリの外側に行く最下位ビットから始まるアドレスを分解します。

これは命令キャッシュのようですので、下位の2ビットは0で、キャッシュは32ビットアイテムで構成すると主張します。ブロックは32バイトまたは5ビットです。 2はおそらくちょうど0でなければならない "バイトオフセット"であり、次に "ブロックオフセット"(実際にブロック内でオフセット)と呼ばれる5ビット部分を完成するために3ビットです。 (この下位5ビットのサブディビジョンは実際には何も変わらない)。セット内の128個のエントリは7ビットの「インデックス」を与える。残りのアドレス(20ビット)は、ブロックにタグを付けて、アドレスが検索されていることを確認するために使用する必要があります。 (つまり、キャッシュのヒットまたはミスを判断するために)さらに、ブロック内に実際にデータがあるかどうかを判断するにはもう少しビットが必要です。

次に、データには32バイトまたは256ビットを加え、20ビットのタグと1つの有効ビットを128セットと2ウェイで乗算します。

+0

詳細な応答ありがとう!それは残念ながら私たちに与えられたすべてでした。あなたはその問題の他の部分に対する答えを知っていますか? –

+0

キャッシュ部分にブレークダウンを追加しました。 (これについて下の投票がある理由は分かりませんが、何でも...) –

+0

ありがとうございました!私はまだ部分bがどのように人口が集まっているかについて少し失われている。 –

関連する問題