Вычислить значение выражения в ассемблерной вставке в C++ - Assembler
Формулировка задачи:
посчитать a*b/c
ассемблерная вставка к с++ на VS 2013. Переменные типа unsigned short, действия, как я понимаю с регистрами AX,BX... но нужно как-то учесть возможное переполнение при умножении и следующем делении
Решение задачи: «Вычислить значение выражения в ассемблерной вставке в C++»
textual
Листинг программы
- #include <iostream>
- using namespace std;
- void main()
- {
- unsigned short a,b,c;
- unsigned int R;
- cout<<"a="; cin>>a;
- cout<<"b="; cin>>b;
- cout<<"c="; cin>>c;
- asm
- {
- movzx eax,a
- movzx ebx,b
- movzx ecx,c
- mul ebx
- div ecx
- mov R,eax
- }
- cout<<"R="<<R<<endl;
- system("pause");
- }
Объяснение кода листинга программы
- В коде присутствует вставка ассемблерного кода, который выполняет следующие действия:
- Перемещает значение переменной
a
в регистрeax
- Перемещает значение переменной
b
в регистрebx
- Перемещает значение переменной
c
в регистрecx
- Выполняет операцию умножения с использованием регистра
ebx
иecx
- Выполняет операцию деления с использованием регистра
ecx
- Сохраняет результат в регистре
eax
- Сохраняет значение регистра
eax
в переменнойR
- Перемещает значение переменной
- Значение переменной
R
выводится на экран с помощьюcout
- Программа ожидает нажатия клавиши для продолжения работы с помощью
system(
pause)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д