3

MIPSアセンブリを使用して、数値が正または負の場合にコードの別のセグメントに分岐しようとしています。これは、まさにそれを行うはずの短いセグメントです:

lbu $4, digit
and $5, $4, 0x80
srl $5, $5, 31
bgt $5, 0, positive
b negative

数字は正常に $4 にあります。最初のビットが 1 か 0 かを取得するために、後続のすべてのゼロを含む 1 に対してビットごとの AND を計算し、次に 31 ビット右にシフトして最後の位置に配置し、それが正しいかどうかを確認します。 0 より大きい場合、正の分岐、そうでない場合、負の分岐。

私はどこかでロジックを台無しにしていると確信しています。また、そのように 0 を (bgt で) 使用できるかどうか、または $0 を使用する必要があるかどうかもわかりません。

何か案は?ありがとう!

4

1 に答える 1

4

私はあなたがあなたのバイトを絵の外にシフトしていると思います。あなたのアプローチを使用して、あなたはそれを31ではなく7ビットシフトするべきです。しかし...

http://www.ece.umd.edu/~manoj/759M/MIPSALM.htmlによると、を使用する代わりに、を使用lbuできます。これにより、ロードしているバイトのビット7の値がコピーされ、ターゲットレジスタのビット8〜31に挿入されます。次に、を使用してブランチを実行できます。lbbgez

lb $4, digit
bgez $4, positive
b negative

しかし、私の人生でMIPSアセンブラーのバイトを書いたことがないので、おそらくこの答えをほんの少しの塩で取る必要があります。幸運を!

于 2012-11-27T19:00:50.667 に答える