Descrição
Algoritmo de obtenção de raiz quadrada inteira em assembly puro para Linux.
Sem uso de alguma instrução para a operação ou algoritmo iterativo que necessite de valores de ponto flutuante.
[ Download:
raizquadrada001.asm ]
[
Enviar nova versão ]
[ Esconder código-fonte ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Comentários:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; nasm -f elf raizquadrada001.asm -o raizquadrada001.o
; ld -s raizquadrada001.o -o raizquadrada001
; a opção -s no linkeditor faz "strip -s" automaticamente
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
section .text
global _start
_start:
mov ebx, valor
xor ecx, ecx
_separa:
mov eax, ebx
and eax, 0x03
push eax
inc ecx
shr ebx, 0x02
cmp ebx, 0x00
jg _separa
xor eax, eax
xor ebx, ebx
_raiz:
pop edx
shl ebx, 0x02
add ebx, edx
shl eax, 0x01
mov edx, eax
shl edx, 0x01
inc edx
cmp ebx, edx
jl _zero
sub ebx, edx
add eax, 0x01
_zero:
dec ecx
cmp ecx, 0x00
jg _raiz
push 0x0a
xor ebx, ebx
mov ebx, 0x04
_empilha:
xor edx, edx
mov ecx, 0x0a
div ecx
add edx, 0x30
push edx
add ebx, 0x04
cmp eax, 0x00
jg _empilha
_escreve:
mov edx, ebx
mov ecx, esp
mov ebx, 0x01
mov eax, 0x04
int 0x80
_fim:
pop eax
add esp, eax
xor ebx, ebx
mov eax, 0x01
int 0x80
section .rodata
valor equ 4097
Scripts recomendados
FreeBSD Write
Escrita de um número em octal na tela em Assembly Puro para Linux x86 (GNU Assembly)
"Clear Screen" para Linux x86 com Inline Assembly (embutido no código) em C
Assembler 8086 - Recebe um caractere do usuário e imprime o código ASCII em pontos
Escrita de um número em octal na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assembler)
Comentários
| Nenhum comentário foi encontrado. |