【解決方法】cコードをアセンブリに変更したい


私はacコードを書き、コードをアセンブリに変換したいと考えています。また、外部ファイルを書き込んでコードをアプリケーションexeに実行する方法と、コードをマシンコードに送信する方法も知りたいです。

C#
// 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 コンパイラが次のようなものをサポートしていることに気付くかもしれません。

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);
}

コメント

タイトルとURLをコピーしました