Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 041 di 198] |
|
|
Questa istruzione esegue la moltiplicazione
tra operandi ritenuti interi con segno;
il moltiplicando (destinazione) è assunto per default:
| |||||||
Con questa sintassi il moltiplicatore (sorgente) non può essere una costante, cioè un dato immediato come, per esempio, in IMUL 05H. | |||||||
Da notare che, se il moltiplicando a 8 bit produce un risultato a 8 bit gli 8 bit alti del risultato (in AH) sono tutti a zero, così come le flag di Carry e di Overflow; lo stesso discorso vale, ovviamente, anche per gli operandi di altre dimensioni; in particolare oltre alle flag citate sono nulli rispettivamente i registri DX e EDX. |
NB: questa istruzione è piuttosto originale: può disporre di ben 4 diverse sintassi: oltre a quella standard, tipica del set originale 8086, ne sono disponibili altre 3, tipiche dei processori più moderni, a 2 o a 3 operandi. |
Con 80186/486 l'istruzione IMUL può avere 2 operandi. Il funzionamento è simile a quello standard: il moltiplicando (destinazione, primo operando) è un registro a 16 bit ma non necessariamente l'accumulatore, mentre il moltiplicatore (sorgente, secondo operando) è un dato immediato; il risultato a 16 bit viene memorizzato nel primo operando (cioè nel registro a 16 bit); esempio: IMUL AX,0FH. | |||||
Una variante a questa tipologia d'uso è possibile a
partire dagli 80386/486:
in questo caso i 2 operandi
dell'istruzione IMUL (rispettivamente moltiplicando,
destinazione, primo operando, e moltiplicatore,
sorgente, secondo operando) possono essere:
| |||||
Se l'istruzione IMUL è a 3 operandi, il primo operando è un registro a 16 o a 32 bit e rappresenta il luogo in cui riporre il risultato (prodotto) della moltiplicazione tra il secondo operando (moltiplicando, ancora un registro a 16 o a 32 bit oppure il contenuto a 16 o a 32 bit di una locazione di memoria) con il terzo operando (moltiplicatore, un dato immediato); esempio: IMUL BX,[DI],02H. |
Le caratteristiche della versione originale 8086 sono riassunte nella seguente tabella (leggi le istruzioni ): |
IMUL Sorgente |
|
|||||||||||||||||||||||||
Esempio di Applicazione |
Cicli di Clock | Mem Acces |
N° Bytes |
Flag influenzate | ||||||||||||||||||||||
Mnemonico | Operandi | 86 | 268 | 386 | 486 | O | D | I | T | S | Z | A | P | C | ||||||||||||
IMUL |
DL |
80,98 | 13 | 9,14 | 13,18 | no | 2 | # |
|
|
? | ? | ? | ? | # | |||||||||||
IMUL |
[Depo01] |
(86,104)+EA | 16 | 12,17 | 13,18 | 1 | 2,4 | |||||||||||||||||||
IMUL |
[Depo02] |
(138,164)+EA | 24 | 12,25 | 13,26 | 1 | 2,4 | |||||||||||||||||||
IMUL |
[Depo04] |
no | no | 12,41 | 13,42 | 1 | 2,4 | |||||||||||||||||||
IMUL |
SI |
128,154 | 21 | 9,22 | 13,26 | no | 2 | |||||||||||||||||||
IMUL |
EDX |
no | no | 43 | 43 | no | 2 |
Per le varianti moderne i bytes necessari per codificare l'istruzione vanno da 3 a 6 e i cicli di Clock da 9 a 42: |
Esempio di Applicazione |
Cicli di Clock | N° Bytes |
Flag influenzate | ||||||||||||
Mnemonico | Operandi | 86 | 268 | 386 | 486 | O | D | I | T | S | Z | A | P | C | |
IMUL |
DX,AX |
no | no | 9,22 | 13,26 | 3,5 | # |
|
|
? | ? | ? | ? | # | |
IMUL |
EDX,ECX |
no | no | 9,38 | 13,42 | 3,5 | |||||||||
IMUL |
AX,[Depo02] |
no | no | 12,25 | 13,26 | 3,5 | |||||||||
IMUL |
EDX,[Depo04] |
no | no | 12,41 | 13,42 | 3,5 | |||||||||
IMUL |
SI,02H |
no | 21 | 9,22 | 13,26 | 3,6 | |||||||||
IMUL |
EDX,02H |
no | no | 9,38 | 13,42 | 3,6 |
Esempio di Applicazione |
Cicli di Clock | N° Bytes |
Flag influenzate | ||||||||||||
Mnemonico | Operandi | 86 | 268 | 386 | 486 | O | D | I | T | S | Z | A | P | C | |
IMUL |
DX,AX,02H |
no | 21 | 9,22 | 13,26 | 3,6 | # |
|
|
? | ? | ? | ? | # | |
IMUL |
EDX,EAX,02H |
no | 21 | 9,38 | 13,42 | 3,6 | |||||||||
IMUL |
CX,[Depo02],02H |
no | 24 | 12,25 | 13,26 | 3,6 | |||||||||
IMUL |
EDX,[Depo04],02H |
no | 24 | 12,41 | 13,42 | 3,6 |
La figura seguente mostra le risorse richieste da questa istruzione nel suo funzionamento originale, in funzione dell'unico operando (leggi le istruzioni): |
|
Le successive figure mostrano la codifica dell'istruzione in caso di uso con 2 o 3 operandi: |
|
|
Scheda n° 07 | Istruzioni Cpu 80x86 | |||||||
Istruzione 041 - IMUL |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|