Ассемблерная вставка в С++ - Assembler
Формулировка задачи:
Привет, есть простая функция по обмену двух переменных, механизм обмена реализован через асм. вставку.
В самой функции переменные меняются значениями, а вот при возврате в main() значение остаются теми же, можете объснить с чем это связано? Никак не могу понять в чем дело.
#include <iostream> using namespace std; void Swap(int &a, int &b) { _asm { mov eax, a xchg eax, b mov a, eax } } int main() { int a = 2, b = 3; cout << "a, b: " << a << ", " << b << endl; // выводит 2 и 3 Swap(a, b); cout << "a, b: " << a << ", " << b << endl; // выводит 2 и 3 system("pause"); return 0; }
Решение задачи: «Ассемблерная вставка в С++»
textual
Листинг программы
mov esi,a mov edi,b mov eax,[edi] xchg eax,[esi] mov [edi],eax
Объяснение кода листинга программы
- Переменная
esi
содержит значениеa
. - Переменная
edi
содержит значениеb
. - Значение из памяти, адрес которой содержится в переменной
edi
, записывается в регистрeax
. - Значение в регистре
eax
обменивается с памятью по адресу, содержащемуся в переменнойesi
. - Результат записи в память по адресу, содержащемуся в переменной
edi
, сохраняется в регистреeax
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д