1
[0x00400000]    0x3c011000  lui $1, 4096                    ; 5: li $t0, 0x100000F4
[0x00400004]    0x342800f4  ori $8, $1, 244
[0x00400008]    0x8d100000  lw $16, 0($8)                   ; 6: lw $s0, 0($t0)

上記は私のスピムプログラムです。li命令がluiに分割されることに興味があり、oriはそこで何が起こっているのか説明できますか?

助けてくれてありがとう!

4

2 に答える 2

2

liは疑似命令です(つまり、プロセッサ上にオペコードとして存在しません)。それは常に「ロードアッパーイミディエート」に展開されます。および'または即時'命令付き:

効果的に:(4096 << 16) || 244

数が大きくない場合、lui命令はスキップされます。そして、oriまたは0レジスタを使用します。

于 2011-09-13T00:41:18.563 に答える
0

liは即時ロードです。ただし、ロードしようとしている値が大きすぎて、その命令の直接のデータセクションに収まりません。したがって、アセンブラはそれを2つの命令に分割し、それぞれがその値の半分をそのレジスタの上部と下部にロードします。

于 2011-09-13T00:42:35.547 に答える