Вычислить значение выражения в ассемблерной вставке в 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)