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

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

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

Здравствуйте, мне нужно составить программу, которая посчитает выражениe: r8 = c^4 - a^3 - c^2 Есть код, который считает: r2 = a - b * 10 - c
.model small
.stack 100h
.data
    a DWORD 100
    b DWORD 4
    d DWORD 10
    r2 DWORD ?
.code
.386
main PROC
    mov ax, @data
    mov ds, ax
    mov ebx, a
    mov ecx, b
    mov edx, d
call EvaluationExpression
    mov r2, eax
    mov ax, 4C00h
    int 21h
main ENDP
EvaluationExpression PROC USES ebx ecx edx
CLC
    mov eax, ecx
    mov ecx, 10
    mul ecx
    mov ecx, eax
    mov eax, ebx
    sub eax, ecx
    sub eax, edx
ret
EvaluationExpression ENDP
end main
Буду рад если поможете. Спасибо.

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

textual
Листинг программы
.model small
.stack 100h
.data
    a DWORD 100
    b DWORD 4
    d DWORD 10
    r8 DWORD ?
.code
.386
main PROC
    mov ax, @data
    mov ds, ax
    mov ebx, a
    mov ecx, b
    mov edx, d
call EvaluationExpression
    mov r8, eax
    mov ax, 4C00h
    int 21h
main ENDP
EvaluationExpression PROC USES ebx ecx edx esi edi
CLC
    mov eax, edx
    mov esi, edx
    mul esi             ;(edx:eax)=c^2
    mov edi, eax        ;edi=c^2
    mul edi             ;eax=c^4
    sub eax, edi        ;eax=c^4-c^2
    mov edi, eax        ;edi=c^4-c^2
    mov eax, ebx
    mul ebx             ;eax=a^2
    mul ebx             ;eax=a^3
    sub edi, eax        ;edi=c^4-a^3-c^2
    mov eax, edi        ;eax=c^4-a^3-c^2
ret
EvaluationExpression ENDP
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