Kako deluje ukaz IMUL v mikroprocesorju 8086?
Takole deluje navodilo IMUL:
1. Operandi :Ukaz IMUL ima dva operanda - izvorni operand in akumulator. Izvorni operand je lahko register, pomnilniška lokacija ali takojšnja vrednost. Akumulator je 16-bitni register, ki se uporablja za shranjevanje vmesnih in končnih rezultatov med aritmetičnimi operacijami.
2. Množenje :Ukaz IMUL izvede množenje z množenjem izvornega operanda z akumulatorjem. Izdelek (ki je lahko do 32-bitni) je shranjen na dveh lokacijah - spodnjih 16-bitov je shranjenih v akumulatorju (register AL), zgornjih 16-bitov (če obstajajo) pa v registru prenosne zastavice (CF).
3. Razširitev znaka :Pred izvedbo množenja ukaz IMUL najprej preveri bite predznaka (bit 7) izvornega operanda in akumulatorja. Če je katera od njiju negativna (bit predznaka je nastavljen), se množenje izvede kot operacija s predznakom. Če sta oba operanda pozitivna (biti predznaka so izbrisani), se množenje izvede kot operacija brez predznaka.
4. Carry Flag :Če po množenju zgornjih 16-bitov (prelivanje) produkta ni nič, se nastavi zastavica za prenos (CF). V nasprotnem primeru se zastavica za prenos počisti.
5. Zastavica znaka :Na zastavico znaka (SF) vpliva tudi navodilo IMUL. Nastavljen je, če je nastavljen najpomembnejši bit (bit 15) rezultata v akumulatorju, ki označuje negativen rezultat. V nasprotnem primeru se zastavica znaka počisti, če je rezultat pozitiven ali nič.
6. Zero Flag :Zastavica nič (ZF) je nastavljena, če je rezultat v akumulatorju po množenju nič. V nasprotnem primeru se ničelna zastavica počisti, če je rezultat različen od nič.
7. Overflow Flag :Ukaz IMUL ne vpliva na zastavico prelivanja (OF).
8. Primer :Oglejmo si primer, kjer se navodilo IMUL uporablja za množenje 16-bitnih vrednosti 0x23AF in 0x4567. V tem primeru:
- Izvorni operand je 0x4567.
- Akumulator na začetku vsebuje 0x23AF.
- Po izvedbi predznačenega množenja se spodnjih 16-bitov zmnožka (0x10B8E) shrani v akumulator, zastavica za prenos pa se nastavi, ker zgornjih 16-bitov (0x1) zmnožka ni nič.
- Zastavica predznaka je izbrisana, ker je najpomembnejši bit rezultata v akumulatorju 0.
- Oznaka nič je počiščena, ker je rezultat v akumulatorju različen od nič.
Na splošno navodilo IMUL zagotavlja priročen način za izvajanje predznačenega množenja 16-bitnih operandov v mikroprocesorju 8086, ob upoštevanju razširitve predznaka in pogojev prelivanja.