Алгоритм вычисления объема - Assembler

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

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

На языке Ассемблер реализовать алгоритм вычисления объёма заданной фигуры с использованием математического сопроцессора.

Решение задачи: «Алгоритм вычисления объема»

textual
Листинг программы
global  _main
extern  _ExitProcess@4
extern  _printf
 
section .text use32
_main:
        push    dword [h2+4] ; Помещаяем в стек h2
        push    dword [h2]
        push    dword [h1+4] ; Помещаяем в стек h1
        push    dword [h1]
        push    dword [a+4]  ; Помещаяем в стек a
        push    dword [a]
        push    msg001       ; Помещаяем в стек ссылку на строку
        call    _printf      ; Вывод на экран
        add     esp, 4       ; Убираем из стека ссылку на строку
        call    volume       ; Вычисляем объём
        push    msg002       ; Помещаяем в стек ссылку на строку
        call    _printf      ; Вывод на экран
        add     esp, 12      ; Очистка стека
 
        xor     eax, eax     ; Выход с результатом 0
        push    eax
        call    _ExitProcess@4
 
volume:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; input:  a, h1, h2
; output: V
;
        fld     qword [esp+4]
        fmul    st0
        fld     qword [esp+12]
        fmul    st1
        fxch    st1
        fld     qword [esp+20]
        fmulp   st1
        fld     qword [c3]
        fdivp  st1
        faddp   st1
        fstp    qword [esp+20]
        ret     16
 
section .data
msg001  db      "a  = %f", 13, 10
        db      "h1 = %f", 13, 10
        db      "h2 = %f", 13, 10, 0
msg002  db      "V  = %f", 13, 10, 0
a       dq      10.0
h1      dq      5.0
h2      dq      3.0
c3      dq      3.0

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

Список элементов:

  1. global _main - объявление функции
  2. extern _ExitProcess@4 - экспортирована функция ExitProcess из библиотеки Windows
  3. extern _printf - экспортирована функция printf из библиотеки C run-time
  4. section .text use32 - описание раздела кода
  5. _main: - начало функции main
  6. push dword [h2+4] - помещение в стек h2
  7. push dword [h2] - помещение в стек h2
  8. push dword [h1+4] - помещение в стек h1
  9. push dword [h1] - помещение в стек h1
  10. push dword [a+4] - помещение в стек a
  11. push dword [a] - помещение в стек a
  12. push msg001 - помещение в стек ссылки на строку
  13. call _printf - вызов функции printf для вывода строки на экран
  14. add esp, 4 - очистка стека
  15. call volume - вызов функции volume для вычисления объема
  16. push msg002 - помещение в стек ссылки на строку
  17. call _printf - вызов функции printf для вывода строки на экран
  18. add esp, 12 - очистка стека
  19. xor eax, eax - результат вычисления функции main будет 0
  20. push eax - помещение в стек результата
  21. call _ExitProcess@4 - вызов функции ExitProcess с аргументом 0
  22. volume: - начало функции volume
  23. fld qword [esp+4] - загрузка в ST0 значения аргумента a
  24. fmul st0 - умножение значения ST0 на значение h2
  25. fld qword [esp+12] - загрузка в ST0 значения аргумента h1
  26. fmul st1 - умножение значения ST1 на значение h2
  27. fxch st1 - обмен значениями ST0 и ST1
  28. fld qword [esp+20] - загрузка в ST0 значения аргумента h2
  29. fmulp st1 - умножение значения ST1 на значение h2
  30. fld qword [c3] - загрузка в ST0 значения аргумента c3
  31. fdivp st1 - деление значения ST1 на значение ST0
  32. faddp st1 - сложение значения ST1 и ST0
  33. fstp qword [esp+20] - сохранение результата в переменную V
  34. ret 16 - выход из функции с аргументом 16
  35. section .data - описание раздела данных
  36. msg001 db a = %f, 13, 10 - определение строки msg001
  37. db h1 = %f, 13, 10 - определение строки h1
  38. db h2 = %f, 13, 10, 0 - определение строки h2
  39. msg002 db V = %f, 13, 10, 0 - определение строки msg002
  40. a dq 10.0 - определение переменной a
  41. h1 dq 5.0 - определение переменной h1
  42. h2 dq 3.0 - определение переменной h2
  43. c3 dq 3.0 - определение переменной c3

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


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

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

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