Ассемблерная вставка в С++ - 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.