linux - 循环不起作用,nasm

标签 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

最佳答案

您增加了esi,但忘记将其存储到变量中,因此在循环顶部再次读取原始值。将存储 esi 的行移至标签 _middle后面。 (并且您不再需要将 variable 检索到 esi 中的行。)

由于您似乎正在使用 ASCII 值,因此您不应以值 0 而是以 48 开头 variable:

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

或者,从初始化变量开始:

variable        db      '0'

但这需要更多的重写。

关于linux - 循环不起作用,nasm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27882755/

相关文章:

c++ - cmake 和 make 不会创建文件夹并将文件复制到其中

android - 使用 SoundPool 的无缝循环

c - 指令级的有符号数模数

C 字符串文字不在机器代码中?

linux - emacs:未定义终端类型 xterm-256color

linux - 根据其他字段编辑txt文件中的特定字段数据

linux - 我如何打印矩阵的上三角

Java do while, while

您可以将非 ascii 字符传递给 argv 吗?

linux - Mercurial:如果可能,我如何找到包含特定文件的最新修订版?