istruzioni mov nell'assembly x86
Domanda
Da quello che ho letto su mov
, copia il secondo argomento nel primo argomento.Allora, cosa fa questo?
movl 8(%ebp), %edx
Copia tutto ciò che è in edx nel primo parametro della funzione (poiché un offset di +8 da ebp
è un parametro)?
Mi sembra che questo significhi davvero spostare il primo parametro nel registro edx
, ma ho letto su Wikipedia che è il contrario?
Soluzione
movl 8(%ebp), %edx
è in "Sintassi AT&T";in questa sintassi, la sorgente viene prima e la destinazione seconda.Quindi sì, la tua convinzione è corretta.La maggior parte della documentazione utilizza la "sintassi Intel", che ha l'ordine inverso.Questa è una fonte di notevole confusione per le persone che non conoscono l'assembly x86.
Nella sintassi Intel, la tua istruzione sarebbe scritta:
mov edx, [ebp + 8]
Notare l'assenza di %
prima dei nomi dei registri e l'uso di parentesi quadre invece di parentesi per l'indirizzo e l'assenza di un suffisso l
sull'istruzione.Questi sono omaggi inutili per sapere quale forma di assemblaggio stai guardando.