Вычисление выражения по формуле - 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;

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

  1. Объявляются переменные l, r, a и b со значениями 12, -93, 12 и -93 соответственно: int l,r,a=12,b=-93;.
  2. Вступает блок кода на ассемблере с помощью директивы _asm.
  3. Значение переменной a загружается в регистр eax с помощью инструкции mov eax,a.
  4. Из регистра eax вычитается значение переменной b с помощью инструкции sub eax,b.
  5. Значение в регистре eax умножается само на себя с помощью инструкции imul eax.
  6. Полученное значение в регистре eax умножается само на себя снова с помощью инструкции imul eax.
  7. Значение в регистре eax сохраняется в переменную l с помощью инструкции mov l,eax.
  8. Значение переменной a загружается в регистр eax с помощью инструкции mov eax,a.
  9. Значение в регистре eax умножается само на себя с помощью инструкции imul eax.
  10. Полученное значение в регистре eax умножается само на себя снова с помощью инструкции imul eax.
  11. Результат делится на значение переменной a с помощью инструкции idiv dword ptr a.
  12. Полученное значение в регистре eax умножается на значение переменной b с помощью инструкции imul dword ptr b.
  13. Значение -4 сохраняется в регистр ebx с помощью инструкции mov ebx,-4.
  14. Значение в регистре ebx умножается на значение в регистре eax с помощью инструкции imul ebx.
  15. Результат сложения значения в регистре ecx и значения в регистре eax сохраняется в переменную ecx с помощью инструкции add ecx,eax.
  16. Значение переменной a загружается в регистр eax с помощью инструкции mov eax,a.
  17. Значение в регистре eax умножается само на себя с помощью инструкции imul eax.
  18. Полученное значение в регистре eax умножается на значение переменной b с помощью инструкции imul dword ptr b.
  19. Значение переменной b умножается само на себя с помощью инструкции imul dword ptr b.
  20. Значение 6 сохраняется в регистр ebx с помощью инструкции mov ebx,6.
  21. Значение в регистре ebx умножается на значение в регистре eax с помощью инструкции imul ebx.
  22. Результат сложения значения в регистре ecx и значения в регистре eax сохраняется в переменную ecx с помощью инструкции add ecx,eax.
  23. Значение переменной b загружается в регистр eax с помощью инструкции mov eax,b.
  24. Значение в регистре eax умножается само на себя с помощью инструкции imul eax.
  25. Полученное значение в регистре eax умножается на значение переменной b с помощью инструкции imul dword ptr b.
  26. Значение переменной a умножается само на себя с помощью инструкции imul dword ptr a.
  27. Значение -4 сохраняется в регистр ebx с помощью инструкции mov ebx,-4.
  28. Значение в регистре ebx умножается на значение в регистре eax с помощью инструкции imul ebx.
  29. Результат сложения значения в регистре ecx и значения в регистре eax сохраняется в переменную ecx с помощью инструкции add ecx,eax.
  30. Значение переменной b загружается в регистр eax с помощью инструкции mov eax,b.
  31. Значение в регистре eax умножается само на себя с помощью инструкции imul eax.
  32. Полученное значение в регистре eax умножается само на себя снова с помощью инструкции imul eax.
  33. Значение в регистре eax прибавляется к значению в регистре ecx с помощью инструкции add eax,ecx.
  34. Значение в регистре eax сохраняется в переменную r с помощью инструкции mov r,eax.
  35. Выводятся значения переменных l и r с помощью функции cout: cout<<l<<=<<r<<endl;.

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

7   голосов , оценка 4.143 из 5