Questa operazione deve essere eseguita in assembly puro (ovvero senza librerie o chiamate a C).Uscita di numeri interi in assembly su Linux
Comprendo l'essenza del problema: è necessario dividere il numero intero per 10, convertire il resto di una cifra in ASCII, emetterlo e quindi ripetere il processo con il quoziente.
Ma per qualche motivo, non funziona. Sto usando NASM su x86.
Ecco quello che ho fino ad ora (non emette nulla, ma non genera errori assembler o):
; 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
Ci sono una serie di domande simile a questo (vale a dire, this e this), ma mi sono perso nell'implementazione. This question (per DOS) è stato anche utile, ma sono ancora confuso.
Mi manca qualcosa qui. Pensieri?
Non vedo la costante '10' da nessuna parte in questo codice, che sarebbe necessaria per stampare le cifre decimali. (È necessario ripetere ripetutamente 'div' e' mod' con '10', memorizzare le cifre, invertirle e produrle, oppure passare prima dalla 'big end' e dividere per' 100.000.000', quindi per '10.000.000' , ecc., ma potrebbe non essere meno complicato del metodo store-and-reverse.) – sarnold
@sarnold Hai dimenticato di includere una riga nella parte superiore. Modificato la mia domanda per aggiungerla. –
Eccellente! Grazie per l'aggiornamento. – sarnold