QNA > Q > Qual È La Differenza Tra Le Istruzioni Di Assemblaggio Movq E Movl?

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:

  1. mov REGISTER, MEMORY 
  2. mov REGISTER, REGISTER 
  3. mov MEMORY, REGISTER 
  4. mov REGISTER, IMMEDIATE 
  5. 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.

Di Colette Sprinzl

Quanto è difficile il linguaggio assembly ed è molto più difficile del C? :: Perché il linguaggio assembly dipende dalla macchina?
Link utili