Kako IMUL instrukcija radi u 8086 mikroprocesoru?
Evo kako radi IMUL uputa:
1. Operandi :Instrukcija IMUL uzima dva operanda - izvorni operand i akumulator. Izvorni operand može biti registar, memorijska lokacija ili neposredna vrijednost. Akumulator je 16-bitni registar koji se koristi za pohranjivanje međurezultata i konačnih rezultata tijekom aritmetičkih operacija.
2. Množenje :Instrukcija IMUL izvodi množenje množenjem izvornog operanda s akumulatorom. Proizvod (koji može biti do 32 bita) pohranjuje se na dvije lokacije - nižih 16 bita pohranjuje se u akumulatoru (AL registar), a gornjih 16 bita (ako ih ima) pohranjuje se u registru prijenosne zastavice (CF).
3. Proširenje znaka :Prije izvođenja množenja, instrukcija IMUL prvo provjerava bitove predznaka (bit 7) i izvornog operanda i akumulatora. Ako je bilo koji od njih negativan (bit predznaka je postavljen), množenje se izvodi kao operacija predznaka. Ako su oba operanda pozitivna (bitovi predznaka su izbrisani), množenje se izvodi kao operacija bez predznaka.
4. Carry Flag :Nakon množenja, ako gornjih 16-bitova (preljev) umnoška nije nula, postavlja se zastavica prijenosa (CF). U suprotnom, oznaka prijenosa se briše.
5. Zastava znaka :Instrukcija IMUL također utječe na zastavu znaka (SF). Postavlja se ako je postavljen najvažniji bit (bit 15) rezultata u akumulatoru, što označava negativan rezultat. U suprotnom, oznaka predznaka se briše ako je rezultat pozitivan ili nula.
6. Nulta oznaka :Oznaka nule (ZF) postavlja se ako je rezultat u akumulatoru nula nakon množenja. U suprotnom, oznaka nule se briše ako rezultat nije nula.
7. Oznaka prelijevanja :Instrukcija IMUL ne utječe na zastavicu preljeva (OF).
8. Primjer :Razmotrimo primjer gdje se instrukcija IMUL koristi za množenje 16-bitnih vrijednosti 0x23AF i 0x4567. U ovom slučaju:
- Izvorni operand je 0x4567.
- Akumulator inicijalno sadrži 0x23AF.
- Nakon izvođenja množenja s predznakom, nižih 16-bitova umnoška (0x10B8E) pohranjuje se u akumulator, a zastavica prijenosa je postavljena jer gornjih 16-bitova (0x1) umnoška nije nula.
- Oznaka predznaka je izbrisana jer je najvažniji bit rezultata u akumulatoru 0.
- Oznaka nula se briše jer je rezultat u akumulatoru različit od nule.
Sve u svemu, instrukcija IMUL pruža prikladan način za izvođenje predznačenog množenja 16-bitnih operanda u 8086 mikroprocesoru, uzimajući u obzir proširenje predznaka i uvjete prekoračenja.