section .data
msg db "Hello World!", 0ah
n dd 10
a dd 0
b dd 1
salida db "0000", 0ah
section .text
global _start
_start:
;-------------------------------------------------------------------------------
mov ecx, 0
mov eax, 0
fib:
mov eax, 0; limpias el registro para que no acumule las sumas anteriores
; [b] ya almacena la suma, no sumes dos veces lo mismo
add eax, dword[a]
add eax, dword[b]
mov ebx, dword[b]
mov dword[a], ebx
mov dword[b], eax
inc ecx
cmp ecx, dword[n]
jl fib
;-------------------------------------------------------------------------------
; para ver el resultado en pantalla de nunmero mayores a 255 los dividi entre
; 10 para que me mmostrara los caracteres del codigo ascci
mov edx, 0
mov ebx, 10
div ebx ; la division que se realiza es la siguiente
; (edx:eax)/ ebx
; resultado -> eax
; residuo -> edx
mov ecx, edx
add ecx, 48
mov [salida], ecx
mov edx, 0
mov ebx, 10
div ebx ; la division que se realiza es la siguiente
; (edx:eax)/ ebx
; resultado -> eax
; residuo -> edx
mov ecx, edx
add ecx, 48
mov [salida+1], ecx
mov edx, 0
mov ebx, 10
div ebx ; la division que se realiza es la siguiente
; (edx:eax)/ ebx
; resultado -> eax
; residuo -> edx
mov ecx, edx
add ecx, 48
mov [salida+2], ecx
mov edx, 0
mov ebx, 10
div ebx ; la division que se realiza es la siguiente
; (edx:eax)/ ebx
; resultado -> eax
; residuo -> edx
mov ecx, edx
add ecx, 48
mov [salida+3], ecx
; se imprime el numero al reves, 377 se impime como 7730
mov rax, 1
mov rdi, 1
mov rsi, salida
mov rdx, 4
syscall
mov rax, 60
mov rdi, 0
syscall