Ассемблерные вставки: чистый Си, CodeBlocks - C (СИ)
Формулировка задачи:
Работаю в CodeBlocks, под Windows, компилятор mingw (это версия gcc для Wondows). В программе на чистом Си делаю ассемблерную вставку, причем в одном месте нужно передать в регистр AL значение переменной x.
Синтаксис вставок в CodeBlocks нашел благодаря помощи добрых людей из форума:
Научите, как это сделать. Если нужно, тип переменных можно изменить на char (значения не превышают 255) или на int. Важен принцип.
short int x,y;
/* обмен значениями x и y */
__asm("mov ax, x");
__asm("mov bx,y");
...Решение задачи: «Ассемблерные вставки: чистый Си, CodeBlocks»
textual
Листинг программы
#include <stdio.h>
main()
{
int x = 100, y = 500;
__asm{
mov eax, x
xchg eax, y
mov x, eax
}
printf("%d %d\n", x, y);
}
Объяснение кода листинга программы
- Подключение заголовочного файла стандартного ввода-вывода
. - Объявление переменных x и y типа int со значениями 100 и 500 соответственно.
- Ассемблерная вставка начинается с ключевого слова __asm{...}.
- Команда mov eax, x загружает значение переменной x в регистр eax.
- Команда xchg eax, y обменивает значения регистра eax и переменной y.
- Команда mov x, eax сохраняет значение регистра eax в переменной x.
- Вызов функции printf для вывода значений переменных x и y.
- Вывод значений переменных x и y в формате десятичного числа.
- Значения переменных x и y после выполнения ассемблерных команд: x=100, y=100.
- Значения переменных x и y после выполнения ассемблерных команд: x=100, y=500.