1. ホーム
  2. assembly

[解決済み] MIPSのコードのこの部分で、oriはどのように使われているのですか?

2022-02-13 21:27:53

質問内容

ここで、"ori"の使い方を誰か説明してください。ビット単位のORであることは知っていますが、それがどのように機能するのか、なぜここでそれが必要なのかが分かりません。

 #objective of the program is to add 5 and 7
.data #variable declaration follow this line
.text #instructions follow this line
main:
ori $s0, $zero, 0x5
ori $s1, $zero, 0x7
add $t0, $s0, $s1
li $v0,10 # required for only QtSPIM
syscall # required for only QtSPIM
#end of program

解決方法は?

  ori $s0, $zero, 0x5
  ori $s1, $zero, 0x7

2つの命令は、0x05の定数をレジスタ$s0に、0x07をレジスタ$s1にロードします。

MIPSには、定数を直接レジスタにロードする命令がありません。そこで、オペランドを0にして即値の論理ORで代用します。これは、moveと同じ効果があります。この2行をc-styleコードに変換すると次のようになります。

  $s0 = 0 | 0x05;
  $s1 = 0 | 0x07;

を使うこともできます。

  addi $s0, $zero, 0x5
  addi $s1, $zero, 0x7

これは同じことですが、論理的なorの代わりにaddを使用しています。コードに置き換えると、次のようになります。

  $s0 = 0 + 0x05;
  $s1 = 0 + 0x07;