NASM大会斐波那契(打印错误)

时间:2016-09-24 07:48:16

标签: linux assembly nasm

此代码可以从0到8进行打印,但是它会保留打印垃圾,但它始终是相同的字符,输出为0 1 1 2 3 5 8 = E R g等。

我不知道我是否正确或者是否在帖子中犯了其他错误,这是我的第一个问题,抱歉并感谢您的阅读

SECTION .data
    lim: dw 10000
    lim_l: equ $-lim
    enter: db "",10
    enter_l: equ $- enter
SECTION .bss
    num_a   resw 16         ;Var a
    num_b   resw 16 ;Var b
    num_c   resw 16     ;Var c 
SECTION .text
    global main:
main:

mov word[num_a], 0  ;asignar 0
mov word[num_b], 1  ;asignar 0

add word[num_a],'0' ;se hace esto para poder imprimir en modo cadena
add word[num_b],'0' ;se hace esto para poder imprimir en modo cadena

mov eax, 4      ;Proceso mensaje
mov ebx, 1      
mov ecx, num_a      
mov edx, 16

int 80h

mov eax, 4      ;Proceso mensaje
mov ebx, 1  
mov ecx, enter
mov edx, enter_l

int 80h

mov eax, 4      ;Proceso mensaje
mov ebx, 1  
mov ecx, num_b
mov edx, 16

int 80h

mov eax, 4      ;Proceso mensaje
mov ebx, 1  
mov ecx, enter
mov edx, enter_l

int 80h

LOOP

ciclo:
    mov ebx, [num_b]    ;se guarda el valor de b en ebx
    mov [num_c],ebx     ;se almacena el valor de b en c
    sub ebx, '0'        ;se susbtrae el 0 para convertir en decimal
    mov eax, [num_a]    ;se guarda el valor de a en eax
    sub eax, '0'        ;se substrae el 0 para convertir en decimal

    ; c ya esta guardada y eax junto con ebx ya tienen su valor asignado

    add ebx, eax        ;se suma eax y ebx y se almacena en ebx
    add ebx, '0'        ;se agrega 0 para convertir en cadena
    add eax, '0'

    mov eax,[num_c]     ;salvando
    mov [num_a],eax     ;guardo el resultado de c (que antes era el b) en a
    mov [num_b],ebx     ;guardo el resultado de la suma en b (que sera el siguiente numero a sumar)

    ; num_c sigue en cadena, num_b esta en cadena, ,num_a en cadena, y los siguientes valores ya estan guardados

    mov eax, 4          ;Proceso mensaje
    mov ebx, 1  
    mov ecx, num_b
    mov edx, 1

    int 80h

    mov eax, 4      ;Proceso mensaje
    mov ebx, 1  
    mov ecx, enter
    mov edx, enter_l

    int 80h

    mov eax,[num_c]
    sub eax,'0'
    mov ebx,[lim]
    cmp eax,ebx
    jle ciclo

我做错了什么?

0 个答案:

没有答案