Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 129 di 198] 

    

    MUL - Moltiplicazione tra numeri Interi senza segno
     
bulletQuesta istruzione esegue la moltiplicazione tra operandi ritenuti interi senza 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.
bulletIl moltiplicatore (sorgente) non può comunque essere una costante, cioè un dato immediato come, per esempio, in MUL 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.
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
        MUL   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

MUL

DL

70,77 13 9,14 13,18 no 2 #  

 

   

 

? ? ? ? #

MUL

[Depo01]

(76,83)+EA 16 12,17 13,18 1 2,4

MUL

[Depo02]

(128,143)+EA 24 12,25 13,26 1 2,4
MUL

[Depo04]

no no 12,41 13,42 1 2,4

MUL

SI

118,133 21 9,22 13,26 no 2
MUL

EDX

no no 43 43 no 2
         
bulletLa tabella evidenzia le possibili tipologie dell'unico operando passato (quello implicito è l'accumulatore): con registro o con memoria
          
bulletSe gli operandi sono coerenti con l'operazione aritmetica richiesta il funzionamento di questa istruzione è piuttosto scontato; vediamo casi possibili:
bulletla moltiplicazione coinvolge un moltiplicando a 8 bit (predisposto in AL=10H=16) e un moltiplicatore a 8 bit (passato in DL=10H=16); il risultato (prodotto) è previsto in AX (16/16=256=0100H); poiché è maggiore di 8 bit (AH diverso da 0) le flag C e O sono entrambe forzate a "1":
     

-R
AX=0010 BX=0000 CX=0000 DX=0010 SP=ED63 BP=0000 SI=0000 DI=0000
DS=118C ES=118C SS=118C CS=118C IP=0100 NV UP EI PL NZ NA PO NC
118C:0100 F6E2      MUL DL
-T
AX=0100 BX=0000 CX=0000 DX=0010 SP=ED63 BP=0000 SI=0000 DI=0000
DS=118C ES=118C SS=118C CS=118C IP=0102 OV UP EI PL NZ NA PO CY
118C:0102

     
bulletse la moltiplicazione di un moltiplicando a 8 bit (predisposto in AL=10H=16) e un moltiplicatore a 8 bit (passato in DL=05H=5) da risultato (prodotto, sempre in AX, 16/5=80=0050H) minore di 8 bit (AH= 0) le flag C e O sono entrambe forzate a "0":
     

-R
AX=0010 BX=0000 CX=0000 DX=0005 SP=ED63 BP=0000 SI=0000 DI=0000
DS=118C ES=118C SS=118C CS=118C IP=0100 NV UP EI PL NZ NA PO NC
118C:0100 F6E2      MUL DL
-T
AX=0050 BX=0000 CX=0000 DX=0010 SP=ED63 BP=0000 SI=0000 DI=0000
DS=118C ES=118C SS=118C CS=118C IP=0102 NV UP EI PL NZ NA PO NC
118C:0102

     
bulletla moltiplicazione coinvolge un moltiplicando a 16 bit (predisposto in AX=1000H=4096) e un moltiplicatore a 16 bit (passato in CX=2000H=8192); il risultato (prodotto) è previsto in DX,AX (4096*8192=33554432=02000000H, in pratica ripartito in AX=0000H e in DX=0200H)
     

-R
AX=1000 BX=0000 CX=2000 DX=0000 SP=ED63 BP=0000 SI=0000 DI=0000
DS=118C ES=118C SS=118C CS=118C IP=0100 NV UP EI PL NZ NA PO NC
118C:0100 F7E1      MUL CX
-T
AX=0000 BX=0000 CX=2000 DX=0200 SP=ED63 BP=0000 SI=0000 DI=0000
DS=118C ES=118C SS=118C CS=118C IP=0102 NV UP EI PL NZ AC PO NC
118C:0102

     
bulletLa figura seguente mostra le risorse richieste da questa istruzione in funzione dell'operando coinvolto (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
MUL DL
MUL CS:[Depo02]
MUL [Depo01]
MUL SI
MUL AL
MUL AX

    

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 129 - MUL

    

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