Ассемблерная вставка в С++ - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д