Programação  
 
Rede de conhecimento computador >> Programação >> Programação De Computador Idiomas >> Content
Escreva um programa de linguagem de montagem para encontrar a série Fibonacci?
A linguagem de montagem específica depende muito da arquitetura de destino (por exemplo, x86, braço, mips). Fornecerei um exemplo usando o conjunto X86-64 (usando o assembler NASM) para Linux. Este programa calcula e imprime os 10 primeiros números de Fibonacci.

`` `Assembléia
Seção .Data
fib_msg dB "Fibonacci números:", 0
newline db 0xa, 0; personagem newline

Seção .bs
fib_sequence resd 10; Espaço de reserva para 10 números de Fibonacci

Seção .Text
Global _start

_começar:
; Inicialize os dois primeiros números de Fibonacci
mov dword [fib_sequence], 0
mov dword [fib_sequence + 4], 1

; Calcule os números de Fibonacci restantes
mov ecx, 8; Contador de loop (já temos os dois primeiros)
mov Esi, 8; Ponteiro para o próximo número de Fibonacci para calcular

loop_start:
mov eax, [fib_sequence + ESI - 8]; Obtenha o número anterior
adicione eax, [fib_sequence + ESI - 4]; Adicione o número antes disso
mov [fib_sequence + ESI], eax; Armazene o resultado

adicione ESI, 4; Mova para a próxima localização do número de Fibonacci
loop loop_start


; Imprima a sequência de Fibonacci
mov eax, 1; sys_write
mov edi, 1; stdout
mov rsi, fib_msg
Mov Rdx, 18
syscall

mov ecx, 10; Contador de loop para impressão
MOV ESI, FIB_SEFENCE
print_loop:
mov eax, 1; sys_write
mov edi, 1; stdout
mov rdx, 11; Dígitos máximos para um número de 32 bits + espaço + nulo
mov rdi, 1; stdout

; Converta o número em uma string (abordagem simples, sem tratamento de erros para números muito grandes)
Mov EBX, 10
mov edi, buffer; Use um buffer para armazenar a string
mov r8d, 0; Inicialize o índice da string
convert_loop:
XOR EDX, EDX
div ebx; Divida por 10
Adicione EDX, '0'; Converter restante para ascii
DEC R8D; Move Index
mov [edi+r8d*1], dl
CMP EAX, 0
jne convert_loop

; Reverte a string antes de imprimir
MOV R9D, R8D
mov rcx, 0
reverse_loop:
mov al, [edi + rcx]
MOV BL, [EDI + R9D]
MOV [EDI + RCX], BL
MOV [EDI + R9D], AL
Inc RCX
DEC R9D
CMP RCX, R9D
jl reverse_loop


mov rsi, buffer
syscall

adicione ESI, 4; Mova para o próximo número de Fibonacci
mov eax, 1
Mov Edi, 1
mov rsi, newline
mov rdx, 1
syscall

loop print_loop

; Saia do programa
mov eax, 60; sys_exit
XOR EDI, EDI; Código de saída 0
syscall


Seção .Data
Times de buffer 11 dB 0; Buffer para conversão de string
`` `

Para montar e executar este código:

1. Salvar: Salve o código como um arquivo `.asm` (por exemplo,` fibonacci.asm`).
2. montagem: Use Nasm para montá -lo:`NASM -F ELF64 FIBONACCI.ASM`
3. link: Link o arquivo de objeto:`ld -o fibonacci fibonacci.o`
4. Run: Executar o programa:`./Fibonacci`


Esta versão aprimorada inclui:

* Comentários mais claros: Explicando cada etapa.
* conversão de string: Um algoritmo básico para converter os números de Fibonacci em strings imprimíveis. (Nota:essa conversão de string é simples e não lida com números muito grandes de maneira robusta. Para o código de produção, seria necessária uma abordagem mais sofisticada.)
* reversão da string: O número é convertido em uma string em ordem inversa e depois revertida antes da impressão.
* NEWLINES: Adiciona novas linhas entre números para melhor legibilidade.
* Manuseio de erro (ausente): O código pronto para produção precisaria verificar se há erros em potencial (como transbordamentos de buffer).


Lembre-se de que a programação da montagem é muito baixa e específica da arquitetura. Este exemplo é adaptado para X86-64 e Linux. As adaptações seriam necessárias para outros sistemas. As linguagens de nível superior são geralmente preferidas para a maioria das tarefas de programação devido ao seu aumento da legibilidade, portabilidade e produtividade do desenvolvedor.

Anterior :

Próximo :
  Os artigos relacionados
·Como usar a tarefa Script no SSIS 2008 
·Como testar Código Algoritmos 
·Como pode derrapagens & Bugs cadeia de formato alterar …
·Tipos de dados COBOL 
·Como criar um script para aplicar privilégios para um …
·Como executar o VMware em um Terminal Linux 
·Como carregar programas para o dispositivo Windows CE 
·Como Incorporar um formulário de contato em uma págin…
·Como fazer greve -through Texto 
·Como formatar datas em C # 
  Artigos em destaque
·Como usar um formulário MDI no VB 
·Como converter de uma string para um número no MySQL 
·Como excluir Baixa Prioridade no MySQL 
·Como converter uma data do calendário em um String 
·O que é a computação tradicional? 
·Como fazer o sobrescrito no Dreamweaver? 
·Qual é a forma de feijão em Struts 
·Como remover NaNs & INF A partir de uma matriz no MATLA…
·Como ler um arquivo XLS Utilizando PHP 
·Como fazer uma String Maiúsculas Usando Python 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados