Вычисление выражения - 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
Объяснение кода листинга программы
- Объявление модели small и резервирование 100h для стека.
- Объявление переменных:
-
a
со значением100
-b
со значением4
-d
со значением10
-r8
с неизвестным значением - Начало основной процедуры: a. Перемещение адреса данных в регистр ax b. Перемещение значения регистра ax в регистр ds c. Манипуляция с регистрами для переменных a, b, d d. Вызов процедуры EvaluationExpression e. Сохранение результата в переменную r8 f. Завершение программы с кодом 4С00h
- Процедура 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. Возврат результата
- Конец программы
end main
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д