[ad_1]
私はacコードを書き、コードをアセンブリに変換したいと考えています。また、外部ファイルを書き込んでコードをアプリケーションexeに実行する方法と、コードをマシンコードに送信する方法も知りたいです。
// bin.cpp : Defines the entry point for the console application. // #include "stdafx.h" # include <stdio.h> int main() { char a = 'a'; int num1 = 0 / 8; int num2 = 1 / 8; int sum; switch(a) { case '+': if(num1 + num2) { sum = num1 + num2; } else { sum = num2 + num1; } break; case '-': if(num1 - num2) { sum = num1 - num2; } else { sum = num2 - num1; } break; case '*': if(num1 * num2) { sum = num1 * num2; } else { sum = num2 * num1; } break; case '/': if(num1 / num2) { sum = num1 / num2; } else { sum = num2 / num1; } break; default: break; } return 0; }
解決策 1
うーん。 それほど単純ではありません。C 命令は、必ずしも 1 つのマシン (またはアセンブリ) 命令に変換されるとは限りません。特にケースは、想像以上に複雑な操作です。
おそらく、開始するのに最適な場所は、Google を使用して、選択したプロセッサの逆アセンブラを見つけ (指定しないでください。アセンブリは、C とは異なり、プロセッサまたはプロセッサ ファミリに固有です)、それが何にコンパイルされるかを調べることです。
ただし、「アセンブラを知らない」場合は、おそらくあまり役に立ちません。
少なくとも、C コンパイラが次のようなものをサポートしていることに気付くかもしれません。
#pragma ASM
これにより、C ソース ファイルにアセンブリ コードを含めることができ、小さなタスク用に別のアセンブラを用意する必要がなくなります。
解決策 2
Visual Studio には、C/C++ コードを ASM に変換する機能があります。
そのためには、指示に従うだけです。
1.行にブレークポイントを作成します
switch(a){
2. プログラムをデバッグします。
3. カーソルがデバッグ ポイントにあるときに、Ctrl+F11 を押します。
エディターからアセンブリ コードを取得できます。
4.あなたは書く必要があります
__asm{ }
5. アセンブリ コードをコピーして __asm{} に貼り付けます。
6. 削除
switch(a){ ... default: break; }
解決策 3
ボイド関数(int a) {
+ 1 を返します。
}
void function2(int a, int b);
ボイドメイン(){
関数 (9);
//(アセンブリを記述した後、この行のコメントを外してください) function2(1,2);
}
[ad_2]
コメント