1. ホーム
  2. assembly

[解決済み] なぜSet on Less ThanはALU演算なのか?

2022-02-10 02:47:11

質問

なぜ slt ALUの演算を考慮したのですか? 単に引き算をしてから*を得るだけだと思っていました。 Z *ALUからの出力はゼロ?

 ALU制御線|機能
-------------------+-------------------
       0000|アンド
       0001|OR
       0010|追加
       0110|減算
       0111|未満に設定

それとも、ALUの結果が1であれば、1を出力するようになっているのでしょうか? A - Bslt $t1, A, B )が負になる。

どのように解決するのですか?

Aがbより小さければ1を、そうでなければ0を出力することになっている。この場合、A-Bの計算が必要になることが多いので、ALUが必要になります。

の符号ビットを計算するだけであれば、このようになります。 A - B というのは冗長ですが、例えば A = -2147483648 = 0x80000000B = 1 = 0x00000001 ここで、引き算の結果は次のようになります。 0x7fffffff = 2147483647 であるにもかかわらず、最上位ビットが設定されていません。 A < B .

Patterson, David A.; Hennessy, John L.: Computer Organization and Design" の表なので、第3章、特に "add and subtraction" を扱った小節(第2版では 3.3, 第4版では 3.2) を参照してください。オーバーフローとアンダーフローを扱った表があり、コーナーケースを調べることができます。

また、ALUの結果は32ビットであることを覚えておいてください。たとえ結果が減算結果の符号ビットだけだったとしても、完全な減算結果ではなく、結果ビットに連結された31個のゼロが返されるべきことを知らせるために、異なるALU演算コードが必要です。

この本で紹介されているアーキテクチャでは、quot;Zero"ラインは、等しい分岐と等しくない分岐に関する比較にのみ使用されています。 SLT/SLTI は、結果をレジスタに格納します。