Мне нужно преобразовать мой код, написанный на C (.c), в сборку (.asm).Я очень новичок в написании на C, и теперь мне нужно научиться писать на ассемблере - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно преобразовать мой код C в сборку

вот мой код C, который необходимо преобразовать в сборку (.asm)

int main()
{
   //Variables that stores the numbers
   int num1, num2, num3;
   // Variable that stores the result
   int result;
   // Asking the user to input the value of num1
   printf("Enter the first number:");
   scanf("%d",&num1);
   // Asking the user to input the value of num2
   printf("Enter the second number:");
   scanf("%d",&num2);
   // Asking the user to input the value of num3
   printf("Enter the third number: ");
   scanf("%d",&num3);
   //Performing the operation
   result = num3 - (num1 + num2);
   //Printing the result
   printf("The value of result is: %d",result);
   return 0;
}

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Ну, теоретически вы можете просто скомпилировать его, используя gcc, и заказать его для генерирования списка asm (который будет ассемблером), так что вы можете просто изменить его расширение на .asm (https://www.systutorials.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/)

)

Хотя, вообще говоря, плохая идея включать scanf и printf в сборку или любую библиотечную функцию в этом отношении (поскольку они могут быть очень длинными в asm, особенно системные вызовы, например read / write / open, printf).

И на всякий случай, если кто-то в университете попросит вас написать что-то в ASM, они узнают, что это написано не вами.

Также, судя по названию, изучение ASM с C-листингами - не самый лучший способ (например, из-за стековых операций при вызове процедуры).

0 голосов
/ 03 апреля 2019

Если вы хотите скомпилировать напрямую в сборку с gcc, вы можете использовать опцию -S. Из справочной страницы gcc:

-S Остановиться после этапа собственно компиляции; не собирать. Выходные данные представлены в виде файла кода ассемблера для каждого указанного входного файла не на ассемблере.

По умолчанию имя файла ассемблера для исходного файла создается путем замены суффикса .c, .i и т. Д. На .s.

Входные файлы, не требующие компиляции, игнорируются.

0 голосов
/ 03 апреля 2019

Как сказал Антти Хаапала, обычный gcc делает свое дело.Вы получите скомпилированный файл binaty, который вы можете прочитать с помощью команды:

objdump -d file

У вас есть много инструментов, которые помогут вам прочитать двоичный файл, например, gdb, xxd, objdump, ...
Есть также Гидра, которая нова, но я не уверен в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...