Записать данный алгоритм на ассемблере - Assembler

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

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

Если a ^ 4 > b то Если c * b = d / b то Результат = a OR b Иначе Результат = max(a,b,c)/(a^2-b) Иначе Результат = с ^ 3 + b только начал изучать асемблер помогите с объяснением как это записать, пожалуйста

Решение задачи: «Записать данный алгоритм на ассемблере»

textual
Листинг программы
; FASM dos com
;Если a ^ 4 > b то 
;Если c * b = d / b то 
;Результат = a OR b 
;Иначе 
;Результат = max(a,b,c)/(a^2-b) 
;Иначе 
;Результат = с ^ 3 + b
    org 100h
    finit           ; init FPU
    fild    dword [b]
    fild    dword [a]
    fmul    st0, st0    ; a^2
    fmul    st0, st0    ; a^4
    fucomp          ; a^4 > b ?
    fstsw   ax
    sahf
;   int 3
    ja  a4ltb
; a ^ 4 > b
    fild    dword [d]
    fdiv    st0, st1    ; st0 = d / b   
    fxch
    fild    dword [c]   
    fmulp           ; st0 = c * b, st1 = d / b
    fucompp         ; c * b = d / b ?
    fstsw   ax
    mov ebx, [a]
    mov ecx, [b]
    sahf
    jnz maxABC      ;no
;Результат = a OR b 
    or  ebx, ecx
    mov [result], ebx
    ret
;Результат = max(a,b,c)/(a^2-b) 
maxABC: mov eax,[c]
    cmp ebx, eax    ; a > c?
    cmova   eax, ebx    ; eax = a, if so
    cmp ecx, eax        ; b > eax ?
    cmova   eax, ecx    ; eax = max(a,b,c)
    imul    ebx, ebx    ; ebx = a^2
    sub ebx, ecx    ; ebx = a^2-b
    xor edx, edx
    idiv    ebx     ; eax = max(a,b,c)/(a^2-b) 
    mov [result], eax
    ret
; a^4 <= b 
;Результат = с ^ 3 + b
a4ltb:  fild    dword [c]
    fld st0
    fmul    st0, st0    ; c^2
    fmulp           ; st0 = c^3
    faddp           ; st0 = с ^ 3 + b
    fistp   dword [result]
    ret
a:  dd  5
b:  dd  10
c:  dd  16
d:  dd  7
result: dd  ?

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

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

  1. Задача: Записать данный алгоритм на ассемблере
  2. Используемый язык: Assembler
  3. Органы управления: finit, fild, fmul, fcompp, fstsw, jnz, mov, ret, cmova, cmp, imul, sub, xor, idiv, fld, fmul, faddp, fistp, sahf, int 3
  4. Переменные: a, b, c, d, result
  5. Значения переменных: [a] = 5, [b] = 10, [c] = 16, [d] = 7, [result] = ?
  6. Условие: Если a ^ 4 > b то
  7. Условие: Если c * b = d / b то
  8. Условие: Результат = a OR b
  9. Условие: Результат = max(a,b,c)/(a^2-b)
  10. Условие: Результат = с ^ 3 + b
  11. Последовательность выполнения:
    • инициализация FPU (finit)
    • загрузка a в ST0 (fild dword [b])
    • загрузка b в ST0 (fild dword [a])
    • вычисление a^2 (fmul st0, st0)
    • вычисление a^4 (fmul st0, st0)
    • проверка условия a^4 > b (fucomp)
    • загрузка d в ST0 (fild dword [d])
    • вычисление d/b (fdiv st0, st1)
    • загрузка c в ST0 (fild dword [c])
    • проверка условия c * b = d/b (fucompp)
    • если условие выполняется, то результат = a OR b (or ebx, ecx)
    • иначе результат = max(a,b,c)/(a^2-b) (maxABC)
    • вычисление max(a,b,c) (mov eax,[c], cmp ebx, eax, cmova eax, ebx, cmp ecx, eax, cmova eax, ecx, imul ebx, ebx, sub ebx, ecx, xor edx, edx, idiv ebx)
    • вычисление a^2-b (imul ebx, ebx, sub ebx, ecx)
    • сохранение результата (fistp dword [result])
    • возврат (ret)
  12. Дополнительные комментарии:
    • org 100h - установка точки входа в программу
    • int 3 - прерывание и переход в защищенный режим
    • sahf - сохранение состояния регистров класса AH
    • ja a4ltb - переход к блоку кода для условия a^4 > b
    • jnz maxABC - переход к блоку кода для условия c * b = d/b
    • a ^ 4 > b - условие на сравнение a^4 и b
    • c b = d/b - условие на сравнение c b и d/b
    • a OR b - логическое ИЛИ для a и b
    • max(a,b,c)/(a^2-b) - вычисление максимального значения из a, b и c и деление его на разность a^2 и b
    • a^4 <= b - условие на сравнение a^4 и b
    • c ^ 3 + b - вычисление значения по условию a^4 <= b
    • fild, fmul, fcompp, fstsw, jnz, mov, ret, cmova, cmp, imul, sub, xor, idiv, fld, fmul, faddp, fistp - использование инструкций FPU для выполнения математических операций

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


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

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

7   голосов , оценка 4 из 5
Похожие ответы