Вывод целых чисел на ассемблере в Linux

Это нужно делать в чистом ассемблере (т.е. без библиотек или вызовов C) .

Я понимаю суть проблемы: нужно разделить целое число на 10, преобразовать однозначный остаток в ASCII, вывести его и затем повторить процесс с частным.

Но почему-то просто не работает. Я использую NASM на x86.

Вот что у меня было до сих пор (ничего не выводит, но и не выдает ошибок ассемблера):

; integer to output is stored in eax
mov ecx, 10   ; for base 10

loop:
div ecx  ;EAX contains the quotient, EDX the remainder

; Do something to EDX to convert it to ASCII, not sure if this is correct
add edx, '0'

push eax    ;We'll be playing with EAX to output EDX, save EAX to the stack

mov eax, 4              ; sys_write
mov ebx, 1              ; to STDOUT
mov ecx, edx
mov edx, 1
int 0x80

pop eax  ;restore EAX

cmp eax, 0   ;If EAX is 0, our job is done
jnz loop

Есть ряд вопросов, похожих на этот (а именно, this и this ), но я потерялся в реализации. Этот вопрос (для DOS) также был полезен, но я все еще не понимаю.

Я, должно быть, что-то упускаю. Мысли?

7
задан Community 23 May 2017 в 12:14
поделиться