Qual è la differenza tra le istruzioni di assemblaggio movq e movl?
Per ogni istruzione assembly (ad esempio mov, xchg, call, ecc.) ci sono in realtà più istruzioni macchina, a seconda del tipo di operandi.
So if you have:
- mov REGISTER, MEMORY
- mov REGISTER, REGISTER
- mov MEMORY, REGISTER
- mov REGISTER, IMMEDIATE
- mov MEMORY, IMMEDIATE
For each of these 5 possibilities, there exists a separate machine code, even though in assembly they are all mov. Ecco perché la programmazione in assembly è molto più facile, non abbiamo bisogno di ricordare tutti questi dettagli e l'assemblatore se ne occupa per noi.
Ora alcune istruzioni (circa il 50% di esse) supportano anche diverse dimensioni di operandi. Per esempio, puoi spostare 4 byte in 4 byte, o 8 byte in 8 byte, o 2 byte in 2 byte, o 1 byte in 1 byte. Sono già 5 dimensioni (combinate con i 5 tipi di cui sopra, risultando in 25 istruzioni mov totali!).
Ma non è tutto! Puoi anche mov 2 byte in 4 byte, 1 byte in 4 byte, 1 byte in 2 byte (superiore), 1 byte in 2 byte (inferiore), 4 byte in 8 byte, 2 byte in 8 byte e infine 1 byte in 8 byte. Sono altre 7 operazioni! Tuttavia, queste sono consentite solo da registro a registro, e sono tipicamente usate per accedere a diversi byte di un registro. Quindi non aggravano ulteriormente il conteggio delle istruzioni.
Ora che tutto questo è impostato, la sintassi Assembly AT&T richiede al programmatore di definire all'interno del nome dell'istruzione quanti byte vuole mov, piuttosto che lasciare che sia l'assemblatore a dedurlo.
Questo significa che se uno vuole mov 4 byte, deve usare movl (move long, long è tradizionalmente 4 byte, short è 2 byte, byte è 1 byte, qword, cioè quad-word è 8 byte), e usare movq per copiare 8 byte.
Articoli simili
- Quali sono i vantaggi e gli svantaggi del set di istruzioni Thumb rispetto alle istruzioni ARM a 32 bit?
- Quanto costerebbe allestire una linea di assemblaggio di PCB?
- Qual è la differenza tra un'istruzione LDM e una VLDM nell'architettura del set di istruzioni ARM?
- Qual è la differenza tra il RISC e il formato delle istruzioni dell'8086?