Crivo de Eratóstenes Simples para Linux x86 em Assembly Puro (GNU Assembler)
Publicado por Perfil removido (última atualização em 19/02/2015)
[ Hits: 2.125 ]
Observações:
1. Após a linkedição, o binário ocupa 26KB; após "strip -s" ocupa 25KB. É muito grande se comparado aos menos de 4KB que poderia ocupar se feito em C.
2. Esse tamanho considerável é devido ao modo como foram alocados os valores calculados pelo crivo.
3. Feito para 32 bits.
4. Para não correr risco de overflow, esta versão trabalha apenas com os primos do intervalo de 1 até 2^16-1 ( = 65535).
5. Foi usado um truque para não ser calculada diretamente a raiz quadrada.
6. Após os cômputos, ele escreve os números encontrados na tela.
############################################## # Comentários: ############################################## # # as sieve001.s -o sieve001.o # ld sieve001.o -o sieve001 # strip -s sieve001 # ./sieve001 # ############################################## .comm s 24545 .space 24545 .section .rodata digit: .ascii "0123456789" bl: .ascii " " nl: .ascii "\n" .section .data i: .long 5 j: .long 0 k: .long 1 l: .long 0 p: .long 65535 # q: .long 6541 # .section .text .global _start _start: call _inicializa call _crivo call _escreve call _fim _inicializa: xorl %ecx, %ecx movl $2, s(,%ecx, 4) incl %ecx movl $3, s(,%ecx, 4) _I0: incl %ecx movl $1, s(,%ecx, 4) cmpl q, %ecx jl _I0 ret _crivo: movl k, %ecx cmpl q, %ecx jge _C0 movl i, %ecx cmpl p, %ecx jge _C0 movl $0, j call _raiz call _proximo jmp _crivo _C0: ret _raiz: xorl %edx, %edx movl j, %ecx movl s(,%ecx, 4),%eax mull %eax cmpl i, %eax je _R0 jg _R1 call _teste movl l, %eax cmpl $0, %eax je _R0 incl j jmp _raiz _R1: call _adiciona _R0: ret _teste: xorl %edx, %edx movl $0, l movl i, %eax movl j, %ebx movl s(,%ebx, 4),%ecx divl %ecx movl %edx, l ret _adiciona: incl k movl k, %ecx movl i, %eax movl %eax, s(,%ecx, 4) ret _proximo: movl i, %eax movl $3, %ecx divl %ecx addl $2, i cmpl $2, %edx je _S2 addl $2, i _S2: ret _escreve: movl $0, j _E0: movl j, %ebx movl s(,%ebx, 4),%eax cmpl $1, %eax je _E1 cmpl q, %ebx jg _E1 incl j pushl $bl jmp _E2 _E1: pushl $nl jmp _E3 _E2: xorl %edx, %edx movl $10, %ecx divl %ecx addl $digit, %edx pushl %edx cmpl $0, %eax jg _E2 _E3: movl $4, %eax movl $1, %ebx popl %ecx movl $1, %edx int $0x80 cmpl $bl, %ecx je _E0 cmpl $nl, %ecx je _E4 jmp _E3 _E4: ret _fim: movl %eax, %ebx movl $1, %eax int $0x80
Escrita de um número em decimal na tela em Assembly Puro para Linux x86 (GNU Assembler)
Árvore binária de busca em Assembly - com comentários
codigo em assembley que soma dois numeros
Nenhum comentário foi encontrado.
Atenção a quem posta conteúdo de dicas, scripts e tal (1)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
ASRock H310CM-HG4 vs Linux (15)
Lançado Ubuntu 24.04 Final (2)
iso de sistema 32 bit em atividade (9)