Вычисление выражения - Assembler (223179)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, мне нужно составить программу, которая посчитает выражениe: r8 = c^4 - a^3 - c^2 Есть код, который считает: r2 = a - b * 10 - c
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. a DWORD 100
  5. b DWORD 4
  6. d DWORD 10
  7. r2 DWORD ?
  8. .code
  9. .386
  10. main PROC
  11. mov ax, @data
  12. mov ds, ax
  13. mov ebx, a
  14. mov ecx, b
  15. mov edx, d
  16. call EvaluationExpression
  17. mov r2, eax
  18. mov ax, 4C00h
  19. int 21h
  20. main ENDP
  21. EvaluationExpression PROC USES ebx ecx edx
  22. CLC
  23. mov eax, ecx
  24. mov ecx, 10
  25. mul ecx
  26. mov ecx, eax
  27. mov eax, ebx
  28. sub eax, ecx
  29. sub eax, edx
  30. ret
  31. EvaluationExpression ENDP
  32. end main
Буду рад если поможете. Спасибо.

Решение задачи: «Вычисление выражения»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4.     a DWORD 100
  5.     b DWORD 4
  6.     d DWORD 10
  7.     r8 DWORD ?
  8. .code
  9. .386
  10. main PROC
  11.     mov ax, @data
  12.     mov ds, ax
  13.     mov ebx, a
  14.     mov ecx, b
  15.     mov edx, d
  16. call EvaluationExpression
  17.     mov r8, eax
  18.     mov ax, 4C00h
  19.     int 21h
  20. main ENDP
  21. EvaluationExpression PROC USES ebx ecx edx esi edi
  22. CLC
  23.     mov eax, edx
  24.     mov esi, edx
  25.     mul esi             ;(edx:eax)=c^2
  26.     mov edi, eax        ;edi=c^2
  27.     mul edi             ;eax=c^4
  28.     sub eax, edi        ;eax=c^4-c^2
  29.     mov edi, eax        ;edi=c^4-c^2
  30.     mov eax, ebx
  31.     mul ebx             ;eax=a^2
  32.     mul ebx             ;eax=a^3
  33.     sub edi, eax        ;edi=c^4-a^3-c^2
  34.     mov eax, edi        ;eax=c^4-a^3-c^2
  35. ret
  36. EvaluationExpression ENDP
  37. end main

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

  1. Объявление модели small и резервирование 100h для стека.
  2. Объявление переменных:    - a со значением 100    - b со значением 4    - d со значением 10    - r8 с неизвестным значением
  3. Начало основной процедуры:    a. Перемещение адреса данных в регистр ax    b. Перемещение значения регистра ax в регистр ds    c. Манипуляция с регистрами для переменных a, b, d    d. Вызов процедуры EvaluationExpression    e. Сохранение результата в переменную r8    f. Завершение программы с кодом 4С00h
  4. Процедура EvaluationExpression:    a. Очистка флага переноса    b. Перемещение значения переменной d в регистр eax    c. Копирование значения переменной d в регистр esi    d. Умножение значения регистров eax и esi, результат в edx:eax (получение c^2)    e. Копирование результата в регистр edi (edi=c^2)    f. Умножение значения регистров eax и edi, результат в edx:eax (получение c^4)    g. Вычитание регистра edi из регистра eax (получение c^4-c^2)    h. Копирование результата в регистр edi (edi=c^4-c^2)    i. Перемещение значения переменной b в регистр eax    j. Умножение значения регистров eax и ebx, результат в edx:eax (получение a^2)    k. Умножение значения регистров eax и ebx, результат в edx:eax (получение a^3)    l. Вычитание регистра eax из регистра edi (получение c^4-a^3-c^2)    m. Копирование результата в регистр eax (eax=c^4-a^3-c^2)    n. Возврат результата
  5. Конец программы end main.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

10   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут