operazione MUL oltre i 32 bit

Stato
Discussione chiusa ad ulteriori risposte.

fraesem

Utente Silver
1 Ottobre 2008
4
1
0
59
stavo leggendo la sezione del manuale di assembly sulle operazioni aritmetiche.
ma ho un dubbio.
allora se io faccio:

movl $3,%eax
movl $2,%ebx
mull %ebx

adesso in eax ho 6, e se voglio stamparlo sfruttando la printf del C farò:

pushl %eax
push $(una stringa opportunamente formattata)
call printf
addl $8,%esp
ecc.

il dubbio che invece non sono riuscito a risolvere è questo:
prendete il codice di sopra ma in eax mettiamoci 2147483648 (massimo numero rappresentabile su 32 bit con segno).
ecco, a questo punto il risultato dovrebbe essere in edx:eax.
ma non ho capito come si possa accedere ad edx:eax per prendere il risultato.... e pi come lo potrei stampare???


p.s (un'altra domanda): come mai se utilizzo movb,addb (per dire che sto oprando su un byte) mi dice che il suffisso b non è valido quando la guida dice chiaramente che sono validi i suffissi W,L,B ?
 
La parte più significativa del risultato viene piazzata in edx, quella meno significativa in eax. Per stamparla il trucco è inizializzare una variabile ad esempio come .space 8 (inizializzi 8 byte), sbatti dentro quello spazio tutti 0 inizialmente, poi copi nei primi 4, i più significativi, il valore in edx, e negli altri 4 quello in eax, e lo stampi ricordando di usare come stringa di formato della printf %lld (long long) o %llu (unsigned long long).

Per il suffisso b, i vari manuali Intel credo che specifichino che la moltiplicazione e la divisione vogliono un operando che sia almeno a 16 bit.
 
Stato
Discussione chiusa ad ulteriori risposte.