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.782 ]
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 octal na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assembler)
Escrita de um número em decimal na tela em Assembly Puro para Linux 64 bits (GNU Assembly)
GAS "Hello World" o número de vezes definido pelo usuário
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Linux é a solução para o fim do Windows10? [RESOLVIDO] (6)
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (0)
Programa fora de escala na tela do pc (29)









