Naredbe za prijenos kontrole. Uvjetni i bezuvjetni skokovi Operacije uvjetnog skoka

Mikroprocesorski instrukcijski sustav uz sredstva aritmetičkih izračuna ima i sredstva logičke konverzije podataka. Pod logičkim mislimo na takve transformacije podataka, koje se temelje na pravila formalne logike.

Formalna logika funkcionira na razini istinitih i lažnih izjava. Za mikroprocesor to obično znači 1 odnosno 0. Računalu je izvorni jezik nula i jedinica, ali najmanja jedinica podataka s kojom strojne upute rade je bajt. Međutim, na razini sustava, često je potrebno moći raditi na izuzetno niskoj razini - razini bitova.

Riža. 29. Alati za logičku obradu podataka


Sredstva logičke transformacije podataka uključuju logičke naredbe i logičke operacije. Operand asemblerske instrukcije općenito može biti izraz, koji je opet kombinacija operatora i operanda. Među tim operatorima također mogu postojati operatori koji implementiraju logičke operacije na objektima izraza.

Prije nego što detaljno ispitamo ove alate, razmotrimo što su sami logički podaci i koje se operacije izvode na njima.

Logički podaci

Teorijska osnova za logičku obradu podataka je formalna logika. Postoji nekoliko sustava logike. Jedan od najpoznatijih je iskazni račun. Izjava je svaka izjava koja se može reći bilo kojem pravi, ili lažno.

Iskazni račun je skup pravila koji se koristi za određivanje istinitosti ili lažnosti neke kombinacije izjava.

Propozicioni račun vrlo je skladno povezan s principima rada računala i osnovnim metodama njegovog programiranja. Sve komponente računalnog hardvera izgrađene su na logičkim čipovima. Sustav predstavljanja informacija u računalu na najnižoj razini temelji se na konceptu bita. Bit, koji ima samo dva stanja (0 (lažno) i 1 (istinito)), prirodno se uklapa u iskazni račun.

Prema teoriji, sljedeće logičke operacije mogu se izvesti nad izjavama (na bitovima).


1. Negacija (logična NE) - logička operacija na jednom operandu čiji je rezultat inverzan izvornom operandu.

Ovu operaciju jedinstveno karakterizira sljedeća tablica istinitosti (tablica 12).

Tablica 12. Tablica istinitosti za logičku negaciju

2. Logičko zbrajanje (logičko uključivo ILI) - logička operacija na dva operanda čiji je rezultat true (1) ako su jedan ili oba operanda true (1), i false (0) ako su oba operanda false (0).

Ova operacija je opisana pomoću sljedeće tablice istine (tablica 13).

Tablica 13. Tablica istinitosti za logičko uključivo ILI

3. Logičko množenje (logičko I) - logička operacija na dva operanda koja daje vrijednost true (1) samo ako oba operanda imaju vrijednost true (1). U svim ostalim slučajevima, vrijednost operacije je false (0).

Ova operacija je opisana pomoću sljedeće tablice istine (tablica 14).

Tablica 14. Tablica istinitosti za logičko I

4. Logičko isključivo zbrajanje (logičko isključivanje ILI) - logička operacija na dva operanda čiji je rezultat istinit (1) ako je samo jedan od dva operanda istinit (1), i lažan (0) ako su oba operanda lažna (0) ili "istina" (1). Ova operacija je opisana pomoću sljedeće tablice istine (tablica 15).

Tablica 15. Tablica istinitosti za logički isključivi ILI

Sustav instrukcija mikroprocesora sadrži pet instrukcija koje podržavaju te operacije. Ove instrukcije izvode logičke operacije na bitovima operanda. Dimenzije operanda, naravno, moraju biti iste. Na primjer, ako je veličina operanda riječ (16 bitova), tada se logička operacija prvo izvodi na nultim bitovima operanda, a njezin se rezultat zapisuje umjesto bita 0 rezultata. Zatim naredba sekvencijalno ponavlja te radnje na svim bitovima od prvog do petnaestog.

Logičke naredbe

Mikroprocesorski sustav instrukcija ima sljedeći skup naredbi koje podržavaju rad s logičkim podacima:

1) i operand_1, operand_2 – operacija logičkog množenja. Naredba izvodi bitnu logičku operaciju I (konjunkciju) na bitovima operanda operand_1 i operand_2. Rezultat se zapisuje u operand_1;

2) og operand_1, operand_2 – operacija logičkog zbrajanja. Naredba izvodi bitnu logičku operaciju ILI (disjunkciju) na bitovima operanda operand_1 i operand_2. Rezultat se zapisuje u operand_1;

3) hog operand_1, operand_2 – logička isključiva operacija zbrajanja. Instrukcija izvodi bitnu logičku isključivu operaciju ILI na bitovima operanda operand_1 i operand_2. Rezultat se piše umjesto operanda;

4) test operand_1, operand_2 – operacija “provjera” (logičkim množenjem). Naredba izvodi bitnu logičku operaciju I na bitovima operanda operand_1 i operand_2. Stanje operanda ostaje isto, samo se mijenjaju oznake zf, sf i pf, što omogućuje analizu stanja pojedinih bitova operanda bez promjene njihovog stanja;

5) nije operand – operacija logičke negacije. Naredba izvodi bitnu inverziju (zamjenjujući vrijednost suprotnom) svakog bita operanda. Rezultat se piše umjesto operanda.

Za razumijevanje uloge logičkih instrukcija u mikroprocesorskom sustavu instrukcija vrlo je važno razumjeti opseg njihove primjene i tipične tehnike za njihovo korištenje u programiranju.

Korištenje logičkih naredbi je moguće dodjela pojedinačni bitovi u operandu u svrhu postavljanje, resetiranje, invertiranje ili jednostavno provjeravanje određene vrijednosti.

Za organiziranje takvog rada s bitovima, operand_2 obično igra ulogu maske. Koristeći bitove postavljene u 1 bitu ove maske, određuju se bitovi operand_1 potrebni za određenu operaciju. Pokažimo koje se logičke naredbe mogu koristiti u tu svrhu:

1) za postavljanje određenih bitova na 1, koristite naredbu og operand_1, operand_2.

U ovoj instrukciji, operand_2, koji djeluje kao maska, mora sadržavati jedan bit umjesto onih bitova koji bi trebali biti postavljeni na 1 u operand_1;

2) za resetiranje određenih bitova na 0, koristite naredbu i operand_1, operand_2.

U ovoj instrukciji, operand_2, koji djeluje kao maska, mora sadržavati nula bitova umjesto onih bitova koji bi trebali biti postavljeni na 0 u operand_1;

3) primjenjuje se naredba hog operand_1, operand_2:

a) saznati koji su bitovi u operand_1 i operandu različiti;

b) za invertiranje stanja specificiranih bitova u operand_1.

Prilikom izvršavanja naredbe hog, bitovi maske koji nas zanimaju (operand_2) moraju biti jedan, ostatak mora biti nula;

Za provjeru statusa navedenih bitova koristite naredbu test operand_1, operand_2 (provjeri operand_1).

Provjereni bitovi operand_1 u maski (operand_2) moraju imati vrijednost jedan. Rad naredbe test sličan je algoritmu naredbe and, ali ne mijenja vrijednost operand_1. Rezultat naredbe je postavljanje vrijednosti nulte zastavice zf:

1) ako je zf = 0, tada je logičko množenje rezultiralo nultim rezultatom, tj. jednim jediničnim bitom maske, koji nije odgovarao odgovarajućem jednom bitu operanda;

2) ako je zf = 1, tada je logičko množenje rezultiralo rezultatom koji nije nula, tj. najmanje jedan jedan bit maske odgovara odgovarajućem jednom bitu operand_1.

Za reakciju na rezultat testne naredbe preporučljivo je koristiti naredbu skoka jnz label (Skok ako nije nula) - skok ako je oznaka nule zf različita od nule, ili naredbu sa suprotnom akcijom - jz label (Skok ako je nula) - skok ako je zastavica nule zf = 0.

Sljedeće dvije naredbe traže prvi bit operanda postavljen na 1. Možete pretraživati ​​od početka ili kraja operanda:

1) bsf operand_1, operand_2 (Bit Scanning Forward) – skeniranje bitova prema naprijed. Uputa skenira bitove operand_2 od najmanjeg do najvažnijeg (od bita 0 do bita najvećeg značaja) tražeći prvi bit postavljen na 1. Ako se pronađe, broj ovog bita unosi se u operand_1 kao cjelobrojna vrijednost. Ako su svi bitovi operand_2 0, tada je zastavica nule zf postavljena na 1, inače se zastavica zf resetira na 0;

2) bsr operand_1, operand_2 (Bit Scanning Reset) – skeniranje bitova obrnutim redoslijedom. Instrukcija pregledava (skenira) bitove operand_2 od najznačajnijeg do najmanje značajnog (od najznačajnijeg bita do bita 0) tražeći prvi bit postavljen na 1. Ako se pronađe, broj ovog bita unosi se u operand_1 kao cjelobrojna vrijednost. Važno je da se pozicija prvog jednog bita lijevo i dalje računa u odnosu na bit 0. Ako su svi bitovi operand_2 jednaki 0, tada se zastavica nule zf postavlja na 1, inače se zastavica zf resetira na 0. .

U najnovijim modelima Intelovih mikroprocesora pojavilo se još nekoliko naredbi u skupini logičkih naredbi koje omogućuju pristup jednom određenom bitu operanda. Operand se može nalaziti ili u memoriji ili u registru opće namjene. Pozicija bita određena je pomakom bita u odnosu na najmanje značajan bit operanda. Vrijednost pomaka može se specificirati ili kao izravna vrijednost ili sadržana u registru opće namjene. Rezultate naredbi bsr i bsf možete koristiti kao vrijednost pomaka. Sve instrukcije dodjeljuju vrijednost odabranog bita CE zastavici

1) bt operand, pomak bita (Bit Test) – provjerite bit. Naredba prenosi vrijednost bita u cf zastavu;

2) bts operand, pomak bita (Bit Test and Set) – provjera i postavljanje bita. Instrukcija prenosi vrijednost bita u CF zastavu i zatim postavlja bit koji se testira na 1;

3) btr operativan, bit offset (Bit Test and Reset) – provjera i resetiranje bita. Instrukcija prenosi vrijednost bita na CF zastavu i zatim postavlja ovaj bit na 0;

4) btc operand, bit offset (Bit Test and Convert) – provjerite i invertirajte bit. Instrukcija prenosi vrijednost bita u cf zastavu i zatim invertira vrijednost tog bita.

Naredbe Shift

Instrukcije u ovoj skupini također omogućuju manipulaciju pojedinačnim bitovima operanda, ali na drugačiji način od logičkih instrukcija o kojima smo raspravljali gore.

Sve instrukcije pomaka pomiču bitove u polju operanda ulijevo ili udesno, ovisno o operacijskom kodu. Sve instrukcije pomaka imaju istu strukturu - cop operand, pomak_brojač.

Broj pomaknutih bitova – brojač_pomaka – nalazi se na mjestu drugog operanda i može se odrediti na dva načina:

1) statički,što uključuje određivanje fiksne vrijednosti korištenjem neposrednog operanda;

2) dinamički,što znači pohranjivanje vrijednosti brojača pomaka u cl registar prije izvršenja instrukcije pomaka.

Na temelju veličine cl registra, jasno je da vrijednost brojača pomaka može biti u rasponu od 0 do 255. Ali zapravo, to nije posve točno. U svrhu optimizacije, mikroprocesor prihvaća samo vrijednost pet najmanje značajnih bitova brojač, tj. vrijednost se kreće od 0 do 31.

Sve naredbe shift postavljaju oznaku prijenosa cf.

Kako se bitovi pomiču izvan operanda, oni prvo pogađaju oznaku prijenosa, postavljajući je jednaku vrijednosti sljedećeg bita koji završava izvan operanda. Gdje ide ovaj bit dalje ovisi o vrsti instrukcije pomaka i programskom algoritmu.

Na temelju principa rada, naredbe za promjenu brzine mogu se podijeliti u dvije vrste:

1) naredbe linearnog pomaka;

2) naredbe cikličkog pomaka.

Naredbe za linearni pomak

Naredbe ove vrste uključuju naredbe koje izvode pomak prema sljedećem algoritmu:

1) sljedeći "gurnuti" bit postavlja CF zastavu;

2) bit uveden u operand s drugog kraja ima vrijednost 0;

3) kada se sljedeći bit pomakne, on ide u CF zastavu, a vrijednost prethodnog pomaknutog bita se gubi! Naredbe linearnog pomaka podijeljene su u dvije podvrste:

1) naredbe logičkog linearnog pomaka;

2) naredbe aritmetičkog linearnog pomaka.

Naredbe logičnog linearnog pomaka uključuju sljedeće:

1) shl operand, shift_counter (Shift Logical Left) – logički pomak ulijevo. Sadržaj operanda pomaknut je ulijevo za broj bitova određen vrijednošću shift_count. S desne strane (na mjestu najmanjeg bita) upisuju se nule;

2) shr operand, brojač_pomaka (Shift Logical Right) – logički pomak udesno. Sadržaj operanda pomaknut je udesno za broj bitova koji određuje vrijednost shift_count. S lijeve strane (na mjestu najvećeg, bita predznaka) upisuju se nule.

Slika 30 prikazuje kako ove naredbe rade.

Riža. 30. Shema rada naredbi linearnog logičkog posmaka


Instrukcije aritmetičkog linearnog pomaka razlikuju se od instrukcija logičkog pomaka po tome što na poseban način djeluju na bit predznaka operanda.

1) sal operand, shift_counter (Shift Arithmetic Left) – aritmetički pomak ulijevo. Sadržaj operanda pomaknut je ulijevo za broj bitova određen vrijednošću shift_count. Desno (na poziciji najmanjeg bita) su nule. Naredba sal ne čuva znak, ali postavlja zastavu sa/u slučaju promjene znaka još jedan uvlačivi bit. Inače, naredba sal potpuno je slična naredbi shl;

2) sar operand, brojač_pomaka (Shift Arithmetic Right) – aritmetički pomak udesno. Sadržaj operanda pomaknut je udesno za broj bitova određen vrijednošću brojač_pomaka. S lijeve strane u operand se unose nule. Naredba sar čuva znak, vraćajući ga nakon pomaka svakog sljedećeg bita.

Slika 31 prikazuje kako rade instrukcije linearnog aritmetičkog pomaka.


Riža. 31. Shema rada naredbi linearnog aritmetičkog posmaka

Naredbe za rotiranje

Naredbe za rotiranje pomaka su naredbe koje pohranjuju vrijednosti bitova koji se pomiču. Postoje dvije vrste naredbi za rotaciju:

1) jednostavne naredbe cikličkog pomaka;

2) naredbe cikličkog pomaka preko zastavice za prijenos usp.

Timovima jednostavni ciklički smjene uključuju:

1) rol operand, shift_counter (Rotate Left) – ciklički pomak ulijevo. Sadržaj operanda pomaknut je ulijevo za broj bitova koji je određen operandom brojač_pomaka. Bitovi pomaknuti ulijevo zapisuju se u isti operand s desne strane;

2) gog operand, shift_counter (Rotate Right) – ciklički pomak udesno. Sadržaj operanda pomaknut je udesno za broj bitova koji je određen operandom brojač_pomaka. Bitovi pomaknuti udesno zapisuju se u isti operand s lijeve strane.

Riža. 32. Shema rada jednostavnih cikličkih naredbi posmaka


Kao što se može vidjeti na slici 32, jednostavne instrukcije cikličkog pomaka izvode jednu korisnu radnju tijekom svoje operacije, naime: ciklički pomaknuti bit ne samo da se gura u operand s drugog kraja, već u isto vrijeme njegova vrijednost postaje vrijednost CE zastava

Naredbe za rotiranje putem zastavice za prijenos CF razlikuju se od jednostavnih naredbi cikličkog pomaka po tome što bit koji se pomiče ne ide odmah do operanda s drugog kraja, već se prvo zapisuje u zastavu prijenosa CE Samo sljedeće izvršenje ove instrukcije pomaka (pod pretpostavkom da se izvodi u petlji) rezultira postavljanjem prethodno pomaknutog bita na drugi kraj operanda(Slika 33).

Na naredbe cikličkog pomaka putem zastavice za prijenos sljedeće su povezane:

1) rcl operand, shift_counter (Rotate through Carry Left) – ciklički pomak ulijevo kroz prijenos.

Sadržaj operanda pomaknut je ulijevo za broj bitova koji je određen operandom brojač_pomaka. Pomaknuti bitovi naizmjenično postaju vrijednost prijenosne zastavice cf.

2) rcg operand, shift_counter (Rotate through Carry Right) – ciklički pomak udesno kroz prijenos.

Sadržaj operanda pomaknut je udesno za broj bitova koji je određen operandom brojač_pomaka. Pomaknuti bitovi naizmjenično postaju vrijednost prijenosne zastavice CF.

Riža. 33. Naredbe cikličkog pomaka preko CF zastavice za prijenos


Sa slike 33 jasno je da se prilikom pomaka kroz zastavicu prijenosa pojavljuje posredni element, uz pomoć kojeg je, posebice, moguće zamijeniti ciklički pomaknute bitove, posebice, neusklađenost nizovi bitova.

Pod nepodudaranjem niza bitova u daljnjem tekstu mislimo na radnju koja nam omogućuje da na neki način lokaliziramo i izdvojimo potrebne dijelove ovog niza i zapišemo ih na drugo mjesto.

Dodatne naredbe za pomak

Sustav naredbi najnovijih Intelovih modela mikroprocesora, počevši od i80386, sadrži dodatne naredbe za pomak koje proširuju mogućnosti o kojima smo ranije govorili. Ovo su naredbe za pomak dvostruka preciznost: 1) shld operand_1, operand_2, shift_counter – pomak ulijevo dvostruke preciznosti. Naredba shld izvodi zamjenu pomicanjem bitova operand_1 ulijevo, ispunjavajući njegove bitove s desne strane vrijednostima bitova pomaknutih iz operand_2 prema dijagramu na slici. 34. Broj bitova koji se pomiču određen je vrijednošću brojač_pomaka, operand_2 ne mijenja.


Riža. 34. Shema naredbe shld


2) shrd operand_1, operand_2, shift_counter – desni pomak dvostruke preciznosti. Instrukcija izvodi zamjenu pomicanjem bitova operand_1 udesno, ispunjavajući njegove bitove s lijeve strane vrijednostima bitova pomaknutih iz operand_2 prema dijagramu na slici 35. Broj pomaknutih bitova određen je vrijednošću brojač_pomaka, koji može biti u rasponu 0... 31. Ova vrijednost može biti navedena kao neposredni operand ili sadržana u cl registru. Značenje operand_2 ne mijenja.

Riža. 35. Shema naredbe shrd


Kao što smo primijetili, naredbe shld i shrd izvode pomake do 32 bita, ali zbog osobitosti određivanja operanda i algoritma rada, ove se naredbe mogu koristiti za rad s poljima duljine do 64 bita.

2. Naredbe za prijenos kontrole

Upoznali smo neke od timova koji čine linearni odjeljci programa. Svaki od njih općenito izvodi neke radnje za pretvorbu ili prijenos podataka, nakon čega mikroprocesor prenosi kontrolu na sljedeću naredbu. Ali vrlo malo programa radi na tako dosljedan način. Obično postoje točke u programu u kojima se mora donijeti odluka koja će se naredba sljedeća izvršiti. Ovo rješenje bi moglo biti:

1) bezuvjetno - u ovom trenutku potrebno je prenijeti kontrolu ne na sljedeću naredbu, već na drugu, koja se nalazi na određenoj udaljenosti od trenutne naredbe;

2) uvjetna - odluka o tome koja će se naredba sljedeća izvršiti donosi se na temelju analize nekih uvjeta ili podataka.

Program je niz naredbi i podataka koji zauzimaju određenu količinu RAM prostora. Ovaj memorijski prostor može biti neprekidan ili sastavljen od više fragmenata.

Mikroprocesor zna koja se programska instrukcija sljedeća treba izvršiti prema sadržaju para registara cs:(e)ip:

1) cs – kodni registar segmenta, koji sadrži fizičku (baznu) adresu tekućeg kodnog segmenta;

2) eip/ip – registar pokazivača instrukcije, koji sadrži vrijednost koja predstavlja memorijski pomak sljedeće instrukcije koju treba izvršiti u odnosu na početak trenutnog segmenta koda.

Koji će se specifični registar koristiti ovisi o tome je li način adresiranja postavljen na use16 ili use32. Ako je navedena uporaba 16, koristi se ip, ako se koristi32, koristi se eip.

Dakle, instrukcije prijenosa kontrole mijenjaju sadržaj registara cs i eip/ip, uslijed čega mikroprocesor odabire za izvršenje ne sljedeću programsku naredbu po redu, već naredbu u nekom drugom dijelu programa. Pokretna traka unutar mikroprocesora je resetirana.

Na temelju principa rada mikroprocesorske naredbe koje osiguravaju organizaciju prijelaza u programu mogu se podijeliti u 3 skupine:

1. Naredbe za bezuvjetni prijenos kontrole:

1) bezuvjetna naredba za skok;

2) naredba za pozivanje procedure i povratak iz procedure;

3) naredba za pozivanje softverskih prekida i povratak iz softverskih prekida.

2. Uvjetni prijenos upravljačkih naredbi:

1) naredbe za skok na temelju rezultata naredbe za usporedbu stranica;

2) prijelazne naredbe temeljene na stanju određene zastavice;

3) naredbe za kretanje kroz sadržaj ecx/cx registra.

3. Naredbe za upravljanje ciklusom:

1) naredba za organiziranje ciklusa s brojačem ecx/cx;

2) naredba za organiziranje ciklusa s ecx/cx brojačem uz mogućnost prijevremenog izlaska iz ciklusa pod dodatnim uvjetom.

Bezuvjetni skokovi

Prethodna rasprava otkrila je neke detalje tranzicijskog mehanizma. Instrukcije skoka mijenjaju registar pokazivača eip/ip instrukcija i eventualno registar segmenta cs koda. Što točno treba modificirati ovisi o:

1) o vrsti operanda u naredbi bezuvjetnog skoka (blizu ili daleko);

2) iz indikacije prije adrese skoka (u naredbi skoka) modifikator; u ovom slučaju, sama adresa skoka može se nalaziti ili izravno u naredbi (izravni skok), ili u registru ili memorijskoj ćeliji (neizravni skok).

Modifikator može uzeti sljedeće vrijednosti:

1) near ptr – izravan prijelaz na oznaku unutar trenutnog segmenta koda. Modificira se samo eip/ip registar (ovisno o specificiranoj vrsti segmenta koda use16 ili use32) na temelju adrese (oznake) navedene u naredbi ili izraza koji koristi znak za izdvajanje vrijednosti - $;

2) far ptr – izravan prijelaz na oznaku u drugom segmentu koda. Adresa skoka navedena je kao neposredni operand ili adresa (oznaka) i sastoji se od 16-bitnog selektora i 16/32-bitnog pomaka, koji se učitavaju u cs odnosno ip/eip registre;

3) riječ ptr – neizravni prijelaz na oznaku unutar trenutnog segmenta koda. Modificira se samo eip/ip (vrijednošću pomaka iz memorije na adresi navedenoj u naredbi ili iz registra). Veličina pomaka 16 ili 32 bita;

4) dword ptr – neizravni prijelaz na oznaku u drugom segmentu koda. Oba registra – cs i eip/ip – se modificiraju (vrijednošću iz memorije - i samo iz memorije, iz registra). Prva riječ/dword ove adrese predstavlja pomak i učitava se u ip/eip; druga/treća riječ se učitava u cs. jmp naredba bezuvjetnog skoka

Sintaksa naredbe bezuvjetnog skoka je jmp [modifikator] jump_address - bezuvjetni skok bez pohranjivanja informacija o povratnoj točki.

Jump_address je ili adresa oznake ili adresa memorijskog područja gdje se nalazi pokazivač skoka.

Ukupno, mikroprocesorski sustav instrukcija sadrži nekoliko jmp kodova strojnih instrukcija bezuvjetnog skoka.

Njihove su razlike određene udaljenošću prijelaza i načinom određivanja ciljne adrese. Raspon prijelaz je određen lokacijom operanda prijelazna_adresa. Ova adresa može biti u segmentu trenutnog koda ili u nekom drugom segmentu. U prvom slučaju, prijelaz se zove intrasegmentalno, ili najmiliji, u drugom – intersegmentalno, ili udaljeni Skok unutar segmenta pretpostavlja da se mijenja samo sadržaj eip/ip registra.

Postoje tri opcije za unutarsegmentnu upotrebu naredbe jmp:

1) ravno kratko;

2) ravno;

3) neizravni.


Postupci

Asemblerski jezik ima nekoliko alata koji rješavaju problem umnožavanja dijelova programskog koda. To uključuje:

1) mehanizam postupaka;

2) makro asembler;

3) mehanizam prekida.

Postupak, koji se često naziva potprogram - ovo je osnovna funkcionalna jedinica raščlanjivanja (podjele na više dijelova) nekog zadatka. Procedura je skupina naredbi za rješavanje određenog podzadatka i ima sredstva za dobivanje kontrole od točke pozivanja zadatka više razine i vraćanja kontrole na ovu točku.

U najjednostavnijem slučaju, program se može sastojati od jedne procedure. Drugim riječima, procedura se može definirati kao ispravno formatiran skup naredbi, koje se, jednom opisane, mogu pozvati, ako je potrebno, bilo gdje u programu.

Za opisivanje niza naredbi kao procedure, asemblerski jezik koristi dvije direktive: PROC i ENDP.

Sintaksa za opisivanje postupka je sljedeća (slika 36).


Riža. 36. Sintaksa za opisivanje procedure u programu


Sa slike 36 vidljivo je da je u zaglavlju procedure (PROC direktiva) potreban samo naziv procedure. Među velikim brojem operanda PROC direktive, [distance] zaslužuje poseban spomen. Ovaj atribut može poprimiti vrijednosti blizu ili daleko i karakterizira sposobnost pozivanja procedure iz drugog segmenta koda. Prema zadanim postavkama, atribut [udaljenost] postavljen je na blizu.

Procedura se može postaviti bilo gdje u programu, ali tako da kontrola slučajno ne padne na nju. Ako se procedura jednostavno umetne u opći tok naredbi, tada će mikroprocesor percipirati naredbe procedure kao dio ovog tijeka i, sukladno tome, izvršiti naredbe procedure.

Uvjetni skokovi

Mikroprocesor ima 18 instrukcija uvjetnog skoka. Ove naredbe vam omogućuju da provjerite:

1) odnos između potpisanih operanda (“više – manje”);

2) odnos između operanda bez predznaka (“iznad – ispod”);

3) stanja aritmetičkih zastavica ZF, SF, CF, OF, PF (ali ne AF).

Naredbe uvjetnog skoka imaju istu sintaksu:

jcc prijelazna_oznaka

Kao što vidite, mnemonički kod svih naredbi počinje s "j" - od riječi skok(odskakivati), nju - definira specifično stanje analizirano naredbom.

Što se tiče operanda prijelazna_oznaka, tada se ova oznaka može nalaziti samo unutar trenutnog segmenta koda; međusegmentni prijenos kontrole u uvjetnim prijelazima nije dopušten. U tom pogledu nestaje pitanje modifikatora koji je bio prisutan u sintaksi naredbi bezuvjetnog skoka. U ranim modelima mikroprocesora (i8086, i80186 i i80286), instrukcije uvjetnog skoka mogle su napraviti samo kratke skokove - udaljenost od -128 do +127 bajtova od instrukcije koja slijedi nakon instrukcije uvjetnog skoka. Počevši od modela mikroprocesora 80386, ovo ograničenje je uklonjeno, ali, kao što vidite, samo unutar trenutnog segmenta koda.

Da bi se donijela odluka gdje će se kontrola prenijeti naredbom uvjetnog skoka, prvo se mora generirati uvjet na temelju kojeg će se donijeti odluka o prijenosu kontrole.

Izvori takvog stanja mogu biti:

1) svaka naredba koja mijenja stanje aritmetičkih zastavica;

2) naredbena stranica za usporedbu, koja uspoređuje vrijednosti dvaju operanda;

3) stanje matične knjige ESH/CX.


naredba za usporedbu cmp

Naredba za usporedbu stranica ima zanimljiv princip rada. Apsolutno je ista kao naredba za oduzimanje - podoperand, operand_2.

Naredba stranice, kao i naredba sub, oduzima operande i postavlja oznake. Jedino što ne radi je upisivanje rezultata oduzimanja umjesto prvog operanda.

Sintaksa naredbe stranice je stranica operand_1, operand_2 (usporedi) – uspoređuje dva operanda i postavlja oznake na temelju rezultata usporedbe.

Zastavice postavljene naredbom stranice mogu se analizirati pomoću posebnih uvjetnih naredbi grananja. Prije nego što ih pogledamo, obratimo malo pozornosti na mnemotehniku ​​ovih uvjetnih naredbi za skok (Tablica 16). Razumijevanje zapisa kod formiranja naziva naredbi uvjetnog skoka (element u nazivu naredbe jcc, koji smo mi označili) olakšat će njihovo pamćenje i daljnju praktičnu upotrebu.

Tablica 16. Značenje kratica u nazivu naredbe jcc
Tablica 17. Popis naredbi uvjetnog skoka za naredbenu stranicu operand_1, operand_2

Neka vas ne iznenadi činjenica da iste vrijednosti zastavice odgovaraju nekoliko različitih mnemoničkih kodova naredbi uvjetnog skoka (odvojene su jedna od druge kosom crtom u tablici 17). Razlika u nazivu nastala je zbog želje dizajnera mikroprocesora da olakšaju korištenje instrukcija uvjetnog skoka u kombinaciji s određenim skupinama instrukcija. Stoga različita imena zapravo odražavaju različite funkcionalne orijentacije. Međutim, činjenica da te naredbe odgovaraju na iste zastavice čini ih apsolutno ekvivalentnima i jednakima u programu. Stoga su u tablici 17 grupirani ne po imenu, već po vrijednostima zastavice (uvjetima) na koje reagiraju.


Uvjetne upute grananja i oznake

Mnemonička notacija za neke naredbe uvjetnog skoka odražava naziv oznake na kojoj rade i ima sljedeću strukturu: znak "j" dolazi prvi. (Skok, prijelaz), drugi je ili oznaka zastave ili simbol negacije "n", iza kojeg slijedi naziv zastave. Ova struktura tima odražava njegovu svrhu. Ako nema znaka "n", tada se provjerava stanje zastavice; ako je jednako 1, vrši se prijelaz na oznaku skoka. Ako je znak “n” prisutan, tada se stanje zastavice provjerava na jednakost 0, i ako je uspješno, skok se vrši na oznaku skoka.

Mnemonički kodovi naredbi, nazivi zastavica i prijelazni uvjeti dati su u tablici 18. Ove naredbe mogu se koristiti nakon bilo koje naredbe koja mijenja navedene zastavice.

Tablica 18. Naredbe i oznake uvjetnog skoka

Ako pažljivo pogledate tablice 17 i 18, možete vidjeti da su mnoge naredbe uvjetnog skoka u njima ekvivalentne, budući da se obje temelje na analizi istih oznaka.


Instrukcije uvjetnog skoka i ecx/cx registar

Arhitektura mikroprocesora uključuje specifičnu upotrebu mnogih registara. Na primjer, EAX/AX/AL registar se koristi kao akumulator, a BP i SP registri se koriste za rad sa stogom. ESH/CX registar također ima specifičnu funkcionalnu svrhu: on obavlja ulogu brojač u naredbama upravljanja petljom i pri radu s nizovima znakova. Moguće je da bi funkcionalno naredba uvjetnog skoka povezana s ecx/cx registrom bila ispravnije klasificirana kao ova skupina naredbi.

Sintaksa ove naredbe uvjetnog grananja je:

1) jcxz jump_label (Skok ako je ex nula) – skok ako je cx nula;

2) jecxz jump_label (Jump Equal exx Zero) – skok ako je exx nula.

Ove su naredbe vrlo prikladne za korištenje pri organiziranju petlje i pri radu s nizovima znakova.

Treba napomenuti da postoji ograničenje svojstveno naredbi jcxz/jecxz. Za razliku od drugih uvjetnih instrukcija prijenosa kontrole, instrukcija jcxz/jecxz može adresirati samo kratke skokove - na -128 bajtova ili +127 bajtova od sljedeće instrukcije.

Organiziranje ciklusa

Ciklus je, kao što znate, važna algoritamska struktura bez čije upotrebe vjerojatno niti jedan program ne može. Možete organizirati cikličko izvršavanje određenog dijela programa, na primjer, pomoću naredbi uvjetnog prijenosa ili naredbe bezuvjetnog skoka jmp. Kod ove vrste organizacije ciklusa sve operacije vezane uz njegovu organizaciju izvode se ručno. No, s obzirom na važnost takvog algoritamskog elementa kao što je ciklus, programeri mikroprocesora uveli su grupu od tri naredbe u sustav naredbi kako bi olakšali programiranje ciklusa. Ove naredbe također koriste ecx/cx registar kao brojač ciklusa.

Dat ćemo kratak opis ovih naredbi: 1) petlja jump_label (Loop) – ponavljanje ciklusa. Naredba vam omogućuje da organizirate petlje slične for petljama u jezicima visoke razine s automatskim smanjenjem brojača petlji. Posao tima je učiniti sljedeće:

b) uspoređivanje ESX/CX registra s nulom: ako je (ECX/CX) = 0, tada se kontrola prenosi na sljedeću naredbu nakon petlje;

2) oznaka_prijelaza petlja/petlja

Naredbe loope i loopz su apsolutni sinonimi. Rad naredbi je izvođenje sljedećih radnji:

a) dekrement ESH/CX registra;

c) analiza stanja nulte zastavice ZF ako je (ECX/CX) = 0 ili XF = 0, kontrola se prenosi na sljedeću naredbu nakon petlje.

3) loopne/loopnz prijelazna_oznaka

Naredbe loopne i loopnz također su apsolutni sinonimi. Rad naredbi je izvođenje sljedećih radnji:

a) dekrement ESH/CX registra;

b) uspoređivanje ESX/CX registra s nulom;

c) analiza stanja nulte zastavice ZF: ako je (ECX/CX) = 0 ili ZF = 1, kontrola se prenosi na sljedeću naredbu nakon petlje.

Naredbe loope/loopz i loopne/loopnz su inverzne u svom principu rada. Oni proširuju djelovanje naredbe petlje dodatnom analizom zastavice zf, što omogućuje organiziranje ranog izlaska iz petlje, koristeći ovu zastavicu kao indikator.

Nedostatak naredbi loop, loope/loopz i loopne/loopnz je taj što implementiraju samo kratke skokove (od -128 do +127 bajtova). Za rad s dugim petljama morat ćete koristiti naredbe uvjetnog grananja i naredbu jmp, stoga pokušajte svladati obje metode organiziranja petlji.

U skupini naredbi prijenosa upravljanja postoje četiri vrste naredbi: bezuvjetno grananje, uvjetno grananje, petlje i prekidi .

Naredbe za bezuvjetni skok. Uključuje tri mnemonička koda: JMP (bezuvjetni skok), CALL (poziv potprograma) i RET (povratak iz podprograma).

Naredba JMP omogućuje vam skok na bilo koju točku u programu, koja se nalazi u trenutnom programskom segmentu iu drugom segmentu. Prilikom skakanja unutar trenutnog programskog segmenta koriste se prva tri formata JMP instrukcija.

Prvi format omogućuje prijelaz na proizvoljnu točku u programu unutar trenutnog programskog segmenta, za koji se 16-bitni pomak dodaje IP sadržaju u komplementarnom kodu dva, čiji je najznačajniji bit predznačen. Drugi, skraćeni format omogućuje vam da skočite na točku u programu ne više od -128-f-127 adresa iz JMP instrukcije. Konačno, treći format učitava pokazivač instrukcije sa 16-bitnim brojem, koji se nalazi na izvršnoj adresi EA, određenoj postbajtom. Ovaj se prijelaz naziva neizravni jer se koristi neizravno adresiranje.

Za provedbu bezuvjetnog skoka na programsku točku koja se nalazi izvan trenutnog segmenta programa kada je potrebno ponovno učitavanje registra CS segmenta, koriste se četvrti i peti format JMP instrukcije.

Četvrti format definira izravni međusegmentni prijelaz, u kojem drugi i treći bajt formata označavaju relativnu adresu točke prijelaza, a četvrti i peti bajt označavaju novu CS vrijednost. Peti format, koristeći postbyte, omogućuje određivanje izvršne adrese EA, na kojoj se nalazi relativna adresa prijelazne točke (u memorijskim bajtovima s adresama EA, EA+1), i novu CS vrijednost (u memorijskim bajtovima EA+2, EA+3).

Naredba CALL omogućuje vam pozivanje potprograma koji se nalazi bilo u segmentu trenutnog programa ili u drugom memorijskom području. Ima iste formate kao JMP naredba, osim što je kraća. Za razliku od JMP naredbe sličnog formata, naredba CALL, prije promjene IP ili IP i CS vrijednosti, automatski upisuje trenutne vrijednosti ovih registara u stog, čime se osigurava pamćenje povratne točke iz potprograma.

Za povratak iz potprograma koristite naredbu RET, koja prenosi kontrolu na povratnu adresu gurnutu na stog prilikom izvođenja prethodne naredbe CALL. Pri povratku iz potprograma koji se nalaze u trenutnom segmentu programa koriste se prva dva formata RET instrukcije, a drugi format se razlikuje od prvog po tome što se sadržaju instrukcije dodaje konstanta zapisana u 2. i 3. bajtu instrukcije. pokazivač na stog. Ovo omogućuje, istovremeno s povratkom iz potprograma, resetiranje parametara zapisanih na stog tijekom izvođenja ovog potprograma i ne koriste se u budućnosti.

Za međusegmentni povrat koriste se treći i četvrti RET format, koji omogućuju obnavljanje sadržaja i pokazivača instrukcija i programskog segmenta.

Naredbe uvjetnog skoka. Kontrola prijenosa ovisno o rezultatima prethodnih operacija. Postoje tri vrste uvjetnih skokova koji se koriste za uspostavljanje odnosa između brojeva s predznakom, brojeva bez predznaka i proizvoljnih brojeva. U prve dvije varijante odabrani su različiti mnemonički kodovi naredbi za iste odnose između brojeva, budući da različite vrijednosti zastavica odgovaraju istim odnosima između potpisanih i nepredpisanih brojeva.

U mnemoničkim kodovima naredbi uvjetnog skoka, kada se uspoređuju brojevi s predznakom, slovo se koristi za označavanje uvjeta "veće od" G (Veće- više), i označiti - "manje" slovo L (Manje- manje). Za slične uvjete, kada se uspoređuju brojevi bez predznaka, koriste se slova A (gore- gore) i Ispod- pod, ispod). Uvjet jednakosti označen je slovom E (Jednako- jednako), a neispunjenje nekog uvjeta - slov N(Ne- Ne). Treba napomenuti da je dopušteno koristiti dva različita mnemonička koda za svaku naredbu; na primjer, mnemonički kodovi JL i JNGF su ekvivalentni, jer su uvjeti "manje od" i "nije veće od ili jednako" identični.

Kompletan popis mnemoničkih kodova naredbi, uvjeti koji se provjeravaju, kao i odgovarajuće Booleove kombinacije zastavica i njihove vrijednosti dani su u tablici. 1.4.

Tablica 1.4

Mnemonički kod naredbe Stanje Značenje zastava
Za potpisane brojeve
JL/JNGE Manje/ne više od ili jednako SF + OF = l
JNL/JGE Ne manje od/veće od ili jednako SF + OF = 0
JG/JNLE Više od/ne manje od ili jednako (SF + OF) V ZF = 0
JNG/JLE Nije veće od/manje ili jednako Za brojeve bez predznaka (SF + OF) V ZF = l
JB/JNAE Manje/ne više od ili jednako CF=1
JNB/JAE Ne manje od/veće od ili jednako CF=0
JA/JNBE Više CF V ZF = 0
JNA/JBE Nema više Za ostale podatke CF V ZF = 1
JE/JZ Jednako/nula ZF = 1
JNE/JNZ Nije jednako/nula ZF = 0
JS Po minusu SF = 1
JNS Na pozitivnoj strani SF = 0
JO Prelijevanje OF = l
JNO Odsustvom preljeva OF = 0
JP/JPE Po parnom paritetu PF = 1
JNP/JPO Po neparnom paritetu PF = 0

Sve instrukcije uvjetnog skoka imaju isti format od dva bajta, od kojih je prvi bajt operacijski kod (OPC), a drugi je 8-bitni pomak, koji se tretira kao broj s predznakom i stoga dopušta promjene adrese u rasponu od -128 do +127. Ako je potreban udaljeniji ("daleki") prijelaz kada je uvjet ispunjen, koristi se dodatna naredba bezuvjetnog prijelaza.

Vrijeme izvršenja svake od instrukcija uvjetnog skoka naznačeno je za dva slučaja: 1) uvjet je zadovoljen i kontrola je zapravo prenesena u skladu s pomakom, 2) uvjet nije zadovoljen, pa se kontrola prenosi na sljedeću instrukciju.

Timovi za organizaciju ciklusa. Uveden u CPU radi praktičnosti izvođenja računskih ciklusa. Oni uključuju sljedeće mnemoničke kodove: LOOP (petlja dok (CX) nije jednako 0), LOOPNZ/LOOPNE (petlja do nule/nije jednako), LOOPZ/LOOPE (petlja do nule/jednako) i JCXZ (skok na nula u SH). Svaka od ovih naredbi ima format od dva bajta, čiji drugi bajt specificira 8-bitni pomak koji se koristi za organiziranje skoka. Ovaj se pomak tretira kao broj s predznakom i proširuje se s predznakom na 16 bita prije nego što se izračuna adresa skoka.

Koristeći naredbe petlje zajedno s naredbama za manipuliranje elementima niza, možete stvoriti prilično složene programe za pretvorbu niza. Razmotrimo primjer sastavljanja programa za pretvorbu niza podataka zapisanih u heksadecimalnom brojevnom sustavu u neki kod za koji se tablica pretvorbe nalazi u memoriji s početne adrese navedene u BX, kao što je potrebno za korištenje naredbe pretvorbe tablice za XLAT šifre. Pretpostavimo nadalje da izvorni niz sadrži 80 elemenata i nalazi se u memoriji s relativne početne adrese 100, a niz rezultata treba smjestiti s relativne adrese 200. Program koji pretvara izvorni niz u niz rezultata, s vrijednost zastavice smjera DF=0, imat će oblik:

MOVSI ,100
MOV DI ,200
MOV CX, 80

Ovdje se koristi XLAT naredba za konverziju tablice opisana u 1.2.

Naredbe prekida. Uključuje tri mnemotehnike: INT (prekid), INTO (prekid pri prelivanju) i IRET (prekid povratka).

Naredba prekida INT na v=1 ima dvobajtni format, čiji drugi bajt sadrži 8-bitni broj koji definira tip (tip) ili razina prekida. Naredbom INT tip Procesor nastavlja izvršavati servisni program prekida navedene razine, a radnje potrebne za osiguranje povratka na točku prekida automatski se izvode. Ove radnje su sljedeće: sadržaj registra F zastavica upisuje se u stog (PUSHF), IF i TF zastavice se poništavaju, trenutne vrijednosti CS registra i pokazivača IP instrukcija upisuju se u stog.

Za određivanje početne adrese servisnog programa prema vrijednosti tip Koristi se tablica razine prekida. Za svaku od 256 razina prekida u ovoj tablici dodijeljena su četiri bajta: prva dva bajta određuju vrijednost pokazivača IP instrukcija, druga - vrijednost registra CS segmenta. Ova četiri bajta definiraju početne adrese servisnih programa (parovi CS, IP vrijednosti), koje se prvo moraju zapisati u memorijske ćelije na apsolutnim adresama 0-3FFH. Adresa tablice koja odgovara onoj navedenoj u naredbi INT tip razina prekida se određuje u CPU-u na sljedeći način. Nakon pohranjivanja trenutnih vrijednosti CS i GR u stog, vrši se učitavanje: CS = tip x 4 + 2 i IP = tip x 4. Nove CS i IP vrijednosti preuzete iz adresnih ćelija tip x 4 + 2 I tip x 4, odrediti početnu adresu potrebnog programa održavanja.

Naredba prekida INT o kojoj se govorilo kada je vrijednost polja v=0 ima jednobajtni format, tj. ne zahtijeva posebnu indikaciju razine prekida. Ovu naredbu procesor automatski percipira kao prekid razine 3. (tip=3) i obično se koristi u programima kao kontrolna točka.

Naredba INTO preljevnog prekida uzrokuje prijelaz na servisiranje prekida četvrte razine (tip = 4) u slučaju kada vrijednost zastavice preljeva OF = 1. Naredba INTO obično se koristi nakon potpisanih aritmetičkih naredbi. Obično je prvih nekoliko razina prekida (do 32) rezervirano za obradu određenog broja specifičnih situacija, kao što je pokušaj dijeljenja s nulom, preljev i slično.

Osobitost obrade prekida rezerviranih razina je da procesor nastavlja s njihovim servisiranjem bez obzira na vrijednost zastavice za uključivanje prekida IF.

Jednobajtna IRET instrukcija postavlja se na kraj svake rutine usluge prekida i omogućuje povrat prekida. Ovom naredbom procesor dohvaća vrijednost pokazivača IP instrukcija i CS programskog segmenta sa stoga, a također vraća prethodni sadržaj registra F zastavica (kao kod naredbe POPF). Ako je potrebno, sadržaj preostalih registara CPU-a koji odgovaraju prekinutom programu može se pohraniti na stog prilikom prelaska na servisni program i zatim obnoviti kada se iz njega vrati pomoću uputa za pristup stogu.

logički ILI, zbrajanje modulo 2 (isključivo ILI);
  • logički, aritmetički i ciklički pomaci;
  • provjera bitova i operanda;
  • postavljanje i brisanje bitova (zastavica) statusni registar procesor ( P.S.W.).
  • Upute za logičke operacije omogućuju vam procjenu osnovnih logičkih funkcija bit po bit iz dva ulazna operanda. Osim toga, operacija AND koristi se za prisilno brisanje navedenih bitova (kao jedan od operanda, koristi se kod maske u kojem su bitovi koji zahtijevaju brisanje postavljeni na nulu). Operacija OR koristi se za prisilno postavljanje navedenih bitova (kod maske se koristi kao jedan od operanda, u kojem su bitovi koji zahtijevaju postavljanje na jedan jednaki jedinici). Isključivo ILI operacija (XOR) koristi se za invertiranje navedenih bitova (kod maske se koristi kao jedan od operanda, u kojem su bitovi koje treba invertirati postavljeni na jedan). Instrukcije zahtijevaju dva ulazna operanda i proizvode jedan izlazni operand.

    Instrukcije pomaka omogućuju pomicanje koda operanda bit po bit udesno (prema bitovima nižeg reda) ili ulijevo (prema bitovima višeg reda). Vrsta pomaka (logička, aritmetička ili ciklička) određuje koja će biti nova vrijednost visokog bita (za desni pomak) ili niskog bita (za lijevi pomak), a također određuje hoće li stara vrijednost visokog bita biti (za pomak ulijevo) bit će pohranjen negdje ili bit najmanjeg značaja (kada se pomakne udesno). Na primjer, s logičkim desnim pomakom, najznačajniji bit koda operanda postavlja se na nulu, a najmanje značajan bit se upisuje kao prijenosna zastavica u registar statusa procesora. A s aritmetičkim pomakom udesno, vrijednost najvažnijeg bita ostaje ista (nula ili jedan), najmanje značajan bit također se piše kao prijenosna zastavica.

    Kružni pomaci omogućuju kružno pomicanje bitova koda operanda (u smjeru kazaljke na satu za pomak udesno ili suprotno od kazaljke na satu za pomak ulijevo). U ovom slučaju, prsten za mjenjač može, ali i ne mora uključivati ​​oznaku za nošenje. Bit zastavice prijenosa (ako se koristi) pohranjuje vrijednost bita najveće važnosti kada se rotira lijevo i bita najmanje važnosti kada se rotira desno. Sukladno tome, vrijednost bita zastavice prijenosa bit će prepisana u bit najmanje važnosti tijekom cikličkog pomaka ulijevo i u bit najveće važnosti tijekom cikličkog pomaka udesno.

    Na primjer na Sl. Slika 3.12 prikazuje radnje koje izvode desne naredbe shift.

    Upute za testiranje bitova i operanda koriste se za postavljanje ili brisanje bitova statusni registar procesor ovisno o vrijednosti odabranih bitova ili cijelog operanda u cjelini. Naredba ne generira izlazni operand. Testna naredba operanda ( TST) provjerava cijeli kod operanda kao cjeline za jednakost nuli i za znak (vrijednost najvažnijeg bita), zahtijeva samo jedan ulazni operand. Uputa za testiranje bitova (BIT) testira samo pojedinačne bitove, koji su odabrani korištenjem koda maske kao drugog operanda. U kodu maske, označeni bitovi glavnog operanda moraju odgovarati jediničnim znamenkama.


    Riža. 3.12.

    Konačno, naredbe za postavljanje i brisanje bitova statusni registar procesor (to jest, zastavice) omogućuju vam postavljanje ili brisanje bilo koje zastavice, što može biti vrlo zgodno. Svaka zastavica obično odgovara dvjema naredbama, od kojih je jedna postavlja na jedinicu, a druga je vraća na nulu. Na primjer, oznaka prijenosa C (od Carry) će odgovarati naredbama CLC (očisti) i SEC ili STC (postavi).

    3.3.4. Prijelazne naredbe

    Prijelazne naredbe dizajnirani su za organiziranje svih vrsta petlji, grananja, poziva potprograma itd., odnosno ometaju sekvencijalni tijek izvršavanja programa. Ove instrukcije upisuju novu vrijednost u registar programskog brojača i time uzrokuju da procesor skoči ne na sljedeću instrukciju po redu, već na bilo koju drugu instrukciju u programskoj memoriji. Neki prijelazne naredbe omogućuju budući povratak na točku s koje je prijelaz napravljen, drugi to ne osiguravaju. Ako je povrat osiguran, tada su trenutni parametri procesora pohranjeni na stogu. Ako povrat nije osiguran, tada se trenutni parametri procesora ne spremaju.

    Prijelazne naredbe bespovratni se dijele u dvije skupine:

    • timovi bezuvjetni skokovi;
    • timovi uvjetni skokovi.

    Ove naredbe koriste riječi Podružnica(grananje) i Skok(odskakivati).

    Timovi bezuvjetni skokovi izazvati prijelaz na novu adresu bez obzira na sve. Oni mogu uzrokovati skok na određeni iznos pomaka (naprijed ili unatrag) ili na određenu memorijsku adresu. Vrijednost pomaka ili nova vrijednost adrese navedena je kao ulazni operand.

    Timovi uvjetni skokovi ne uzrokuju uvijek prijelaz, već samo kada su ispunjeni određeni uvjeti. Takvi uvjeti su obično vrijednosti zastavica u registru statusa procesora ( P.S.W.). Odnosno, prijelazni uvjet je rezultat prethodne operacije koja mijenja vrijednosti zastavica. Ukupno takvih prijelaznih uvjeta može biti od 4 do 16. Nekoliko primjera naredbi uvjetni skokovi:

    • skok ako je jednak nuli;
    • skok ako nije nula;
    • skok ako postoji preljev;
    • skok ako nema preljeva;
    • skok ako je veći od nule;
    • skok ako je manji ili jednak nuli.
    novo značenje. Ako prijelazni uvjet nije ispunjen, programski brojač se jednostavno povećava, a procesor odabire i izvršava sljedeću instrukciju po redu.

    Naredba za usporedbu ( CMP), ispred naredbe uvjetni skok(ili čak nekoliko timova uvjetni skokovi). Ali zastavice se mogu postaviti bilo kojom drugom naredbom, na primjer naprijed naredba podataka, bilo kakve aritmetike ili logična naredba. Imajte na umu da mi sami prijelazne naredbe zastavice se ne mijenjaju, što vam omogućuje postavljanje nekoliko prijelazne naredbe jedan za drugim.

    Dijeljenje više uvjetnih naredbi i bezuvjetni skokovi omogućuje procesoru izvršavanje razgranatih algoritama bilo koje složenosti. Na primjer na Sl. Slika 3.13 prikazuje grananje programa u dvije grane praćene vezom, a sl. 3.14 - grananje u tri grane s naknadnim spajanjem.

    Prijelazne naredbe s daljnjim povratkom na točku s koje je prijelaz napravljen služe za izvršavanje potprograma, odnosno pomoćnih programa. Ove se naredbe također nazivaju naredbama poziva potprograma (česti naziv je CALL). Korištenje potprograma omogućuje vam da pojednostavite strukturu glavnog programa, učinite ga logičnijim, fleksibilnijim i lakšim za pisanje i otklanjanje pogrešaka. Istodobno, mora se uzeti u obzir da široka uporaba potprograma, u pravilu, povećava vrijeme izvršenja programa.


    Riža. 3.13.


    Riža. 3.14.

    svi prijelazne naredbe uz return pretpostavljaju bezuvjetno grananje (ne provjeravaju nijednu zastavicu). Međutim, oni zahtijevaju jedan ulazni operand, koji može pokazati i apsolutnu vrijednost nove adrese i pomak koji se dodaje trenutnoj vrijednosti adrese. Trenutna vrijednost programskog brojača (trenutna adresa) pohranjuje se prije nego što se izvede grananje na stogu.

    Za povratak na mjesto poziva

    Neizravnim obraćanjem

    PCHL – adresa skoka pohranjuje se u par registara HL. Kada se izvrši (HL) → PC.

    Naredbe uvjetnog skoka

    Jcon @, gdje je con uvjet mnemotehnički od engleske riječi condition.

    Prethodno je navedeno da se stanje bitova (zastavica) RgP (F) koristi kao prijelazni uvjet. Mnemotehnika koja odgovara ovim stanjima prikazana je na sl. 6.18.

    Na primjer: JC 8BFE – kada C=1 ide na adresu 8BFE, kada je C=0 izvršava se sljedeća naredba na adresi.

    Naredbe za pozivanje PP i povratak

    Prethodno je navedeno da se povratna adresa automatski pohranjuje na stog, tj. (PC) ® stog.

    Bezuvjetne naredbe

    CALL @ – poziv potprograma;

    RET – povratak iz potprograma.

    Uvjetne naredbe

    Ccon @ – poziv potprograma;

    Rcon – povratak iz potprograma.

    Djelovanje naredbi je slično djelovanju naredbi uvjetnog skoka, tj. ako je uvjet istinit, onda nazovite ili se vratite. Ako nije, tada se izvršavaju sljedeće naredbe.

    Ostale kontrolne naredbe

    RST n, gdje je n = 0.1,...,7 – ponovno pokretanje prema vektoru prekida n.

    Kada se ova naredba izvrši, kontrola se prenosi na potprogram koji servisira ovaj prekid. Tijekom izvođenja RST instrukcije, sadržaj programskog brojača PC računala se pohranjuje na stog, a adresa odgovarajućeg vektora prekida se upisuje na PC.

    Ova adresa je postavljena na sljedeći način. Naredba RST ima strukturu 11NN N111, tj. jedan bajt. Trobitna NNN kombinacija određena je vrijednošću n (n = 0...7). U PC brojač naredbi upisuje se vrijednost 0000 0000 00NN N000 koja služi kao adresa odgovarajućeg vektora prekida.

    Dakle, postavljanjem određene vrijednosti n, možete generirati adresu jednog od 8 vektora prekida. Ove adrese se nalaze u zoni od 0000H do 0038H adresnog prostora i prolaze kroz 8 bajtova, tj. Za njih su rezervirane prve 64 memorijske ćelije (svaki od 8 vektora ima 8 bajtova). U tim zonama (svaka po 8 bajtova) ispisuju se samo naredbe za skok na odgovarajuće potprograme (rukovače), koji se nalaze u drugim memorijskim područjima.

    Prekidanje potprograma (poput normalnih potprograma) mora završiti naredbom RET. Tijekom izvođenja ove naredbe adresa glavne programske naredbe pred kojom je došlo do prekida odabire se sa steka i prenosi u adresni registar PA, a vrijednost uvećana za 1 upisuje se u programski brojač.

    EI – omogućivanje prekida. Ova se naredba nalazi na početku programske sekcije u kojoj je omogućen prekid. Ovom naredbom se okidač za omogućavanje prekida u MP upravljačkoj jedinici postavlja na stanje 1.

    DI – onemogućavanje prekida. Ova se naredba postavlja na kraj programske sekcije u kojoj je prekid bio omogućen i vraća okidač na stanje 0.

    NOP je "prazna" naredba. Preskače 4 mjere. Mijenja se samo računalo.

    HLT – stop. Uzrokuje zaustavljanje izvršavanja programa i ulazak u zaustavljeno stanje. MP je odspojen od vanjske adresne i podatkovne sabirnice (tj. njihovi međuspremnici prelaze u stanje Z). Izlaz WAIT (čekanje) postavljen je na razinu 1. Ovo stanje se može prekinuti MP startnim signalima ili postavljanjem u stanje prekida.

    PITANJA ZA SAMOPROVJERU

    1. Koji su uređaji potrebni za izradu jednostavnog mikroračunala?

    2. Navedite 5 opcija za strukture mikroračunala.

    3. Korištenje posredničkog sučelja.

    4. Što uključuje pojam “PU kontroler”?

    5. Navedite karakteristike procesora I8080.

    6. Registri podataka. Njihova namjena.

    7. Registri znakova. Koji su atributi pohranjeni u tim registrima?

    8. Opišite princip dvosmjerne razmjene podataka između unutarnjeg i vanjskog SD-a.

    9. Koje registre programer može koristiti?

    10. Navedite blok shemu mikroračunala baziranog na MP KR580VM80.

    11. Od kojih se ciklusa sastoji strojni ciklus?

    12. Navedite formate podataka MP KR580VM80.

    13. Navedite formate naredbi MP KR580VM80.

    14. Koje se metode adresiranja koriste u MP KR580VM80?

    15. Na koje skupine se mogu podijeliti timovi MP KR580VM80?

    16. Jednobajtni prijenosi. Navedite primjere naredbi iz ove skupine.

    17. Dvobajtni prijenosi. Navedite primjere naredbi iz ove skupine.

    18. Koje baterije znate?

    19. Operacije u RON i memoriji. Koje operacije uključuju?

    20. Navedite upravljačke naredbe.

    KONTROLNI ZADACI

    1. Na obrascima za odgovore mora biti naznačen broj grupe, prezime učenika i broj njegove opcije.

    2. Brojeve pitanja bira učenik u skladu sa svoje zadnje dvije znamenke u razrednoj knjižici. U tablici 6.1, n-1 je pretposljednja znamenka broja, a n posljednja znamenka. Ćelije tablice sadrže brojeve pitanja na koja je potrebno pismeno odgovoriti.

    Brojevi pitanja Tablica 6.1

    a n a n-1
    1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18
    3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17
    2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18
    3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18
    1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17
    3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16
    1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19
    4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19
    1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19
    3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19

    Aritmetičke instrukcije tretiraju kodove operanda kao numeričke binarne ili BCD kodove. Ove se naredbe mogu podijeliti u pet glavnih skupina:

    Upute za operacije s fiksnom točkom (zbrajanje, oduzimanje, množenje, dijeljenje);

    Instrukcije s pomičnim zarezom (zbrajanje, oduzimanje, množenje, dijeljenje);

    Naredbe za čišćenje;

    Naredbe za povećanje i smanjenje;

    Naredba za usporedbu.

    Instrukcije s fiksnom točkom tretiraju kodove u procesorskim registrima ili memoriji kao da su normalni binarni kodovi. Instrukcija zbrajanja (ADD) izračunava zbroj dvaju kodova. Instrukcija oduzimanja (SUB) izračunava razliku između dva koda. Instrukcija množenja (MUL) izračunava umnožak dvaju kodova (širina rezultata dvostruka je širina faktora). Instrukcija dijeljenja (DIV) izračunava kvocijent jednog koda podijeljenog drugim. Štoviše, sve ove naredbe mogu raditi i s predpisanim i s nepredpisanim brojevima.

    Instrukcije s pomičnim zarezom (točkom) koriste format za predstavljanje brojeva s eksponentom i mantisom (obično ti brojevi zauzimaju dvije uzastopne memorijske ćelije). U modernim snažnim procesorima, skup instrukcija s pomičnim zarezom nije ograničen na samo četiri aritmetičke operacije, već sadrži i mnoge druge složenije instrukcije, na primjer, izračun trigonometrijskih funkcija, logaritamskih funkcija, kao i složene funkcije potrebne za audio i obrada slike.

    Jasne instrukcije (CLR) dizajnirane su za pisanje nultog koda u registar ili memorijsku lokaciju. Ove naredbe mogu se zamijeniti naredbama za prosljeđivanje nultog koda, ali posebne jasne naredbe obično su brže od naredbi za prosljeđivanje. Naredbe za čišćenje ponekad se klasificiraju kao logičke naredbe, ali to ne mijenja njihovu bit.

    Naredbe increment (povećanje za jedan, INC) i decrement (smanjenje za jedan, DEC) također su vrlo prikladne. One se u načelu mogu zamijeniti uputama zbrajanja jedan ili oduzimanja jedan, ali su inkrementacija i dekrementacija brži od zbrajanja i oduzimanja. Ove instrukcije zahtijevaju jedan ulazni operand, koji je ujedno i izlazni operand.

    Konačno, instrukcija za usporedbu (označena kao CMP) dizajnirana je za usporedbu dvaju ulaznih operanda. U biti, izračunava razliku ova dva operanda, ali ne formira izlazni operand, već samo mijenja bitove u statusnom registru procesora (PSW) na temelju rezultata ovog oduzimanja. Instrukcija koja slijedi nakon instrukcije usporedbe (obično instrukcija skoka) ispitat će bitove u statusnom registru procesora i izvesti radnje na temelju njihovih vrijednosti. Neki procesori daju ulančane upute za usporedbu za dva niza operanda koji se nalaze u memoriji (na primjer, 8086 i kompatibilni procesori).

    Logičke naredbe

    Logičke instrukcije izvode logičke (bitne) operacije na svojim operandima, to jest, tretiraju kodove operanda ne kao jedan broj, već kao skup pojedinačnih bitova. Po tome se razlikuju od aritmetičkih uputa. Logičke naredbe izvode sljedeće osnovne operacije:

    Logički I, logički ILI, zbrajanje modulo 2 (Isključivo ILI);

    Logički, aritmetički i ciklički pomaci;

    Provjera bitova i operanda;

    Postavlja i briše bitove (zastavice) registra statusa procesora (PSW).

    Upute za logičke operacije omogućuju vam procjenu osnovnih logičkih funkcija bit po bit iz dva ulazna operanda. Osim toga, operacija AND koristi se za prisilno brisanje navedenih bitova (kao jedan od operanda, koristi se kod maske u kojem su bitovi koji zahtijevaju brisanje postavljeni na nulu). Operacija OR koristi se za prisilno postavljanje određenih bitova (kao jedan od operanda koristi se kod maske u kojem su bitovi koji zahtijevaju postavljanje na jedan jednaki jedinici). Isključivo ILI operacija (XOR) koristi se za invertiranje navedenih bitova (kod maske se koristi kao jedan od operanda, u kojem su bitovi koje treba invertirati postavljeni na jedan). Instrukcije zahtijevaju dva ulazna operanda i proizvode jedan izlazni operand.

    Instrukcije pomaka omogućuju pomicanje koda operanda bit po bit udesno (prema bitovima nižeg reda) ili ulijevo (prema bitovima višeg reda). Vrsta pomaka (logička, aritmetička ili ciklička) određuje koja će biti nova vrijednost visokog bita (za desni pomak) ili niskog bita (za lijevi pomak), a također određuje hoće li stara vrijednost visokog bita biti (za pomak ulijevo) bit će pohranjen negdje ili bit najmanjeg značaja (kada se pomakne udesno). Na primjer, s logičkim desnim pomakom, najznačajniji bit koda operanda postavlja se na nulu, a najmanje značajan bit se upisuje kao prijenosna zastavica u registar statusa procesora. A s aritmetičkim pomakom udesno, vrijednost najvažnijeg bita ostaje ista (nula ili jedan), najmanje značajan bit također se piše kao prijenosna zastavica.

    Kružni pomaci omogućuju kružno pomicanje bitova koda operanda (u smjeru kazaljke na satu za pomak udesno ili suprotno od kazaljke na satu za pomak ulijevo). U ovom slučaju, prsten za mjenjač može, ali i ne mora uključivati ​​oznaku za nošenje. Bit zastavice prijenosa (ako se koristi) pohranjuje vrijednost bita najveće važnosti kada se rotira lijevo i bita najmanje važnosti kada se rotira desno. Sukladno tome, vrijednost bita zastavice prijenosa bit će prepisana u bit najmanje važnosti tijekom cikličkog pomaka ulijevo i u bit najveće važnosti tijekom cikličkog pomaka udesno.

    Na primjer na Sl. Slika 2.3 prikazuje radnje koje izvode desne naredbe shift.

    Upute za provjeru bitova i operanda dizajnirane su za postavljanje ili brisanje bitova statusnog registra procesora ovisno o vrijednosti odabranih bitova ili cijelog operanda u cjelini. Naredba ne generira izlazni operand. Instrukcija testnog operanda (TST) provjerava cijeli kod operanda kao cjeline na nulu i predznak (vrijednost najvažnijeg bita), zahtijeva samo jedan ulazni operand. Uputa za testiranje bitova (BIT) testira samo pojedinačne bitove, koji su odabrani korištenjem koda maske kao drugog operanda. U kodu maske, označeni bitovi glavnog operanda moraju odgovarati jediničnim znamenkama.

    Riža. 2.3.Naredbe Shift Desno.

    Konačno, upute za postavljanje i brisanje bitova registra statusa procesora (to jest, zastavica) omogućuju vam da postavite ili izbrišete bilo koju zastavicu, što može biti vrlo zgodno. Svaka zastavica obično odgovara dvjema naredbama, od kojih je jedna postavlja na jedinicu, a druga je vraća na nulu. Na primjer, oznaka prijenosa C (za prijenos) odgovarat će naredbama CLC (očisti) i SEC ili STC (postavi).

    Prijelazne naredbe

    Naredbe skoka dizajnirane su za organiziranje svih vrsta petlji, grananja, poziva potprograma itd., odnosno ometaju sekvencijalni tijek izvršavanja programa. Ove instrukcije upisuju novu vrijednost u registar programskog brojača i time uzrokuju da se procesor ne pomakne na sljedeću instrukciju po redu, već na bilo koju drugu instrukciju u programskoj memoriji. Neke prijelazne naredbe omogućuju naknadni povratak na točku s koje je prijelaz napravljen, druge to ne omogućuju. Ako je povrat osiguran, tada su trenutni parametri procesora pohranjeni na stogu. Ako povrat nije osiguran, tada se trenutni parametri procesora ne spremaju.

    Naredbe za skok bez povratka dijele se u dvije skupine:

    Bezuvjetne naredbe za skok;

    Naredbe uvjetnog skoka.

    Ove naredbe predstavljene su riječima Grananje i Skok.

    Naredbe bezuvjetnog skoka uzrokuju skok na novu adresu bez obzira na sve. Oni mogu uzrokovati skok na određeni iznos pomaka (naprijed ili unatrag) ili na određenu memorijsku adresu. Vrijednost pomaka ili nova vrijednost adrese navedena je kao ulazni operand.

    Naredbe uvjetnog skoka ne uzrokuju uvijek skok, već samo kada su ispunjeni navedeni uvjeti. Takvi uvjeti su obično vrijednosti zastavica u registru statusa procesora (PSW). Odnosno, prijelazni uvjet je rezultat prethodne operacije koja mijenja vrijednosti zastavica. Ukupno takvih prijelaznih uvjeta može biti od 4 do 16. Nekoliko primjera uvjetnih prijelaznih naredbi:

    Skok ako je jednak nuli;

    Skok ako nije nula;

    Skočite ako postoji preljev;

    Skoči ako nema preljeva;

    Skok ako je veći od nule;

    Skok ako je manji ili jednak nuli.

    Ako je prijelazni uvjet ispunjen, nova vrijednost se učitava u registar brojača naredbi. Ako prijelazni uvjet nije ispunjen, programski brojač se jednostavno povećava, a procesor odabire i izvršava sljedeću instrukciju po redu.

    Konkretno, za provjeru uvjeta skoka koristi se usporedna instrukcija (CMP) koja prethodi instrukciji uvjetnog skoka (ili čak nekoliko instrukcija uvjetnog skoka). Ali zastavice se također mogu postaviti bilo kojom drugom naredbom, na primjer naredbom za prijenos podataka ili bilo kojom aritmetičkom ili logičkom naredbom. Imajte na umu da same naredbe skoka ne mijenjaju zastavice, što je upravo ono što vam omogućuje postavljanje nekoliko naredbi skoka jednu za drugom.

    Kombinirana uporaba nekoliko uvjetnih i bezuvjetnih instrukcija skoka omogućuje procesoru izvršavanje razgranatih algoritama bilo koje složenosti. Na primjer na Sl. 2.4 prikazuje grananje programa u dvije grane s naknadnim povezivanjem, a na sl. 2.5 - grananje u tri grane s naknadnim spajanjem.

    Naredbe prijelaza s daljnjim povratkom na točku s koje je prijelaz izvršen služe za izvršavanje potprograma, odnosno pomoćnih programa. Ove se naredbe također nazivaju naredbama poziva potprograma (poznatije kao CALL). Korištenje potprograma omogućuje vam da pojednostavite strukturu glavnog programa, učinite ga logičnijim, fleksibilnijim i lakšim za pisanje i otklanjanje pogrešaka. Istodobno, mora se uzeti u obzir da široka uporaba potprograma, u pravilu, povećava vrijeme izvršenja programa.

    Riža. 2.4.Implementacija grananja u dvije grane.

    Riža. 2.5.Implementacija grananja u tri grane.

    Sve instrukcije povratnog skoka pretpostavljaju bezuvjetni skok (ne provjeravaju nijednu zastavicu). Međutim, oni zahtijevaju jedan ulazni operand, koji može pokazati i apsolutnu vrijednost nove adrese i pomak koji se dodaje trenutnoj vrijednosti adrese. Trenutna vrijednost programskog brojača (trenutna adresa) pohranjuje se prije nego što se izvede grananje na stogu.

    Za povratak na pozivnu točku potprograma (jump point) koristi se posebna povratna instrukcija (RET ili RTS). Ova instrukcija izbacuje vrijednost adrese instrukcije skoka iz stoga i upisuje je u registar brojača programa.

    Posebno mjesto među instrukcijama skoka s povratkom zauzimaju instrukcije prekida (uobičajeni naziv - INT). Ove instrukcije zahtijevaju broj prekida (adresu vektora) kao ulazni operand. Takvi se prijelazi servisiraju na isti način kao i hardverski prekidi. To jest, da bi izvršio ovaj prijelaz, procesor pristupa tablici vektora prekida i prima od nje, prema broju prekida, memorijsku adresu na koju treba ići. Adresa poziva prekida i sadržaj registra statusa procesora (PSW) pohranjeni su na stogu. Spremanje PSW je važna razlika između instrukcija prekida i instrukcija povratnog skoka.

    U mnogim su slučajevima naredbe prekida prikladnije od uobičajenih naredbi skoka i povratka. Tablicu vektora prekida možete izraditi jednom, a zatim joj pristupiti po potrebi. Broj prekida odgovara broju potprograma, odnosno broju funkcije koju potprogram izvodi. Stoga su instrukcije prekida mnogo češće uključene u sustave instrukcija procesora nego obične instrukcije skok-povratak.

    Za povratak iz potprograma pozvanog instrukcijom prekida, upotrijebite instrukciju povratka iz prekida (IRET ili RTI). Ova naredba izbacuje vrijednost programskog brojača i statusnog registra procesora (PSW) koji su tamo pohranjeni iz stoga.

    Imajte na umu da neki procesori također pružaju uvjetne instrukcije prekida, na primjer, instrukciju prekida preljeva.

    Naravno, u ovom odjeljku ispitali smo samo osnovne naredbe koje se najčešće nalaze u procesorima. Određeni procesori mogu imati mnoge druge instrukcije koje ne pripadaju navedenim skupinama instrukcija. Ali oni se moraju proučiti nakon što se odabere tip procesora prikladan za problem koji rješava dati mikroprocesorski sustav.


    
    Vrh