循环不起作用,是的

时间:2015-01-11 00:37:41

标签: linux loops assembly 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

1 个答案:

答案 0 :(得分:0)

您递增esi,但忘记将其存储到variable,因此在循环的顶部会再次读取原始值。在标签esi之后移动存储_middle 的行。 (而且您不再需要该行将variable检索到esi了。)

由于您似乎使用的是ASCII值,因此您不应该使用值variable启动0,而应使用48

_start:
        mov esi, 48
_middle:
        mov esi,[variable]

或者,从variable初始化:

开始
variable        db      '0'

但这需要更多的重写。