次のコードがあります。
#include<iostream>
using namespace std;
int main() {
int result=0;
_asm {
mov eax,2
mov eax,result;
}
cout<<result<<endl;
return 0;
}
私はアセンブリをよく知っていますが、プログラムが画面に 2 を出力しないのはなぜですか?
次のコードがあります。
#include<iostream>
using namespace std;
int main() {
int result=0;
_asm {
mov eax,2
mov eax,result;
}
cout<<result<<endl;
return 0;
}
私はアセンブリをよく知っていますが、プログラムが画面に 2 を出力しないのはなぜですか?
この行は間違っています:
mov eax,result;
する必要があります
mov result,eax;
私はアセンブラを知りませんが、あなたはやっています:
mov eax,2;
mov eax,result;
2 を eax に移動してから、結果を eax に移動しませんか?
move eax, 2;
mov result, eax;
?
C でアセンブリ コードを記述する前に、C で小さな関数にコードを記述し、コンパイラにアセンブリ リストを出力するように指示します。これにより、コンパイラがどのようにアセンブリ コードを生成したかがわかり、使用する例が示されます。通常、アセンブリ コードは、引数と戻り値がどのように渡されるかを示します。
私の経験では、アセンブリ コードはアセンブリ言語の別のモジュールに記述するのが最適です。C でアセンブリ コードを使用することはめったにありません。コンパイラにアセンブリ コードを生成させます。ときどき、私は強迫観念になり、特定のプロセッサ用に最適化するために関数を変換します。たとえばmemcpy
、ARM プロセッサ用の特別な機能を使用するように最適化されたコードを書き直しました (コンパイラで提供される非効率的なバージョンを調べた後)。
提案:
正しい構文は次のとおりです。
MOV Destination, Source