Algoritmo de Raiz Quadrada Inteira em Assembly Puro para Linux x86 (GNU Assembler)

Publicado por Perfil removido (última atualização em 01/08/2012)

[ Hits: 6.245 ]

Download raizquadrada001.s




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.

  



Esconder código-fonte

############################################################################################
#      Comentários:
############################################################################################
#
#    as raizquadrada001.s -o raizquadrada001.o
#    ld -s raizquadrada001.o -o raizquadrada001
#    a opção -s no linkeditor faz "strip -s" automaticamente
#
############################################################################################

.section      .rodata

   valor:   .long   4097

.section   .text         
.globl       _start   

_start:   

   movl   valor,   %ebx
   xorl   %ecx,   %ecx

_separa:

   movl   %ebx,   %eax
   andl   $0x03,   %eax

   pushl   %eax

   incl   %ecx

   shrl   $0x02,   %ebx
   cmpl    $0x00,    %ebx

   jg    _separa

   xorl   %eax,   %eax
   xorl   %ebx,   %ebx

_raiz:

   popl   %edx

   shll   $0x02,   %ebx
   addl   %edx,   %ebx

   shll   $0x01,   %eax
   movl   %eax,   %edx
   shll   $0x01,   %edx

   incl   %edx

   cmpl   %edx,   %ebx
   jl   _zero

   subl   %edx,   %ebx
   addl   $0x01,   %eax

_zero:

   decl   %ecx
   cmpl   $0x00,   %ecx

   jg   _raiz

   pushl   $0x0a
   xorl    %ebx,   %ebx
   movl   $4,   %ebx

_empilha:

   xorl    %edx,   %edx
   movl   $10,   %ecx
   divl   %ecx
   addl   $0x30,   %edx
   pushl   %edx
   addl   $4,   %ebx
   cmpl    $0,    %eax
   jg    _empilha

_escreve:

   movl   %ebx,   %edx
   movl    %esp,   %ecx
   movl    $1,    %ebx
   movl    $4,    %eax

   int    $0x80

_fim:

   popl   %eax
   addl   %eax,   %esp

   xorl    %ebx,    %ebx
   movl    $1,    %eax
   int    $0x80

Scripts recomendados

"Clear Screen" para Linux x86 em Assembly Puro (GNU Assembly)

Escrita de um número em decimal na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assembly)

Retorna o maior e menor elemento de um vetor em Assembly

FreeBSD Write

GAS Calculadora de um dígito


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts