Ассемблерная вставка в С++ - Assembler

Узнай цену своей работы

Формулировка задачи:

Привет, есть простая функция по обмену двух переменных, механизм обмена реализован через асм. вставку. В самой функции переменные меняются значениями, а вот при возврате в main() значение остаются теми же, можете объснить с чем это связано? Никак не могу понять в чем дело.
Листинг программы
  1. #include <iostream>
  2. using namespace std;
  3. void Swap(int &a, int &b)
  4. {
  5. _asm
  6. {
  7. mov eax, a
  8. xchg eax, b
  9. mov a, eax
  10. }
  11. }
  12. int main()
  13. {
  14. int a = 2, b = 3;
  15. cout << "a, b: " << a << ", " << b << endl; // выводит 2 и 3
  16. Swap(a, b);
  17. cout << "a, b: " << a << ", " << b << endl; // выводит 2 и 3
  18. system("pause");
  19. return 0;
  20. }

Решение задачи: «Ассемблерная вставка в С++»

textual
Листинг программы
  1. mov esi,a
  2. mov edi,b
  3. mov eax,[edi]
  4. xchg    eax,[esi]
  5. mov [edi],eax

Объяснение кода листинга программы

  1. Переменная esi содержит значение a.
  2. Переменная edi содержит значение b.
  3. Значение из памяти, адрес которой содержится в переменной edi, записывается в регистр eax.
  4. Значение в регистре eax обменивается с памятью по адресу, содержащемуся в переменной esi.
  5. Результат записи в память по адресу, содержащемуся в переменной edi, сохраняется в регистре eax.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы