私は4バイトに分割したい32ビット命令を持っています。 レッツは、命令は次のようになります言う:32ビット命令をバイトに分割し、cを使用して結果を別のアドレスに移動
yyyyyzzzzzzxxxxxx?????????
命令は、4つの符号なし整数型で構成されてい言葉です。 y
は操作コードを表し、???
は未使用領域を表します。私はビッグエンディアンのマシンで作業しています。
z
+ w
からa
に値を移動するとします。
私は以前はCで働いたことがありませんでしたが、私はこれをこのようにしようとしました。ここで
私はちょうどので、私は、各バイトをプリントアウトCA、言葉を読んでどのようにである:ここでは
unsigned int a, b, c, o;
w = instruction << 24;
z = instruction << 16;
x = instruction << 8;
y = instruction;
私は結果が何であるかを確認するために、符号なしの値を印刷します。
printf("%u\n", w);
printf("%u\n", z);
printf("%u\n", x);
printf("%u\n", y);
printf("\n");
regs[x] = instruction + instruction << 8;
私はこの後regs[x]
の値をプリントアウトした場合、その後、私は今、値を持っているが、これはそれを行うための正しい方法であることがわかりますか?私がこれを好きになると、レジスタ= z
+ w
を設定しますか?
EDIT 私はこのようなビットを取得する必要がありますか?その後、
y = (inst >> 24) & 077;
x = (inst >> 16) & 0xffff;
z = (inst >> 8) & 0xffff;
w = (inst) & 0xffff;
と、次のように行います:あなたが唯一のビット位置を使用したいとカウントした場合は、次のビットとデクリメントを設定すると、すなわち9ビットのビットマスクを構築することができ
regs[y] = z + w;
"バイト"は一般的に8ビットと見なされるため、32ビットを4バイトに分割して未使用のビットを3つ取得するのは難しいことに注意してください。このような単語を説明するときにも、各文字は通常1ビットを表すべきです。しかし、あなたは23文字しか表示しません(最後に '? 'を含む)、これを解釈するのが難しくなります。 – unwind
@unwind申し訳ありません、はい、私はyyyyyzzzzzzxxxxxx ?????????多分私は何をしなければならなかったのか誤解しました。私は質問に編集しました – user123