SEMINARSKI RAD MIKRORAČUNARI TEMA: Razlika između seta instrukcija MP 8085 i 8086, nove instrukcije za MP8086
ppaallee@hotmail.com
Sadržaj Sadržaj
1
Uvod
3
1.
Instrukcije za mikroprocesor 8085
4
1.1 Tipovi instrukcija
4
2. Instrukcije za Mikroprocesor 8086
12
3. Funkcionalnost instrukcija
14
3.1 Instrukcije za prenos podataka
14
3.1.1Instrukcije prenosa opšte namjene
14
3.1.2 Instrukcije za rukovanje sa stekom
14
3.1.3. Instrukcije konverzije
14
3.1.4 Instrukcije za rukovanje periferijom IN, OUT
15
3.2. Aritmetičke instrukcije
15
3.2.1 Instrukcije za sabiranje
15
3.2.2 Instrukcije za oduzimanje
15
3.2.3 Instrukcije za poređenje
15
3.2.4 Instrukcija za komplement
16
3.2.5 Instrukcije za množenje
16
3.2.6 Instrukcije za dijeljenje
16
3.3. Logičke instrukcije i instrukcije pomjeranja i rotiranja
16
3.3.1 Logičke instrukcije
16
3.3.2. Instrukcija za rukovanje bitovima
16
3.3.3. Instrukcije za pomjeranje
17
3.3.4. Instrukcije za rotiranje
17
3.4. Upravljačke instrukcije
17
2
3.4.1. Instrukcije bezuslovnog skoka
17
3.4.2. Instrukcije uslovnog skoka
17
3.4.3. Instrukcije za rukovanje potprogramima
18
3.4.4. Instrukcije za obrazovanje programskih petlji
18
3.4.5. Instrukcije za rukovanje prekidima
4. Nove instrukcije za MP 8086
18 19
4.1. Instrukcije za rukovanje sa nizovima
19
4.2. Instrukcije za upravljanje procesorom
19
ZakljuÄ?ak
20
Literatura
21
3
Uvod
Da bi smo mogli uopšte govoriti o razlici između seta instrukcija Mikroprocesora 8085 i Mikroprocesora 8086 moramo prvo navesti i objaniti instrukcije za Mikroprocesor 8085, pa zatim instrukcije za Mikroprocesor 8086. Znači prvo ćemo navesti tipove instrukcija koje postoje pa zatim ih opisati šta koja znači. Ne postoji neka bitnija razlika između instrukcija za Mikroprocesor 8085 u odnosu na Mikroprocesor 8086. Mikroprocesor Intel 8085 koristi oko 80 osnovnih instrukcija. Ove instrukcije se dijele na: • • • •
Instrukcije prenosa podataka Instrukcije koje manipulišu sadržajem akumulatora i registara Instrukcije za upravljane tokom izvršavanja programa Instrukcije za upravljanje stekom, ulazom i izlazom mikropocesora.
Uglavnom se sve svodi na isto osim što za Mikroprocesor 8086 postoje neki novi tipovi instrukcija kao što su: • Instrukcije za rad sa nizovima podataka • Instrukcije za upravljanje prenosom i • Instrukcije za upravljanje procesorom Sada ćemo detaljno opisati instrukcije za Mikroprocesor 8085.
4
1. Instrukcije za Mikroprocesor 8085 Instrukcija procesora definiše operaciju koji će procesor realizovati pri izvršavanju te instrukcije. Instrukcija je binarni digitalni podatak koji definiše operaciju koja će se izvršiti i podatke ili operande koji će biti korišteni i realizovani u toj operaciji. Koriste se još termini instrukciona riječ i mašinska instrukcija, koji označavaju isto. Instrukcija se sastoji iz dva dijela pa se kaže da je format instrukcije sastavljen od operacionog dijela i drugog dijela koji se naziva dio operanda. o p e ra c io n i kod
d io o p e ra n d a
U operacionom dijelu je definisana operacija koja se realizuje. Operacije se koduju i predstavljene su određenim kodom. Zato se ovaj dio instrukcije još naziva operacioni kod ili kod operacije. Broj bita u operacionom kodu zavisi od ukupnog broja operacija koje procesor može da realizuje, tj. od ukupnog broja različitih instrukcija procesora. (n – bita koduje 2n instrukcija) Kod procesora 8085 operacioni kod je dužine 1B, tj. 8 bita što znači da on može imati do 256 instrukcija mada ima manje. Drugi dio instrukcije koji se naziva dio operanda definiše podatak, tj. operand koji će se koristiti pri realizovanju neke instrukcije. Taj dio može da bude sam operand ili može da bude adresni dio koji definiše adresu operanda, tj. gdje se operand nalazi. Da li će ovaj dio da bude operand ili adresni dio zavisi od konkretne instrukcije, odnosno od operacionog koda i zavisi od tzv. načina adresiranja. Adresni dio može da bude adresa operanda ili podatak na osnovu kojeg se određuje adresa. Dio operanda može da bude 1 B ili 2B ili da uopće ne postoji što zavisi od konkretne instrukcije. Kod procesora 8085 dio operanda u zavisnosti od instrukcije može biti 1B, 2B ili da ne postoji.
1.1 Tipovi instrukcija Svaki procesor može da realizuje određene operacije. Osnovni skup operacija koje može da realizuje procesor definisan je instrukcijama procesora. Svaki procesor posjeduje konačan skup instrukcija sa tačno poznatim operacijama. Skup instrukcija procesora se definiše pri projektovanju i izradi procesora. On se projektuje tako da zadovoljava sljedeća tri zahtjeva: 5
-
kompletnost efikasnost pojednostavljenje hardvera procesora i programiranja
Kompletnost znači da skup instrukcija procesora mora biti tako definisan da se pomoću njega može napisati program za realizovanje bilo koje funkcije, odnosno posla koji se može izraziti preko određenog algoritma koji se u računaru može realizovati. Efikasnost znači da skup instrukcija treba da bude takav da se najčešće potrebne funkcije, odnosno poslovi mogu realizovati uz korištenje minimalnog broja instrukcija. Pojednostavljenje znači da skup instrukcija treba da bude takav da dovede do pojednostavljenja hardvera procesora i da olakša programiranje. Instrukcije procesora se obično dijele u sljedećih pet glavnih tipova: a) b) c) d) e)
instrukcije za prenos podataka aritmetičke instrukcije logičke instrukcije instrukcije za upravljanje i izvršavanje programa ulazno/izlazne instrukcije.
Instrukcije za prenos podataka se koriste za kopiranje podataka, odnosno prenošenje iz jedne memorijske lokacije u drugu memorijsku lokaciju, iz jednog registra u drugi registar u procesoru, između registara procesora i memorijskih lokacija, tj. za sve prenose unutar procesora i memorije i unutar memorije. Naredbe prijenosa podataka prenose podatke između memorije i registara kao i između samih registara. Tablica prikazuje mnemonike korištene u toj skupini naredbi. Mikroprocesor ne dozvoljava izravni prijenos podataka između memorijskih lokacija. Naredbe prijenosa podataka ne utječu na stanja zastavica registra stanja programa.
6
Mnemonik
Opis instrukcije
MOV r1, r2
Prijenos sadržaja r2 u r1, (r1)=(r2)
MOV M, r
Prijenos sadržaja registra r u memoriju
MOV r, M
Prijenos sadržaja memorije u registar r
MVI r, data8
Prijenos trenutnog 8 bitnog podatka u r, r= data8
MVI M, data8
prijenos 8 bitnog podataka u memoriju
LDA adrs
Napuni sadržaj akumulatora sa sadržajem memorijske lokacije na adresi adrs
STA adrs
Spremi sadržaj akumulatora u memorijsku lokaciju čija adresa je adrs
LHLD adrs
Napuni sadržaj H i L registara sa sadržajem memorijskih lokacija od kojih je prva adresa adrs
SHLD adrs
Spremi sadržaj H i L registara u memorijske lokacije od kojih je prva adresa adrs
LXI rp, data16
Napuni registarski par rp sa 16 bitnim podatkom
LDAX rpB,D
Napuni sadržaj akumulatora iz memorijske lokacije čija adresa je u paru registara rpB,D
STAX rpB,D
Spremi sadržaj akumulatora u memorijsku lokaciju čija adresa je u registarskom paru rp
XCHG
Promijeni sadržaj registara H i L sa sadržajem registara DiE
XTHL
Promijeni vrh složnika sa registrima H i L
Aritmetičke instrukcije realizuju aritmetičke operacije korištenjem podataka iz memorije ili iz registara procesora. Podaci su u binarnom obliku i operacije se realizuju sa takvim podacima. Naredbe za izvođenje aritmetičkih operacija služe za zbrajanje, oduzimanje, inkrementiranje ili dekrementiranje podataka pohranjenih u registrima ili memoriji. Tablica prikazuje mnemonike korištene u toj skupini naredbi.
7
Logičke instrukcije realizuju logičke operacije i druge nearitmetičke operacije. Pri tom se koriste podaci iz registara procesora ili iz memorije. Od logičkih operacija to su: ''I'', ''ILI'', ''NE'' i ''ISKLJUČIVO ILI'', a od nearitmetičkih operacija to su: pomijeranje, rotiranje te postavljanje ili brisanje bita u nekom redu. Naredbe ove skupine koriste se za izvođenje logičkih operacija s podacima u registrima, memoriji i zastavicama stanja registra stanja programa. Tablica 3.5-4 prikazuje mnemonike korištene u toj skupini naredbi. Naredbe izvođenja logičkih opearcija I, ILI i isključivo ILI služe za brisanje, postavljanje i komplementiranje pojedinih bita u akumulatoru. Naredba okretanja služi za pomak sadržaja akumulatora jedno mjesto u lijevu ili desnu stranu. Za postavljanje ili komplementiranje zastavice prijenosa postoje dvije naredbe. Dvije naredbe uspoređivanja služe za uspoređivanje sadržaja akumulatora s nekim drugim 8-bitnim registrom, sadržajem 8-bitne memorijske lokacije ili trenutnim 8-bitnim podatkom. Rezultat izvođenja naredbi uspoređivanja ne utječe na sadržaj akumulatora, registara ili memorije, ali utječe na zastavice stanja. Npr., ako je sadržaj akumulatora 55, onda naredba CPI 55 ostavlja sadržaj akumulatora nepromjenjenim, dok se zastavica nule postavlja u stanje logičke jedinice.
8
Instrukcije za upravljanje i izvršavanje programa mijenjaju redoslijed izvršavanja instrukcija programa. Tu spadaju instrukcije skokova ili grananja u programu. Postoje dva tipa takvih instrukcija: -
bezuslovne i uslovne
Kod bezuslovnih instrukcija grananje ili skok se realizuje berz obzira na stanje procesora, odnosno programa. Kod uslovnih instrukcija skok ili grananje će bii realizovano jedino ako je ispunjen odgovarajući uslov koji se tom instrukcijom ispituje. Ako je taj uslov ispunjen grananje ili skok će biti realizovano, a ako nije nastavlja se izvršavanje programa bez realizovanja skoka. Kod tih instrukcija se ispituju biti stanja u registru bita stanja procesora.
9
Opći formati naredbi za uvjetni skok, poziv i vraćanje jesu: J<uvjet> adr C<uvjet> adr RET pri čemu <uvjet> predstavlja jedan od osam mogućih uvjeta prikazanih u Tablici 3.5-5. Npr., naredba JC adr preusmjerava tijek izvođenja programa na naredbu koja se nalazi u memorijskoj lokaciji na adresi adr samo ako je zastavica prijenosa postavljena (CY = 1). Slično naredba CNZ adr uvjetuje pohranu trenutne vrijednosti programskog brojila i skok na naredbu pohranjenu u memorijskoj lokaciji na adresi adr samo ako zastavica nule nije postavljena (Z = 0). Naredbe uvjetnog i bezuvjetnog grananja se često koriste kao elementi odluke pri oblikovanju temeljnih logičkih zakonitosti.
Ulazno/izlazne instrukcije realizuju prenos podataka između procesora i U/I sklopova. Postoje posebne ulazne i posebne izlazne instrukcije jer je prenos podataka jednosmjeran. Ulazno/izlazne naredbe omogućavaju povezivanje mikroprocesora i vanjskih jedinica. Skupina se sastoji od dvije naredbe i to naredbe za izvođenje ulazne (IN - input) i izlazne (OUT - output) operacije. Naredbom IN se pokreće izvođenje ulazne operacije, tj. podatak se prenosi s ulazne jedinice u akumulator mikroprocesora. Format naredbe glasi IN adrj, gdje operand adrj označava 8-bitnu adresu ulazne jedinice. Naredbom OUT se pokreće izvođenje izlazne operacije, tj. sadržaj akumulatora mikroprocesora se prenosi na izlaznu jedinicu. Format naredbe glasi OUT adrj, gdje operand adrj označava 8-bitnu adresu izlazne jedinice. Budući duljina adrese adrj iznosi 8 bita, mikroprocesor može pristupiti do 256 različitih ulazno-izlaznih jedinica. Ulazne instrukcije tipa ''IN'' realizuju prenos od ulaznog sklopa ka procesoru a izlazne instrukcije tipa ''OUT'' realizuju prenos od procesora u izlazni sklop. Kod procesora 8085 sam proizvođač (Intel) je definisao nešto drugačiju podjelu u četiri osnovne grupe: -
instrukcije prenosa podataka instrukcije koje manipulišu sadržajem akumulatora i registara (to su aritmetičke i logičke instrukcije)
10
-
instrukcije za prenos upravljanja programom (to su instrukcije skokova) instrukcije koje upravljaju stek-om, ulazom/izlazom i samim procesorom
Za određivanje redoslijeda instrukcija kod procesora računara se koriste sljedeći koncepti: -
programski brojač instrukcije skokova i grananja instrukcije poziva i povratka iz potprograma stek.
Programski brojač U principu najjednostavniji način definisanja redoslijeda izvršavanja instrukcija je takav kod koga se u okviru svake instrukcije nalazi dio koji definiše adresu sljedeće instrukcije za izvršavanje. Taj koncept je korišten u prvim računarima. Nedostatak takvog rada je u povećanoj dužini instrukcije što takođe zahtijeva i veću memoriju. Međutim većina instrukcija u tipičnom programu ima jednu jedinstvenu instrukciju koja se izvršava iza nje, te je to iskorišteno u praksi tako da se u operativnoj memoriji smještaju u uzastopne memorijske lokacije one instrukcije programa koje trebaju da se izvršavaju jedna iza druge. Da bi se omogućilo adresiranje i očitavanje tih instrukcija u procesor je uveden jedan poseban registar čiji sadržaj adresira instrukcije. Taj registar se naziva programski brojač. On je specifičan po tome što se njegov sadržaj automatski uvećava pri normalnom izvršavanju instrukcija tako da uvijek adresira instrukciju koja treba biti sljedeća izvršena. Da bi se omogućilo realizovanje grananja, odnosno izmjena redoslijeda izvršavanja instrukcija sadržaj programskog brojača se može mijenjati u takvim situacijama ne sukcesivno, već upisivanjem potrebne adrese u programski brojač. Instrukcije skokova i grananja Instrukcije grananja i skokova omogućavaju izmjenu redoslijeda izvršavanja programa u odnosu na uobičajeni redoslijed izvršavanja, tj. kod koga se izvršava instrukcija koja se nalazi iza prethodne. Ove instrukcije omogućavaju da se sadržaj programskog brojača promijeni po potrebi a ne njegovim uvećavanjem. Pri izvršavanju instrukcije skoka ili grananja u programski brojač se upisuje aadresa memorijske lokacije u kojoj se nalazi instrukcija koju treba sljedeću izvršiti. Instrukcije skokova i grananja su tipa: JMP
(jump – džamp)
a u okviru instrukcije se nalazi adresa skoka. U principu to može biti bilo koja adresa u operativnoj memoriji. Postoje bezuslovne i uslovne instrukcije skokova i grananja. Bezuslovne se realizuju bez obzira na prethodno stanje procesora.
11
Kod uslovnih se ispituje neki od bita stanja i u zavisnosti od toga da li je ispunjen taj uslov realizovat će se skok ili će se nastaviti sa normalnim izvršavanjem instrukcija. Instrukcije za poziv i povratak iz potprograma I ove instrukcije omogućavaju izmjenu redoslijeda izvršavanja instrukcija. Koriste se za skok na početak potprograma i za povratak po završetku potprograma. Postoje posebne instrukcije za poziv potprograma i one su tipa: CALL i one mogu biti bezuslovne ili uslovne. Za povratak iz potprograma koriste se instrukcije tipa RET (RETURN) i njihovim izvršavanjem se realizuje skok sa kraja potprograma na mjesto odakle je pozvan potprogram. I ove instrukcije mogu biti bezuslovne i uslovne. Stek Stek daje jedan mehanizam koji se koristi pri prenosu upravljanja pri izvršavanju programa. Stek se prvenstveno koristi za memorisanje povratnih adresa. Svaki put kada se izvrši instrukcija poziva potprograma u stek se upiše povratna adresa. Pri povratku iz potprograma memorisana povratna adresa iz steka se vraća u procesor omogućavajući na taj način izvršavanje glavnog programa. Stek se koristi i pri izmjeni redoslijeda izvršavanja instrukcija do kojeg dolazi pri pojavi zahtjeva za prekid. Tada se u njemu memoriše povratna adresa. Osim memorisanja povratnih adresa u steku se mogu memorisati i parametri kao i rezultati koji se prenose u potprogram ili se dobijaju kao rezultat obrade u potprogramu.
12
2. Instrukcije Mikroprocesora 8086 Skup instrukcija ovog mikroprocesora može se posmatrati na dva nivoa: • Na asamblerskom • Na mašinskom Na asamblerskom nivou- ovaj mikroprocesor ima skup oko 100 instrukcija, međutim i neke od tih instrukcija se intrepetiraju na više načina na mašinskom nivou tako da na mašinskom nivou postoji oko 300 instrukcija. Te instrukcije se dijele na: 1. instrukcije za prenos podataka 2. aritmetičke instrukcije 3. instrukcije za manipulaciju bitima- logičke instrukcije 4. instrukcije za rad sa nizovima podataka 5. instrukcije za upravljanje prenosom 6. instrukcije za upravljanje procesorom Sada ćemo dati neka objašnjenja za navedene instrukcije i to: 1. Instrukcije za prenos podataka – prenose bajtove ili riječi između memorije i registra, između registara, između registara i ulazno-izlaznih skolpova. Tu spadaju instrukcije za rad sa skupom instrukcija za prenos sadržaja bita stanja i za upisivanje u segmentne registre. Postoji 14 instrukcija za prenos podataka . Dijele se u 4 grupe: • Instrukcije za prenos podataka opšte namjene • Ulazno – izlazne instrukcije • Instrukcije za prenos adresa • Instrukcije za prenos bita stanja Instrukcije za prenos podataka opšte namjene su : MOV, PUSH, POP, XCHG,XLAT. Ulazno – izlazne instrukcije su: IN, OUT Instrukcije za prenos adresa su: LEA, LDS,LES Instrukcije za prenos bita stanja su: LAHF, SAHF, PUSHF, POPF 2. Aritmetičke instrukcije - realizuju aritmetičke operacije: «+«, «-«, «. « i «:«. Aritmetičke operacije mogu se realizovati nad četiri vrste podataka : binarne označene i binarne neoznačene , neoznačene pakovane decimalne i neoznačene nepakovane decimalne. Sve utiču na bite u registru bita stanja. Postoji 20 takvih različitih instrukcija za sabiranja: ADD, ADC, AAA, INC,DAA; Za oduzimanje: SUB, SBB,DEC,NEG, CMR,AAC, DAC ; Množenje ; MUL, IMUL, AAM; Za dijeljenje; DIV, IDIV, AAD, CBW, CWD. 3. Instrukcije za manipulaciju bitima- logičke instrukcije. Postoje tri grupe za manipulisanje bitima u bajtovima ili riječima. Dijele se na logičke instrukcije, instrukcije za pomjeranje i instrukcije za rotiranje. Sada ćemo navesti instrukcije za gore navedene tipove: • Logičke instrukcije: NOT, AND, OR, XOR, TEST • Instrukcije za pomjeranje: SHL/SAL, SHR, SAR • Instrukcije za rotiranje: ROL, ROR, RLC, RCR. 13
4. Insrukcije za rad sa nizovima podataka. Moguće je realizovati 5 osnovnih operacija sa nizovima podataka. Niz može biti maksimalno do 64KB. Osnovne operacije su: Prenosi ( instrukcije tipa MOVS ), poređenje (CMPS) i skeniranje za određenu vrijednost ( SCAS). Postoje takođe i instrukcije sa prefiksom REP što omogućava hardversko ponavljanje određenog niza instrukcija. Postoji ukupno 9 instrukcija ovog tipa, a to su: REP, REPE/ REPZ, MOVS, MOVS/MOVSW, CMPS, SCAS, LODS, STOS. 5. Instrukcije za prenos upravljanja u programu. To su instrukcije tipa skokova u programu , postoje uslovni i bezuslovni. Uslovni se izvršavaju u zavisnosti od bita stanja. Koriste se za promjenu redoslijeda u izvršavanju programa. Postoje 4 tipa mogućih prenosa i to: uslovni prenosni, bezuslovni, upravljanje interakcijama i rad sa prekidima, ovakvih instrukcija ima ukupno 28. Bezuslovni prenosi mogu da budu introsegmentni i u asamblerskom se označavaju sa NEAR i mogu da budu intersegmentni, au asamblerskom se označavaju sa FAR. Instrukcije tog tipa su: JMP; CALL; RET. Uslovni prenosi zavise od bita stanja u registru bita stanja, svi ti skokovi su takozvani "kratki skokovi" , a u asambleru se označavaju sa SHORT. To može da bude u okviru od – 128 do +127 bajtova u odnosu na prvi bajt sledeće instrukcije. Neke od tih instrukcija su: JA/JNBE, JAE/JNB,...., JC, JE/JZ, JG/JNLE, JNC, JNE/JNZ, JNO, JNP/JPO, JP/JPE, JS. Instrukcije za upravljanje interakcijama koriste se za regulisanje ponavljanja softverskih petlji. Registar CH se koristi kao brojač ponavljanja petlje. Kao i kod uslovnih skokova i kod ovih instrukcija se realizuju SHORT prenosi. Instrukcije tog tipa su LOOP, LOOPE/ LOOPZ, LOOPNE/LOOPNZ, JCXZ. Instrukcije za rad sa prekidima omogućavaju da se programi za obradu prekida aktiviraju programiranjem od strane programa kao i pomoću vanjskog hrdvera. Efekat softverskog prekida je sličan onom koji je izazvan hardverski. Tu spadaju INZ n , INT0, IRET. 6. Instrukcije za upravljanje procesorom. One omogućavaju da program upravlja raznim funkcijama mikroprocesora. Jedna grupa tih instrukcija se koristi za postavljanje bita stanja, a druga prvenstveno za sinhronizaciju mikroprocesora sa vanjskim uređajima i događajima. U tu grupu spada i instrukcija koja ne radi ništa tkz. Instrukcija "Nema rada" NOP. Postoji ukupno 12 instrukcija ovog tipa: a) Instrukcije koje operišu bitima stanja: SETC, CLC, CMC,STD,CLD,STI,CLI b) Instrukcije za vanjsku sinhronizaciju: HLT, WAIT, ESC,LOCK c) Instrukcija nema rada NOP ( samo protekne vrijeme)
14
3. FUNKCIONALNOST INSTRUKCIJA 3.1 Instrukcije za prenos podataka Ova grupa sadrži instrukcije koje ćete najčešće upotrebljavati prilikom pisanja programa u asambleru, podijelitćemo ih u 4 manje funkcionalne grupe i to: 3.1.1 Instrukcije prenosa opšte namjene U ovoj grupi se nalazi instrukcija MOV. Ona posjeduje dva operanda, od kojih je prvi odredište, a drugi izvor podatka koji treba prenjeti. Moguće je vršiti prenos između registara, memorijskih lokacija, a i dodijeliti vrijednost konstant. Instrukcija LEA, predstavlja specifičnu instrukciju prenosa. Ona služi za učitavanje efektivne adrese drugog operanda. Prvi operand ove instrukcije mora biti neki od 16-bitnih registara izuzev segmentnih. Učitavanje pointera se vrši uz pomoć instrukcija LDS i LES. Drugi operand predstavlja adresu na kojoj se nalazi zabilježen 32-bitni pointer. Prvi operand predstavlja registar u koji će biti smješten ofset na koji pokazuje pointer , dok se segment smješta u jedan od segmentnih registara . Moguća je i razmjena sadržaja sa status registrom i to pomoću instrukcija LAHF i SAHF. Ove instrukcije nemaju operanda pa se podrazumjeva AH kao prvi , a nižih 8-bita status registra kao drugi operand. Instrukcija LAHF smješta sadržaj nižih 8-bita status registra u AH, dok instrukcija SAHF ima suprotno dejstvo. Preostala instrukcija XCHG služi za razmjenu dva operanda. Jedan od operanada može biti i memorijska lokacija, dok drugi obavezno mora biti registar. 3.1.2 Instrukcije za rukovanje sa stekom Stek je jedna od procersko podržanih stuktura podataka. Radi se o LIFO organizaciji. Što znači da prvo očitavamo poslednje unjeti podatak. Instrukcije ove grupe kao implicitni operand, koji imaju memorijsku adresu na koju pokazuje registarski par SS:SP, što ujedno predstavlja vrh steka. Treba reći da se stek puni prema dole, tj prema nižim adresama. Instrukcija stavljanja podataka na stek je PUSH. Njen jedini operand određuje sadržaj koji treba staviti na stek. On može biti 16- bitni registar, uključujući i segmentne registre. Za skidanje sa steka koristi se instrukcija POP. Njen operand govori gdje će podatak biti smješten i to može btiti 16- bitni registar ili sadržaj neke memorijske lokacije. Postoje i instrukcije PUSHF i POPF za koje se podrazumjeva da je njihov operand status registar. 3.1.3. Instrukcije konverzije Instrukcije ove grupe nemaju operande, a implicitno mijenjaju neke od registara. Konverzija iz bajta u riječ se obavlja instrukcijom CBW, pri čemu se vodi računa i o znaku datog broja: instrukcija podrazumjeva da se ulazni podatak nalazi u AL, dok izlaz predstavlja kompletan registar AX.Slično tome imamo instrukciju CWD koja služi za konverziju iz riječi u duplu riječ , pri čemu se podrazumjeva da je ulaz registar AX, a izlaz registarski par DX:AX. Konverzija uz upotrebu posebne table može se izvršiti pomoću instrukcije XLAT. Podrazumjeva se da operand konverzije nalazi u registru AL, dok BX sadrži adresu početka tabele konverzije. Instrukcija kao izlaz vraća u registar AL vrijednost pročitanu na lokaciji dobivenoj sabiranjem vrijednosti registara BX i AL.
15
3.1.4 Instrukcije za rukovanje periferijom IN, OUT Pristup periferijama se vrši isključivo preko instrukcija iz ove grupe. Osim ako nemamo računarski sistem sa memorijski preslikanim ulazom- izlazom, u kom slučaju se mogu koristiti i ostale instrukcije prenosa podataka. Periferijama imamo posebne memorijske lokacije nazvane portovi. Za očitavanje vrijednosti na nekom portu koristimo instrukciju IN. Vrijednost se smiješta isključivo u akumulator, što je i prvi operand, dok drugi operand može biti 8 – bitna konstanta, koja predstavlja adresu porta, ili registar DX koja sadrži 16- bitnu adresu porta kojeg čitamo. Slična je instrukcija i OUT, koja služi za slanje podataka na odgovarajući port. 3.2. Aritmetičke instrukcije Aritmetičke operacije su upravo one za čije je izvršavanje, u osnovi namjenjen računar. Posebnu oblast čini BCD aritmetika. Ona se pojavila kao posljedica potrebe izračunavanja vrijednosti izraza sa svim ciframa. BCD brojevi se predstavljaju u formi u kojoj svaka 4 bita predstavljaju binarni kod jedne decimalne cifre, postoji otpakovani i spakovani format. 3.2.1 Instrukcije za sabiranje Instrukcije za sabiranje posjeduju samo dva operanda, oni sadrže sabirke, a rezultat sabiranja se smješta u prvi operand. Prva od instrukcija sabiranja je ADD koja sabira dva operanda, a rezultat smješta u prvi operand. Često nam se dešava da trebamo sabrati brojeve iz opsega šireg od postojećeg 16-bitnog.Takvu situaciju rešavamo upotrebom instrukcije ADC , ona je u principu slična instrukciji ADD stim što se na zbir dodaje i vrijednost bita prenosa iz status registra. Sabiranje brojeva u otpakovanom BCD formatu se takođe vrši instrukcijom ADD, ali je nakon njene upotrebe potrebno pozvati instrukciju AAA koja je zadužena da izvrši popravku rezultata i njegovo pretvaranje u BCD oblik. Ograničenje je u tome što se sabiranje mora vršiti kroz registar AX, jer je on podrazumjevani operand ove instrukcije. 3.2.2 Instrukcije za oduzimanje Postoji više instrukcija za oduzimanje. Instrukcija SUB vrši oduzimanje drugog operanda od prvog, a rezultat smješta u prvi operan. Kad nam 16-bita nije dovoljno dabismo izvršili smiještanje potrebnih vrijednosti, koristimo instrukciju SBB za oduzimanje u višestrukoj preciznost. Ona također ima dva operanda, ali u računu koristi i pozajmicu iz predhodnog oduzimanja nižih dijelova brojeva, koja se nalazi u bitu prenosa status registra. Umanjivanje operanda za jediničnu vrijednost je također često potrebna funkcija, te iz tog razloga imamo funkciju DECkoja vrši umanjivanje vrijednosti jednog svog operanda. Rad sa BCD brojevima se slično vrši kao i kod sabiranja. Kada se koristi BCD aritmetika u otpakovanoj formi, nakon oduzimanja koristimo instrukciju AAS, da bismo ponovo vratili rezultat u odgovarajuću formu, a DAS kada radimo u spakovanoj formi. 3.2.3 Instrukcije za poređenje Poređenje se zasniva na oduzimanju, stom razlikom da se razlika zanemaruje, a postavljaju se samo bitovi status registra. Instrukcija CMP omogućuje poređenje, ona ima dva operanda koji se porede. Nakon ove instrukcije se uvijek izvršava neka od instrukcija uslovnog skoka.
16
3.2.4 Instrukcija za komplement Komplementiranje omogućuje instrukcija NEG. Ona posjeduje operand koji predstavlja vrijednost čiji komplement 2 ( negativnu vrijednost) treba naći. 3.2.5 Instrukcije za množenje Za množenje neozančenih brojeva koristimo instrukciju MUL. Ona podrazumjeva da se u akumulatoru nalazi jedan operand i zahtjeva samo da se eksplicitno navede samo drugi operand. Ako je operand dužine bajta, tada se množi sa AL, a rezultat smješta u AX registar.Ako je oerand riječ tada se množi sa AX, a rezultat smiješta u duplu riječ DX:AX. Slično ovome, za množenje označenih brojeva koristimo instrukciju IMUL koja radi na sličan način kao i predhodna. Kada se radi o BCD brojevima moramo koristiti raspakovani format, dabismo bili u mogućnosti da radimo i operaciju množenja. Nakon množenja potrebno je popraviti rezultat instrukcijom AAM, koja nema operanda. 3.2.6 Instrukcije za dijeljenje Za dijeljenje neoznačenih brojeva koristimo instrukciju DIV. Ona podrazumjeva da se u akumulatoru nalazi djeljenik i zahtjeva da se kao eksplicitni operand navede samo djelilac. Ako je operand dužine bajta tada se vrijednost registra AX dijeli sa operandom, rezultat smiješta u AL, a ostatak dijeljenja u AH. Kada je operand dužine riječi, tada se DX:AX dijeli operandom, rezultat smiješta u AX, a ostatak u DX. Slično tome imamo instrukciju za dijeljenje označenih brojeva IDIV. Dijeljenje BCD brojeva u otpakovanom formatu je također moguće, ali je nakon njega potrebno instrukcijom AAD prilagoditi rezultat dijeljenja. 3.3.
Logičke instrukcije i instrukcije pomjeranja i rotiranja
3.3.1 Logičke instrukcije Instrukcijom AND izvršavamo logičku operaciju i nad operandima, a rezultat operacije se smješta u prvi od njih. Da podsjetimo rezultat ima jedinice na onim binarnim pozicijama na kojima ih istovremeno imaju oba operanda, dok se na ostalim pozicijama nalaze nule. Logičko ili se postiže instrucijom OR koja ima isti oblik kao i predhodna, ali se ovdje u rezultatu jedinica nalazi na onim binarnim pozicijama na kojima ih ima bar jedan od operanada, dok se na ostalim nalaze nule. Operacija „logičko ekskluzivno ILI“ se dobija upotrebom instrukcije XOR , a način upotrebe je indentičan kao kod predhodnih. U rezultatu ove instrukcije se jedinica nalazi na onim binarnim mjestima gdje isključivo jedan od operanada ima jedinicu, dok se na ostalim mjestima nalaze nule. Logičko NE odnosno negacija se postiže instrukcijom NOT i za razliku od predhodnih instrukcija ona ima jedan operand koji ujedno služi kao i izlaz operacije. 3.3.2. Instrukcija za rukovanje bitovima Često imamo potrebu da provjerimo vrijednost nekog bita, a da tom prilikom ne promjenimo sadržaj registra ili memorijske lokacije u kojoj se on nalazi. Taj problem se rješava instrukcijom TEST koja zapravo vrši operaciju logičko i samo predstavlja bitove status registra. Poslije ove instrukcije obično slijede instrukcije uslovnog skoka.
17
3.3.3. Instrukcije za pomjeranje Postoje dvije vrste pomjeranja: logičko i aritmetičko. Razlika je u tome što instrukcije aritmetičkog pomjeranja čuvaju znak operanda, dok kod logičkog pomjeranja to nije slučaj. Instrukcije logičkog i aritmetičkog pomjeranja ulijevo su indentične. Njihovi nazivi su SHL i SAL respektivno. Ove instrukcije kao prvi operand sadrže vrijednost koju treba pomjeriti, a drugi operand je broj 1 ili registar CL koji sadrži podatak o zahtjevanom broju pomjeranja. Pomjeranje ulijevo je ekvivalent množenju sa dva. Prilikom pomjeranja ubacuje se nula na najnižu poziciju , a bit sa najviše pozicije odlazi u bit prenosa status registra. Kod pomjeranja u desno razlikuju se operacije logičkog i aritmetičkog pomjeranja. Ove operacije su ekvivalentne operacijama dijeljenja sa dva. Za instrukciju logičkog pomjeranja udesno instrukcija je SHR. Prilikom pomjeranja bit sa najniže pozicije odlazi u bit prenosa status registra, dok na najvišu poziciju dolazi nula. 3.3.4 Instrukcije za rotiranje Rotacija ulijevo se obavlja instrukcijom RLC, uz preuzimanje zatečenog bita prenosa, i instrukcijom ROL, bez preuzimanja zatečenog bita prenosa. Kod obje instrukcije se vrijednost sa najviše pozicije šmješta u bit prenosa, stom razlikom da se kod RCL u najniži bit upisuje zatečena vrijednost iz bita prenosa , a kod ROL vrijednost sa najviše pozicije. Kod rotacije u desnu stranu situacija je slična. Instrukcija RCR omogućuje rotiranje u desno uz preuzimanje zatečenog bita prenosa. Prilikom rotacije udesno, bit sa najniže pozicije odlazi u bit prenosa status registra, međutim RCR instrukciju na najvišu poziciju dolazi zatečena vrijednost bita prenosa, dok kod ROR instrukcije na to mjesto dolazi vrijednost sa najniže pozicije. 3.4. Upravljačke instrukcije Upravljačke instrukcije omogućuju bezuslovnu i uslovnu izmjenu redoslijeda izvršavanja instrukcija. 3.4.1. Instrukcije bezuslovnog skoka Kao osnovna instrukcija skoka postoji instrukcija bezuslovnog skoka JMP. Ona posjeduje jedan operand koji predstavlja adresu na koju će se izvršiti skok. Razlikujemo tri različita tipa oblika instrukcije bezuslovnog skoka, karatki skok (short) koji obuhvata raspon od -128 do 127 bajta, skok u blizini (near) koji se odnosi na lokacije iz istog segmenta i daleki skok ( far) koji dozvoljava skok van tekućeg segmenta. Prilikom prevođenja asambler sam otkriva da li je skok unutar istog segmenta ili između dva segment. 3.4.2. Instrukcije uslovnog skoka Instrukcije uslovnog skoka se koriste nakon instrukcija koje utiču na sadržaj status registra. Obično se radi o aritmetičkim instrukcijama, najčešće poređenju. Instrukcija Je omogućuje utvrđivanje važenja relacije jednako. Ona važi za poređenje i označenih i neoznačenih brojeva. Instrukcija JNE omogućuje utvrđivanje relacije različito. Instrukcija JA, odnosno JNBE se odnosi na neoznačene brojeve. Ona omogućuje utvrđivanje relacije veći, odnosno manji ili jednak. Instrukcija JBE, odnosno JNA se odnosi na neoznačene brojeve. Ona omogućuje utvrđivanje važenja relacije manje ili jednako, odnosno nije veće. Za utvrđivanje važenja relacije veće ili jednako odnosno nije manje koristimo instrukciju JAE, odnosno JNB. Za utvrđivanje važenja relacije manje odnosno nije
18
veće ili jednako služi instrukcija JB, odnosno instrukcija JNAE. Za utvrđivanje relacije manje ili jednako, odnosno nije veće za označene brojeve služe instrukcije JG, odnosno JNLE. Za utvrđivanje važenja relacije manje ili jednako, odnosno nije veće za označene brojeve služe instrukcije JLE, odnosno JNG. Za utvrđivanje važenja relacije veće ili jednako, služi instrukcija JGE, a relacija nije manje instrukcija JNL. Za utvrđivanje važenja relacije manje za označene brojeve služi instrukcija JL, odnosno JNGE. 3.4.3. Instrukcije za rukovanje potprogramima Pozivanje podprograma omogućuje instrukcija CALL, čiji operand zadrži adresu potprograma. Ova instrukcija implicitno koristi stek za smještanje povratne adrese. Povratak iz potprograma omogućuje instrukcija RET. 3.4.4. Instrukcije za obrazovanje programskih petlji Instrukcije za obrazovanje programskih petlji podrazumjevaju da se brojačka konstanta nalazi u CX registru i da se njena vrijednost u svakoj iteraciji smanjuje za jedan. Izlazak iz petlje se dešava onda kada registar CX postanejednak nuli i on podrazumjeva obavljanje kratkog skoka. Instrukcija LOOP je osnovna iz ove grupe a tu su i LOOPE i LOOPZ kao i LOOPNE i LOOPNZ, kod koji dolazi do izlaska iz petlji i ako je postavljen bit Z status registra, odnosno ako on ije postavljen. 3.4.5. Instrukcije za rukovanje prekidima Prekidi se mogu izazvati softverski pomoću instrukcije INT, čiji je jedini operand vektor prekidne rutine. Postoji i instrukcija izazivanja prekida prekoračenja INT0, koja nema operanda i izaziva prekid sa vektorom 4 ako je bit 0 status registra postavljen. Povratak iz obrade prekida omogućuje instrukcija IRET koja skida sa steka povratnu adresui sadržaj statusnog registra.
19
4.
Nove instrukcije za Mikroprocesor 8086
4.1. Instrukcije za rukovanje sa nizovima Instrukcije za rukovanje nizovima, kao implicitni operand koriste indeksne registre SI i DI, čija se vrijednost nakon izvršavanja instrukcije mijenja zavisno od sadržaja bita D status registra. Sve instrukcije za rukovanje sa nizovima imaju dva oblika: jedan za rad sa nizovima bajtova, sa postfiksom B i drugi za rad sa nizovima riječi, sa postfiksom W. Instrukcija LODS služi za učitavanje elemenata niza u akumulator, smještanje u niz se vrši instrukciom STOS. Vrijednost se uzima iz akumulatora i smješta u elemenat na koji pokazuje DI indeksni registar. Za kopiranje elemenata nizova koristi se instrukcija MOVS. Kopiranje se vrši iz elemenata na koji pokazuje SI, u elemenat na koji pokazuje DI. Instrukcija SCAS omogućuje poređenje akumulatora sa elementima niza. Međusobno poređenje elemenata niza omogućuje instrukcija CMPS. Dodavanje prefiksa REP ispred imena instrukcije za rukovanje nizovima označava ponavljanje odgovarajuće instrukcije.Pri tome broj ponavljanja smještamo predhodno u CX registar. Nakon svakog ponavljanja vrijednost CX registra se umanjuje, a ponavljanje završi kada vrijednost ovog registra padne na nulu.
4.2. Instrukcije za upravljanje procesorom Instrukcije za rukovanje status registrom- Postavljanje bita c status registra omogućuje instrukcija STC, njegovo poništenje instrukcija CLS. Izmjenu vrijednosti ovog bita omogućuje instrukcija CMC. Postavljanje bita D status registra omogućuje instrukcija STD, a njegovo poništavanje instrukcija CLD. Instrukcija STI postavlja bit I status registra, a instrukcija CLI poništava ovaj bit. Razne instrukcije- Instrukcija NOP troši procesorsko vrijeme pa omogućuje generisanje kratkih pauza, reda desetina taktova procesora. Instrukcija WAIT omogućuje usklađivanje rada procesora i numeričkog koprocesora, instrukcija HLT omogućuje zaustavljanje rada procesora.
20
Zaključak Mikroprocesor 8085 je 8- bitni i znači da se razlikuje od mikroprocesora 8086 koji je 16-bitni. Samim tim imamo i razliku u instrukcijama kojih u mikroprocesoru 8086 ima negdje oko 300 na mašinskom nivou. Postoje i razlike u načinu adresiranja i tipu instrukcija. Sada ću vam dati neke osobine za mikroprocesor 8085 i mikroprocesor8086. MP Intel 8085 izlazi 1977 godine i prestavlja nadograđenu verziju prcesora 8080. Ovaj procesor je posljedni 8-bitni razvijeni mikroprocesor razvijen od strane Intela. Evo nekih njegovih osobina: • Procesor 8085 je 30% brži od svoga prethodnika (8080). • Dodaju se i dvije nove instrukcije za obezbeđenje prekida. • Glavne prednosti 8085 su unutrašnji generator takta, interni sistemski kontroler i viša frekfencija rada. Skup instrukcija kod Mikroprocesora 8085 podjeljen je u sledeće tri grupe prema dužini riječi. 1. Instrukcije dužine jedne riječi ili jednobajtne instrukcije 2. instrukcije dužine dvije riječi ili dvobajtne instrukcije 3. Instrukcije dužine tri riječi ili trobajtne instrukcije Kod mikroprocesora 8085 „bajt“ i „riječ“ predstavljaju sinonime zato što je to 8-bitni mikroprocesor. Jednobajtne instrukcije sadrže operacioni kod i operand u istom bajtu, operandi su interni registri i kodovani su unutar instrukcije. Kod dvobajtnih instrukcija prvi bajt definiše operacioni kod dok drugi bajt definiše operand. Izvorišni operand je bajt podataka koji se nalazi odmah iza bajta operacionog koda. Kod trobajtnih instrukcija prvi bajt predstavlja operacini kod, a sledeća dva bajta određenu 16- bitnu adresu, te drugi bajt predstavlja niži bajt adrese dok treći bajt predstavlja viši bajt adrese. Novi Intelov MP 8086 je bio 16-bitni procesor koji je sadržavao 29000 tranzistora i radio je na taktu od 5 MHz. Neke njegove osobine su: • 8086 je bio u stanju da adresira 1 MB memorije. • Imao je mali 4 ili 6 bajrni instrukcijski keš koji je dobavljao instrukcije prije nego što bi bile izvršene. • 16-bitni mikroprocesor je omogućavao veće interne registre
21