Вычисление выражения по формуле - Assembler (222996)
Формулировка задачи:
Как рассчитать такую формулу на ассемблере, тот что в визуал студии?
Как рассчитать такую формулу на ассемблере, тот что в визуал студии? Левую и правую часть отдельно.
Решение задачи: «Вычисление выражения по формуле»
textual
Листинг программы
int l,r,a=12,b=-93;
_asm
{
mov eax,a
sub eax,b
imul eax
imul eax
mov l,eax
//
mov eax,a
imul eax
imul eax//a^4
mov ecx,eax
idiv dword ptr a//a^3
imul dword ptr b
mov ebx,-4
imul ebx//-4*a^3*b
add ecx,eax//a^4-4*a^3*b
mov eax,a
imul eax
imul dword ptr b
imul dword ptr b//a^2*b^2
mov ebx,6
imul ebx//6*a^2*b^2
add ecx,eax//a^4-4*a^3*b+6*a^2*b^2
mov eax,b
imul eax
imul dword ptr b//b^3
imul dword ptr a
mov ebx,-4
imul ebx//-4*a*b^3
add ecx,eax//a^4-4*a^3*b+6*a^2*b^2-4*a*b^3
mov eax,b
imul eax
imul eax//b^4
add eax,ecx
mov r,eax
}
cout<<l<<"="<<r<<endl;
Объяснение кода листинга программы
- Объявляются переменные l, r, a и b со значениями 12, -93, 12 и -93 соответственно:
int l,r,a=12,b=-93;. - Вступает блок кода на ассемблере с помощью директивы
_asm. - Значение переменной a загружается в регистр eax с помощью инструкции
mov eax,a. - Из регистра eax вычитается значение переменной b с помощью инструкции
sub eax,b. - Значение в регистре eax умножается само на себя с помощью инструкции
imul eax. - Полученное значение в регистре eax умножается само на себя снова с помощью инструкции
imul eax. - Значение в регистре eax сохраняется в переменную l с помощью инструкции
mov l,eax. - Значение переменной a загружается в регистр eax с помощью инструкции
mov eax,a. - Значение в регистре eax умножается само на себя с помощью инструкции
imul eax. - Полученное значение в регистре eax умножается само на себя снова с помощью инструкции
imul eax. - Результат делится на значение переменной a с помощью инструкции
idiv dword ptr a. - Полученное значение в регистре eax умножается на значение переменной b с помощью инструкции
imul dword ptr b. - Значение -4 сохраняется в регистр ebx с помощью инструкции
mov ebx,-4. - Значение в регистре ebx умножается на значение в регистре eax с помощью инструкции
imul ebx. - Результат сложения значения в регистре ecx и значения в регистре eax сохраняется в переменную ecx с помощью инструкции
add ecx,eax. - Значение переменной a загружается в регистр eax с помощью инструкции
mov eax,a. - Значение в регистре eax умножается само на себя с помощью инструкции
imul eax. - Полученное значение в регистре eax умножается на значение переменной b с помощью инструкции
imul dword ptr b. - Значение переменной b умножается само на себя с помощью инструкции
imul dword ptr b. - Значение 6 сохраняется в регистр ebx с помощью инструкции
mov ebx,6. - Значение в регистре ebx умножается на значение в регистре eax с помощью инструкции
imul ebx. - Результат сложения значения в регистре ecx и значения в регистре eax сохраняется в переменную ecx с помощью инструкции
add ecx,eax. - Значение переменной b загружается в регистр eax с помощью инструкции
mov eax,b. - Значение в регистре eax умножается само на себя с помощью инструкции
imul eax. - Полученное значение в регистре eax умножается на значение переменной b с помощью инструкции
imul dword ptr b. - Значение переменной a умножается само на себя с помощью инструкции
imul dword ptr a. - Значение -4 сохраняется в регистр ebx с помощью инструкции
mov ebx,-4. - Значение в регистре ebx умножается на значение в регистре eax с помощью инструкции
imul ebx. - Результат сложения значения в регистре ecx и значения в регистре eax сохраняется в переменную ecx с помощью инструкции
add ecx,eax. - Значение переменной b загружается в регистр eax с помощью инструкции
mov eax,b. - Значение в регистре eax умножается само на себя с помощью инструкции
imul eax. - Полученное значение в регистре eax умножается само на себя снова с помощью инструкции
imul eax. - Значение в регистре eax прибавляется к значению в регистре ecx с помощью инструкции
add eax,ecx. - Значение в регистре eax сохраняется в переменную r с помощью инструкции
mov r,eax. - Выводятся значения переменных l и r с помощью функции cout:
cout<<l<<=<<r<<endl;.