此代码可以从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
我做错了什么?