Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 041 di 198] 

    

    IMUL - Moltiplicazione tra numeri Interi con segno
     
bulletQuesta istruzione esegue la moltiplicazione tra operandi ritenuti interi con segno; il moltiplicando (destinazione) è assunto per default:
bulletda AL (numero a 8 bit), se il moltiplicatore (sorgente) ha la dimensione di un byte; il risultato (16 bit, prodotto) è lasciato in AX.
bulletda AX (numero a 16 bit), se il moltiplicatore (sorgente) ha la dimensione di una word; il risultato (32 bit,prodotto) è lasciato in DX,AX.
bulletda EAX (con 80386/486, numero a 32 bit), se il moltiplicatore (sorgente) ha la dimensione di una doubleword; il risultato (64 bit, prodotto) è lasciato in EDX,EAX.
bulletCon questa sintassi il moltiplicatore (sorgente) non può essere una costante, cioè un dato immediato come, per esempio, in IMUL 05H.
bulletDa 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.
         
Ricorda... 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.
     
bulletCon 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.
bulletUna 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:
bulletentrambi registri a 16 o a 32 bit; esempio: IMUL AX,CX o IMUL EDX,ECX.
bulletun registro a 16 o a 32 bit; (moltiplicando) e il contenuto a 16 o a 32 bit (moltiplicatore) di una locazione di memoria; esempio: IMUL AX,[Depo02] o IMUL EDX,[Depo04].
bullet 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.
bulletLe caratteristiche della versione originale 8086 sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
        IMUL   Sorgente
 AX   <<   AL * sorgente
 DX,AX   <<   AX * sorgente

Esempio di Applicazione

Cicli di Clock Mem
Acces

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
         
bulletPer 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
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
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
          
bulletLa figura seguente mostra le risorse richieste da questa istruzione nel suo funzionamento originale, in funzione dell'unico operando (leggi le istruzioni):
          

Addr

Codifica Masm

Sequenza Bytes

Istruzione

0100
0101
55
55AA
55
AA 55
Depo01 
Depo02
DB 55H
DW 55AAH
---- ---------------- ----------------- ------- ----------------------
0103
0105
010A
010E
0110
0112
F6 E2
2E F7 26 0101
F6 26 0100
F7 E6
F6 E0
F7 E0
F6 E2
2E F7 26 01 01
F6 26 00 01
F7 E6
F6 E0
F7 E0
IMUL DL
IMUL CS:[Depo02]
IMUL [Depo01]
IMUL SI
IMUL AL
IMUL AX
         
bulletLe successive figure mostrano la codifica dell'istruzione in caso di uso con 2 o 3 operandi:
          

Addr

Codifica Masm

Sequenza Bytes

Istruzione

0100
0102
55AA
55AA1188
AA 55
88 11 AA 55
Depo02
Depo04
DW 55AAH
DD 55AA1188H
---- ---------------- ----------------- ------- ----------------------
.386P
0106
0109
010D
0112
0118
011B
----
011F
0122
0126
012B
0F AF D0
66 0F AF D1
0F AF 06 0100
66 0F AF 16 0102
6B F6 02
66 6B D2 02
----------------
6B D0 02
66 6B C2 02
6B 0E 0100 02
66 6B 16 0102 02
0F AF D0
66 0F AF D1
0F AF 06 00 01
66 0F AF 16 02 01
6B F6 02
66 6B D2 02
-----------------
6B D0 02
66 6B C2 02
6B 0E 00 01 02
66 6B 16 02 01 02






-------
IMUL DX,AX
IMUL EDX,ECX
IMUL AX,[Depo02]
IMUL EDX,[Depo04]
IMUL SI,02H
IMUL EDX,02H
----------------------
IMUL DX,AX,02H
IMUL EDX,EAX,02H
IMUL CX,[Depo02],02H
IMUL EDX,[Depo04],02H

    

Pagina Precedente Scheda n° 07 Pagina Successiva Istruzioni Cpu 80x86 Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Istruzione 041 - IMUL

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati