在进行Linux系统调用时,循环退出

时间:2017-12-28 16:00:51

标签: linux assembly nasm x86-64 system-calls

我正在尝试编写一个打印整数的程序,整数存储在rax寄存器中,我不知道为什么它只打印整数的第一个数字,在这种情况下它是3。 程序将rax除以10并将余数+ 48存储在保留的内存中以便稍后显示。只要rax不是0,我们就重复这个。

代码:

section .bss
    integer resb 100

section .text

    global _start
_start:
    mov     rax, 321
    call    _printRAX

    mov     rax, 60
    mov     rdi, 0
    syscall

_printRAX:
    mov     rbx, 10
    mov     rcx, integer
    mov     [rcx], rbx

_loop1:
    inc     rcx
    mov     rdx, 0
    div     rbx
    add     rdx, 48
    mov     [rcx], dl

    cmp     rax, 0
    jne     _loop1

_loop2:
    mov     rax, 1
    mov     rdi, 1
    mov     rsi, rcx
    mov     rdx, 1
    syscall

    dec     rcx
    cmp     rcx, integer
    jge     _loop2

    ret

输出:

3

Try It Online

0 个答案:

没有答案