我正在努力学习装配。我想写一个数到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进行编译并进行链接。