Я пытаюсь вычислить выражение i_sqrt=(((i_number/i_sqrt)+i_sqrt)/2)
, где i_number
равно 78999999.
Я сделал свой код на ассемблере ubuntu x86 yasm
, но он выдает ошибку, описанную в заголовке. N - количество итераций, которые необходимо выполнить; в моем случае - 50.
Не могли бы вы помочь мне решить эту проблему или прокомментировать, где часть моего кода является ошибкой, или если я сделал какую-то часть где-то неправильным кодом.
Вот мой код :
section .data
contador db 50
i_number dq 78999999
i_sqrt dq 0
qAns1 dq 0
qAns2 dq 0
qAns3 dq 0
section .text
global _start
_start:
mov cl, byte[contador]
_ciclo:
;qAns1= i_number/i_sqrt
mov rax, qword [i_number]
cqo
idiv qword [i_sqrt]
mov qword [qAns1], rax
;qAns2= qAns1+i_sqrt
mov rax, qword [qAns1]
add rax, qword [i_sqrt]
mov qword [qAns2], rax
;qAns3=qAns2/2
mov rax, qword [qAns2]
cqo
mov rbx, 2
idiv rbx
mov qword [qAns3], rax
dec rcx
cmp rcx, 0
jne _ciclo
mov rax, 60
mov rdi, 0
syscall
Мне нужно сопоставить i_sqrt с i_number. Как я могу сделать это в моем коде? Ставить i_sqrt равным 0 только при инициализации? Это решение, но как мне это сделать?