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