循环不起作用,nasm
Loop doesn't work, nasm
我编写了一个程序来输出 1-9 的计数,但编译后我只得到一个“0”。我不知道,我在哪里犯了错误。我想寻求帮助。下面我放一个代码:
section .text
global _start
_start:
xor esi,esi
mov esi,[variable]
_middle:
mov [variable],esi
mov eax,4
mov ebx,1
mov ecx,variable
mov edx,[length]
int 80h
inc esi
cmp esi,57
jbe _middle
_end:
mov eax,1
int 80h
section .data
variable db 48
length dd $-variable
你递增 esi
但你忘记将它存储到 variable
,所以在循环的顶部再次读取原始值。将存储 esi
的行移动到 标签 _middle
之后。 (而且您不再需要将 variable
检索到 esi
的行。)
因为看起来您正在使用 ASCII 值,所以您不应该以值 0
开始 variable
,而应该使用 48
:
_start:
mov esi, 48
_middle:
mov esi,[variable]
或者,从 variable
初始化开始:
variable db '0'
但这需要更多的重写。
我编写了一个程序来输出 1-9 的计数,但编译后我只得到一个“0”。我不知道,我在哪里犯了错误。我想寻求帮助。下面我放一个代码:
section .text
global _start
_start:
xor esi,esi
mov esi,[variable]
_middle:
mov [variable],esi
mov eax,4
mov ebx,1
mov ecx,variable
mov edx,[length]
int 80h
inc esi
cmp esi,57
jbe _middle
_end:
mov eax,1
int 80h
section .data
variable db 48
length dd $-variable
你递增 esi
但你忘记将它存储到 variable
,所以在循环的顶部再次读取原始值。将存储 esi
的行移动到 标签 _middle
之后。 (而且您不再需要将 variable
检索到 esi
的行。)
因为看起来您正在使用 ASCII 值,所以您不应该以值 0
开始 variable
,而应该使用 48
:
_start:
mov esi, 48
_middle:
mov esi,[variable]
或者,从 variable
初始化开始:
variable db '0'
但这需要更多的重写。