0
GCC
とinline assembly
を使用して、即時に特定のレジスタr0
をロードします。しかし、私は正しい結果を得ていません。PowerPCインラインアセンブリ:レジスタにC値をロード
unsigned short value = 0x1337;
asm volatile
(
"li 0, %0\n\t"
"sc\n\t"
"blr"
: /* Output registers */
:"r"(value) /* Input registers */
: /* No clobbered registers */
);
はコンパイルすると、これは9
から来るん
li r0, 9
sc
blr
を与えますか?代わりに指定された値0x1337
が必要でした。 Hereは私が見たチュートリアルです。
うん、当然それは簡単な解決策 – BullyWiiPlaza
@BullyWiiPlazaた:あなたは、レジスタと即値を混在させることはできませんので、裸の数字ではありません名を登録得るためにはgcc -mregnames' '使用します。また、あなたが壊れているレジスタについてコンパイラに伝えるようにして、あなたがジャンプしていることを伝えるために 'asm goto'を使用してください。私はコンパイラに安全な方法があるかどうか分からないが、あなたのasmは 'lr'の戻りアドレスを必要とし、それが返される。あなたはおそらくasmであなたの関数全体を書いておくべきです、なぜなら、それがインラインであれば、これがどのように機能するのかわからないからです。 –
@PeterCordes:はい、これは機能全体です。 :) – BullyWiiPlaza