如何在汇编循环中打印整数

时间:2011-02-04 16:59:46

标签: linux assembly printing integer nasm

我正在集会上表达。现在我有一个简单的while循环,以eax = 1开头,然后循环直到eax = 10.在循环中我使用打印宏来打印te进度(应该打印1 - 10)但它不起作用..

section .bss
    buffer resd 1

section .text
    global _start


%macro write 3
    mov eax, 4
    mov ebx, %1
    mov ecx, %2
    mov edx, %3
    int 80H
%endmacro

_start:
    xor eax, eax
    inc eax

while:
    cmp eax, 10
    jg end

    mov [buffer], eax

    write 1, [buffer], 1

    mov eax, [buffer]       

    inc eax
    jmp while

end:
    mov eax, 1
    xor ebx, ebx
    int 0x80

c等价物是:

#include <stdio.h>

int main(void)
{
    unsigned int i = 1;
    while(i <= 10)
    {
        printf("%d", i);
        i++;
    }

    return 0;
}

所以我的问题是..我如何使用write宏来打印值?我需要改变什么呢?

由于

1 个答案:

答案 0 :(得分:3)

好的,有几件事:

1)您正在调用的系统调用写入一个ascii字符串,因此您必须将整数转换为ascii。从0到9你必须为整数添加30h(如果我记得很清楚)以获得相应的ascii代码,但是对于更大的数字,它会变得越来越复杂。

2)传递给sys_write(1)的大小是错误的,你应该传递3(2个字节来保存数字+一个终止空字节)。

由于您必须更改所有寄存器的值才能调用sys_write,我建议您使用esi或edi来保持计数器或推送,然后在写入时弹出它。