Assemblaggio - Moltiplicazione di una costante

Puoi fare una moltiplicazione usando istruzioni multimediali come imul e mul nel codice del linguaggio assembly, come Mul name_register. Il processore internamente moltiplica i codici di programmazione separando i parametri di dimensioni, come per eax, ax e al, e quindi memorizza il risultato in eax o ax come "basso" e risultati in edx o dx come "più significativi", con il risultato l'ultimo registrato viene impostato, se il multiplo è maggiore di un byte.

Poiché i file multimediali sono enormi nella memoria, potrebbe essere necessario spostare i valori in eax per essere moltiplicati sul registro e il risultato del registro deve essere eax, con il valore precedente sovrascritto. Tuttavia, se è necessario moltiplicare un registro per una costante, inserire il risultato nel registro e quindi utilizzare una scorciatoia con l'istruzione "lea".

Breve introduzione

Le lingue di assemblaggio sono lingue di basso livello per la programmazione di computer e sono state sviluppate per la prima volta negli anni '50. Sono per lo più conosciuti come linguaggi di programmazione di seconda generazione. Una caratteristica importante del linguaggio Assembly è che hanno eliminato gran parte delle operazioni soggette a errori e che richiedevano molto tempo nella programmazione di prima generazione.

Moltiplicazione in assemblea

In assemblea puoi moltiplicare due numeri usando le istruzioni mul (numeri senza segno) e Imul. Sono usati come segue:

 mul name_registry 

Il processore aumenta il contenuto di eax o ax o al (a seconda della dimensione del registro, che viene fornita nei parametri) e quindi memorizza il risultato in eax, ax, edx o dx.

Usare mul è abbastanza fastidioso perché dovrai spostare il valore moltiplicato a eax, il valore da moltiplicare a un altro registro e il registro che contiene il risultato deve essere eax.

Tuttavia, se si desidera solo moltiplicare un registro per una costante e inserire il risultato nel registro di propria scelta, è possibile utilizzare un collegamento con l'istruzione "lea" (carica indirizzo effettivo). Questa istruzione viene utilizzata per recuperare l'indirizzo di un dato in memoria.

 lea destination_registry, [memory_address]; posiziona memory_address in destination_registry 

Il grande vantaggio di questo è che, usando una costante, non è necessario utilizzare un indirizzo di memoria extra. Immagina di voler moltiplicare ecx per 7 e salvare il risultato in ebx, il comando sarebbe:

 lea ebx, [ecx * 7] 

Nota: non è possibile moltiplicare due registri insieme usando questa scorciatoia.

Articolo Precedente Articolo Successivo

I Migliori Consigli