私はASM/MIPSテクノロジを使用しています。MIPS命令を32ビット16進数に変換する方法
私はMIPS命令を32ビットの16進数に変換したいと思っています。 たとえば、$ t0、$ zero、$ t1を16進数に変更したいとします。
私は多くの解決策を見つけましたが、すべてが異なります。
私はASM/MIPSテクノロジを使用しています。MIPS命令を32ビット16進数に変換する方法
私はMIPS命令を32ビットの16進数に変換したいと思っています。 たとえば、$ t0、$ zero、$ t1を16進数に変更したいとします。
私は多くの解決策を見つけましたが、すべてが異なります。
MIPSサブ命令は2つのレジスタを減算し、その結果をレジスタに格納します。 sub $d,$s,$t
は
sub = function code 34 (see manual), 22 in hex, 100010 in bin (6 bits)
$t0 = 8 in decimal, 8 in hex, 01000 in bin (5 bits)
$zero = 0 in decimal, 0 in hex, 00000 in bin (5 bits)
$t1 = 9 in decimal, 9 in hex, 01001 in bin (5 bits)
$d = $s - $t
は、だからあなたの命令のマシンコードが01001 01000 00000 100010
R形式の命令、オペコード、または「オペレーションコード」については
は常にゼロであることを意味します。 rs、rt、rdは2つのソースレジスタと1つのデスティネーションレジスタに対応しています。
したがって、ソースsub$t0,$zero,$t1
は、16進表記で0x00094022
に変換されます。
説明
すべてのMIPS命令は32ビットであり、16進数形式のマシンコードのように書くことができる32ビット数に変換します。
命令サブ(減算)は、オペコード0x22を有する。したがって、右端の数字は22でなければなりません(上の数字を参照)。
subは命令タイプRです。これは、命令によって使用されるすべてのデータ値がレジスタにある場合にR命令が使用されることを意味します。
すべてRタイプの命令は以下のフォーマットを有する:「OP」は、(この場合サブにおける)特定の命令のニーモニックである
OP rd, rs, rt
を。 rs、rtはソースレジスタ、rdはデスティネーションレジスタです。言い換えれば
sub $t0, $zero, $t1
は、あなたの命令が「0からT1を減算し、T0で結果を置く」を意味します。この場合、サブ命令をとして使用されています。
あなたは次のようにあなたがそれを行うことができる2つのレジスタの値を交換する場合:
.text
.globl __start
__start:
sw $t0, x
sw $t1, y
lw $t0, y
lw $t1, x
.data
x:
.word 0x000000FF
y:
.word 0xABCDE080
あなたは$ t1の中でも、$ t0の中にコンテンツを配置する場合、あなたはor
命令を使用することができます。
lui $t0, 0x
or $t1, $zero, $t0
私は自分で試してみましたが、同じ結果があります。 しかし私はバイナリ(10010100000000100010)を渡しました。 あなたの説明は良かった、ありがとう。 しかし私には別の質問があります:$ t0と$ t1のレジストリを交換したいのですか?それをもう一度変換するか、それとも役に立たないのですか? – hiero
私はxchg $ t0、$ t1を完了しました – hiero
とても複雑です。 どうすればいいですか? xchg 8,9? – hiero