Написать функцию, которая вычисляет x^p - Assembler
Формулировка задачи:
Добрый день. Необходимо написать функцию,которая вычисляет x^p, x хранится в регистре RDI, p - в RSI.
Написал, но не все тесты проходит :
pow: cmpq $1,%RSI ja iterator cmpq $1,%RDI jne null_x movq $1,%RAX iterator: cmpq $1,%RSI jne exit mulq %RDI subq $1,%RSI jmp iterator null_x: movq $0,%RAX retq exit: movq %RDI,%RAX retq
Решение задачи: «Написать функцию, которая вычисляет x^p»
textual
Листинг программы
pow: movq $1, %rax testq %rdi, %rdi je null_x testq %rsi, %rsi je one_x cmpq $1, %rdi jne iterator one_x: ret null_x: testq &rsi, $rsi je error xorq %rax, %rax ret error: movq $-1, %rax ret iterator: mulq %rdi decq %rsi jne iterator ret
Объяснение кода листинга программы
- Функция вычисляет x^p.
- Переменная
rax
используется как аккумулятор для хранения результата. - Проверяется, равно ли значение первого аргумента функции нулю. Если это так, то возвращается ноль.
- Проверяется, равен ли второй аргумент функции единице. Если это так, то возвращается ноль.
- Проверяется, не равны ли оба аргумента функции нулю. Если это так, то выполняется цикл.
- В цикле выполняется умножение значения
rdi
наrax
. - Значение
rsi
уменьшается на единицу. - Цикл выполняется до тех пор, пока значение
rsi
больше единицы. - Возвращается результат.