LEGv8 マシン命令がどのようにデコードされるかがわかりません。次のバイナリを想定します。
1000 1011 0000 1111 0000 0000 0001 0011
デコードに役立つはずの次のチャートがあります。
最初の 11 ビット10001011000は 10 進数の1112に対応し、チャートによるとこれはADD命令です。だから私は命令のこの部分を決定する方法を知っています (より良いアプローチがない限り、これは 11 ビットではないオペコードでは機能しないのでしょうか?)。この時点で、私はどのように進めるべきかについて混乱しています。
ADD は命令形式R形式であることを知っているため、ビットは次のように配置されます。
opcode: 11 ビット
Rm: 5 ビット
shamt: 6 ビット
Rn: 5 ビット
Rd: 5 ビット
これらのフィールドサイズを知っている最初のバイナリマシン命令をレイアウトしようとしています...
opcode = 1000 1011 000 0 1111 0000 0000 0001 0011 = 10001011000
これは、最初のバイナリ マシン命令の最初の 11 ビットです。
Rm = 1000 1011 000 0 1111 0000 0000 0001 0011 = 01111
これは、オペコードの最初の 11 ビットの後の次の 5 ビットです。
shamt = 1000 1011 0000 1111 0000 00 00 0001 0011 = 000000
これは、Rm の 5 ビットの次の 6 ビットです。
Rn = 1000 1011 0000 1111 0000 00 00 000 1 0011 = 00000
これは、シャムの 6 ビットの次の 5 ビットです。
Rd = 1000 1011 0000 1111 0000 0000 000 1 0011 = 10011
これはバイナリ マシン命令の最後の 5 ビット (Rn の 5 ビットの後の 5 ビット) です。
Rm、Rn、Rd を 2 進数から 10 進数に変換すると、次のようになります。
Rm = 15 = X15
Rn = 0 = X0
Rd = 19 = X19
したがって、最初のバイナリ マシン命令をアセンブリ ステートメントにデコードするための私の最終的な答えは、ADD X19, X0, X15 になります。
ただし、この例の教科書の回答はADD X16, X15, X5です。どこで私は間違えましたか?