Написать функцию, которая вычисляет 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

Объяснение кода листинга программы

  1. Функция вычисляет x^p.
  2. Переменная rax используется как аккумулятор для хранения результата.
  3. Проверяется, равно ли значение первого аргумента функции нулю. Если это так, то возвращается ноль.
  4. Проверяется, равен ли второй аргумент функции единице. Если это так, то возвращается ноль.
  5. Проверяется, не равны ли оба аргумента функции нулю. Если это так, то выполняется цикл.
  6. В цикле выполняется умножение значения rdi на rax.
  7. Значение rsi уменьшается на единицу.
  8. Цикл выполняется до тех пор, пока значение rsi больше единицы.
  9. Возвращается результат.

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы