Escrita de um número em octal na tela em Assembly Puro para Linux 64 bits (GNU Assembler)
Publicado por Perfil removido (última atualização em 09/10/2015)
[ Hits: 3.637 ]
Este pequeno programa em Assembly tem uma antiga versão em formato de 32 bits:
http://www.vivaolinux.com.br/script/Escrita-de-um-numero-em-octal-na-tela-em-Assembly-Puro-para-Linu...
Esta versão está no formato 64 bits, para criação de objeto e linkedição em formato ELF64.
De modo semelhante à primeira versão, o código usa a pilha para a reordenação dos dígitos após a sequência de divisões.
Também foi escrito para usar variáveis globais, que não são tão adequadas ou elegantes como variáveis locais ou a pilha, visando facilitar a compreensão e dar uma visão mais intuitiva ao programa.
Conforme os restos sucessivos são obtidos, são empilhados, sendo ainda acrescidos do endereço inicial da string "digit", de modo que o valor empilhado aponta exatamente - é um endereço de memória, um ponteiro mesmo - para o dígito que será impresso.
Conforme vão sendo desempilhados, os dígitos são impressos.
O último item desempilhado é um ponteiro para o caractere "new line" armazenado ao final do código.
Este caractere identifica o fim da escrita dos dígitos, feita através de um cmp (comparação).
As diferenças entre a versão de 32 bits e a de 64 bits são notadamente visíveis no uso das interrupções, modo de chamá-las e registradores.
- Interrupção de escrita 32 bits: 4
- Interrupção de escrita 64 bits: 1
- Interrupção de encerramento 32 bits: 1
- Interrupção de encerramento 64 bits: 60
- Chamada de interrupção 32 bits: "int 0x80"
- Chamada de interrupção 32 bits: "syscall"
- Registradores usados no código com interrupções de 32 bits: eax. ebx, ecx, edx
- Registradores usados no código com interrupções de 64 bits: rax. rdi, rsi, rdx
No caso dos registradores, percebe-se que em 64 bits houve uma pequena mudança na analogia usual.
############################################################################################ # Comentários: ############################################################################################ # # as oct_64-001.s -o oct_64-001.o # ld -s oct_64-001.o -o oct_64-001 # a opção -s no linkeditor faz # "strip -s" automaticamente # ############################################################################################ .section .rodata digit: .ascii "01234567" nl: .ascii "\n" valor: .quad 4952488 .section .text .globl _start _start: pushq $nl movq valor, %rax _empilha: xorq %rdx, %rdx movq $8, %rcx divq %rcx addq $digit, %rdx pushq %rdx cmpq $0, %rax jg _empilha _escreve: movq $1, %rax movq $1, %rdi popq %rsi movq $1, %rdx syscall cmpq $nl, %rsi jne _escreve _fim: movq $60, %rax movq $0, %rdi syscall
Escrita de um número em hexadecimal na tela em Assembly Puro para Linux 64 bits (GNU Assembly
Relógio em assembly NES 8 bits (variante do 6502)
Algoritmo de Raiz Quadrada Inteira em Assembly Puro para Linux x86 (NASM - Netwide Assembler)
Escrita de um número em decimal na tela em Assembly Puro para Linux x86 (GNU Assembler)
Nenhum comentário foi encontrado.
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Adapador Wi-Fi para de funcionar depois de alguns minutos no Ubuntu (1)
Compartilhando uma ideia sobre computação quantica (9)
Preciso atribuir um terceiro IP em uma placa de rede eth0. (7)