循环不起作用,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'

但这需要更多的重写。