程序集不会打印数字

时间:2016-08-11 20:21:54

标签: linux assembly x86

我正在努力学习装配。我想写一个数到20的简单程序并打印出数字。我知道你必须从一个数字的ascii表示中减去ascii'0',把它变成数字,但我的实现只是拒绝工作。我仍然得到123456789:;< =>?@ ABCD

这是我的代码。

section  .bss
    num resb 1


section .text
    global _start

_start:
    mov eax, '1'
    mov ebx, 1          ; Filehandler 1 = stdout
    mov ecx, 20         ; The number we're counting to
    mov edx, 1          ; Size of a number in bytes

l1:
    mov [num], eax      ; Put eax into the value of num 

    mov eax, 4          ; Put 4 into eax (write)

    push ecx            ; Save ecx on the stack
    mov ecx, num        ; print num
    int 0x80            ; Do the print
    pop ecx             ; Bring ecx back from the stack

    mov eax, [num]      ; Put the value of num into eax

    sub eax, '0'        ; Convert to digit
    inc eax             ; Increment eax
    add eax, '0'        ; Convert back to ascii

    loop l1

    mov eax,1           ; System call number (sys_exit)
    int 0x80            ; Call kernel

有人能看出问题所在吗?我完全撞到了一堵砖墙。我正在使用nasm进行编译并进行链接。

0 个答案:

没有答案