Написать функцию возведения в степень - Assembler
Формулировка задачи:
Помогите, пожалуйста, решить задачу на
ASM
для шаблона!Текст задачи:
В этом задании вы должны написать функцию возведения в степень. Функция принимает число в регистре %eax и показатель степени в регистре %edx, и возвращает результат в регистре %eax. Для выполнения этого задания вам потребуются следующие инструкции:
- push %register и pop %register - если вы будете использовать регистры кроме %eax и %edx, то воспользуйтесь этой парой инструкций чтобы сохранить значение этих регистров в начале функции, а потом восстановить в конце (помните, что восстанавливать нужно в обратном порядке - так работает стек).
- imul %src, %dst - эта инструкция умножает значения в регистрах %src и %dst и сохраняет результат в регистре %dst
- test %register, %register - эта инструкция проверяет равно ли нулю значение в регистре %register и устанавливает специальный флаг ZF, если это так
- jz branch - эта инструкция передает управление метке branch, если инструкция test установила флаг ZF (используйте ее в паре с test).
- dec %register - эта инструкция уменьшает значение в регистре %register на 1
- ret - инструкция завершает функцию, т. е. достает со стека адрес возврата и передает туда управление (чтобы достать со стека правильный адрес возврата, стек должен находится в таком же состояние, как и в самом начале функции)
Sample Input:
5 6Sample Output:
15625Memory Limit:
256 MBTime Limit:
5 secondsШаблон для сдачи кода в тестирующую систему:
power:
# сохраните все используемые регистры
# (кроме %eax и %edx) с помощью команды
# push %<имя регистра>
# в регистре %eax хранится число
# а в регистре %edx показатель степени
# вставьте сюда код возведения в степень
# восстановите значения сохраненных регистров
# регистров (кроме %eax и %edx) с помощью
# команды pop %<имя регистра>
# ПОМНИТЕ, что восстанавливать их нужно в
# обратном порядке - так работает стек
ret
Решение задачи: «Написать функцию возведения в степень»
textual
Листинг программы
jz exit ;выйти из цикла если 0