5

addi16 進数の即値が使用されている場合、アセンブリで命令 (およびその他) を解釈する方法に関する標準または推奨事項はありますか?

例:

addi $t0, $zero, 0xffff

これは、プロセッサによって行われるように、符号が に拡張されるのと同じ意味になると予想していましaddi $t0, $zero, -1たが、火星シミュレータのアセンブラが 16 進数を 32 ビットの符号なし数値として解釈し、疑似数値として実行しようとするという事実に驚きました。命令 (疑似命令が有効な場合)。0xffff0xffffffffaddi $t0, $zero, 0x0000ffff

明確にするために、MARS のアセンブラーはそのaddi $t0, $zero, 0xffff疑似命令を複数のマシン命令にアセンブルし、疑似命令が有効になっている場合は、その定数 (65535 = 0xffff) をレジスタに作成し、それを追加します。MARS のシミュレーターは( ) のような命令を正しくシミュレートします。0x2008ffffaddi $t0, $zero, -1

SPIM アセンブラは、エラーで中断します。

私が知りたいのは、アセンブラーが常にこのように解釈するかどうか、および何も見つからないので、これが記述または説明されている場所があるかどうかです。

4

0 に答える 0