今、私はアセンブリ言語でARM GPIOを制御する方法を研究しています。 私はCソースをアセンブリ言語に変更しようとしています。ARMアセンブリif(data&0x01)rGPGDAT&=〜(0x1 << 7);
しかし、私は私がTSTを使用すべきだと思うこの部分
if(data & 0x01) rGPGDAT &= ~(0x1<<7);
if(data & 0x02) rGPGDAT &= ~(0x1<<6);
if(data & 0x03) rGPGDAT &= ~(0x1<<5);
if(data & 0x04) rGPGDAT &= ~(0x1<<4);
を書くことでは困難です。私はに対処する方法がわからない「であれば」
結局、 'tst'は実際にはビット単位の比較に適しています。条件付きコードを一般的に実装する方法がわからない場合は、最初にアセンブリチュートリアルを検討する価値があります。また、比較的シンプルなコードシーケンスの場合、-O1でコンパイルされたCコードの逆アセンブリを見ると、通常、かなり有益です(-O0は非常に多くの重複したロード/ストア/移動を発生させてツリーの木が見えにくい傾向があります)。 – Notlikethat
通常、いくつかのフラグを設定します(ここではtstが良い考えです)。そして、偽の条件に分岐するか、真の条件に分岐します。フルサイズの腕の指示(親指ではない)の条件付き実行が良い場合はここでBICを見てください。 –
"if"が正しいことを確認していますか? if(data&0x01) '、' if(data&0x02) 'と' if(data&0x04) 'は正しいビットテストのようですが、if(data&0x03)'が間違っていますか?なぜあなたはアーカイブしようとしていますか?それとも、それは単にタイプミスですか? – Tommylee2k