Вычисление выражения - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д