“Conocimiento Programación>Lenguajes De Programación

¿Escribir un programa de idiomas de ensamblaje para encontrar la serie Fibonacci?

2011/11/22
El lenguaje de ensamblaje específico depende en gran medida de la arquitectura objetivo (por ejemplo, x86, brazo, mips). Proporcionaré un ejemplo usando el ensamblaje x86-64 (usando el ensamblador NASM) para Linux. Este programa calcula e imprime los primeros 10 números de Fibonacci.

`` `Asamblea

sección .data

fib_msg db "números de fibonacci:", 0

Newline DB 0xa, 0; carácter nuevo

Sección .BSS

fib_sequence resd 10; Reserve espacio para 10 números de Fibonacci

Sección .Text

Global _Start

_comenzar:

; Inicializar los dos primeros números de Fibonacci

mov dword [fib_sequence], 0

mov dword [fib_sequence + 4], 1

; Calcule los números de Fibonacci restantes

mov ecx, 8; Contador de bucle (ya tenemos los dos primeros)

mov esi, 8; Puntero al siguiente número de Fibonacci para calcular

Loop_start:

mov eax, [fib_sequence + esi - 8]; Obtener el número anterior

Agregar EAX, [FIB_SECHENCE + ESI - 4]; Agregue el número antes de eso

mov [fib_sequence + esi], eax; Almacenar el resultado

Agregar ESI, 4; Pase a la próxima ubicación del número de fibonacci

bucle loop_start

; Imprima la secuencia de Fibonacci

mov eax, 1; sys_write

mov edi, 1; stdout

mov rsi, fib_msg

mov rdx, 18

syscall

mov ecx, 10; Contador de bucle para imprimir

Mov esi, fib_sequence

print_loop:

mov eax, 1; sys_write

mov edi, 1; stdout

mov rdx, 11; Dígitos máximos para un número de 32 bits + espacio + nulo

mov rdi, 1; stdout

; Convierta el número en una cadena (enfoque simple, sin manejo de errores para números muy grandes)

mov ebx, 10

mov edi, búfer; Use un búfer para almacenar la cadena

mov r8d, 0; Inicializar el índice de la cadena

Convert_loop:

Xor Edx, edx

div ebx; Dividir por 10

Agregar edx, '0'; Convertir el resto a ASCII

Dec R8d; Mover el índice

MOV [EDI+R8D*1], DL

CMP EAX, 0

JNE Convert_loop

; Invertir la cadena 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

diciembre r9d

CMP RCX, R9D

jl reverse_loop

mov rsi, búfer

syscall

Agregar ESI, 4; Pasar al siguiente número de fibonacci

mov eax, 1

mov edi, 1

mov rsi, Newline

mov rdx, 1

syscall

bucle print_loop

; Salir del programa

Mov eax, 60; sys_exit

Xor Edi, edi; Código de salida 0

syscall

sección .data

tiempos de amortiguación 11 db 0; Búfer para la conversión de cadenas

`` `` ``

Para ensamblar y ejecutar este código:

1. Guardar: Guarde el código como un archivo `.asm` (por ejemplo,` fibonacci.asm`).

2. Ensamble: Use NASM para ensamblarlo:`nasm -f elf64 fibonacci.asm`

3. Enlace: Enlace el archivo de objeto:`ld -o fibonacci fibonacci.o`

4. Run: Ejecutar el programa:`./Fibonacci`

Esta versión mejorada incluye:

* Comentarios más claros: Explicando cada paso.

* Conversión de cadenas: Un algoritmo básico para convertir los números de Fibonacci en cadenas imprimibles. (Nota:Esta conversión de cadenas es simple y no maneja números muy grandes de manera robusta. Para el código de producción, se necesitaría un enfoque más sofisticado).

* reversión de cadenas: El número se convierte en una cadena en orden inverso y luego se invierte antes de imprimir.

* nuevas líneas: Agrega nuevas líneas entre números para una mejor legibilidad.

* Manejo de errores (falta): El código listo para la producción necesitaría verificar posibles errores (como los desbordamientos del búfer).

Recuerde que la programación de ensamblaje es de muy bajo nivel y específica de la arquitectura. Este ejemplo está adaptado a X86-64 y Linux. Se necesitarían adaptaciones para otros sistemas. Los idiomas de nivel superior generalmente se prefieren para la mayoría de las tareas de programación debido a su mayor legibilidad, portabilidad y productividad del desarrollador.

Lenguajes De Programación
Cómo crear una rama SVN de un archivo en Vivo
Cómo escribir un informe de OEM
Diferencia entre el front-end y back-end
Cómo crear controladores de eventos Jquery
¿Qué es el programa del sistema y sus tipos?
Cómo eliminar un archivo con SSIS
Cómo autenticar SCCM SQL
Cómo utilizar expresiones regulares para bloquear el spam
Conocimiento de la computadora © http://www.ordenador.online