このCソースがどのようなアセンブラになるかという問題
data = receiver.receivedByte; receiver.ready = 0; receiver.enable = 1;
gccの出力から該当箇所を抜き出しました。
- data = receiver.receivedByte;
receiverの値をメモリからレジスタへ転送、右シフトでレジスタの位置調整、andで関係の無いbitを0にする、レジスタの内容をメモリへ書き込み、をしています。
lw $2, receiver srl $2,$2,22 andi $2,$2,0xff sw $2, data
- receiver.ready = 0;
receiverの値をメモリからレジスタへ転送、liとori命令を使い0x7FFFFFFFを作る、andを取って最上位ビット(receiver.ready)を0にする、メモリへ書き込み、をしています。
lw $3, receiver li $2, 2147418112 # 0x7fff0000 ori $2, $2,0xffff and $2, $3,$2 sw $2, receiver
- receiver.enable = 1;
receiverの値をメモリからレジスタへ転送、0x40000000とorを取って30bit目(receiver.enable)を1にする、メモリへ書き込み、をしています。
lw $3, receiver li $2,1073741824 # 0x40000000 or $2, $3,$2 sw $2, receiver