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.133 ]

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

Calcula ano de nascimento - C + Assembly

GAS Informações da CPU

Retorna a diferença entre dois vetores em Assemly

Expressão matemática em C

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


  

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