Program v zbirnem jeziku. Splošne značilnosti ukaznega sistema jezika Assembler za IBM-PC (osnovni nabor ukazov, osnovne metode naslavljanja operandov). Struktura programa v jeziku Assembler. Ukazi zbirnega jezika

Splošne informacije o zbirnem jeziku

Simbolni zbirni jezik lahko v veliki meri odpravi pomanjkljivosti programiranja v strojnem jeziku.

Njegova glavna prednost je, da so v zbirnem jeziku vsi programski elementi predstavljeni v simbolni obliki. Za pretvorbo simbolnih imen ukazov v njihove binarne kode je odgovoren poseben program- asembler, ki osvobaja programerja delovno intenzivnega dela in odpravlja neizogibne napake.

Simbolična imena, vnesena pri programiranju v zbirnem jeziku, običajno odražajo semantiko programa, okrajšava ukazov pa odraža njihovo glavno funkcijo. Na primer: PARAM - parameter, TABLE - tabela, MASK - maska, ADD - seštevanje, SUB - odštevanje itd. itd. Takšna imena si programer zlahka zapomni.

Za programiranje v zbirnem jeziku je potrebno imeti zapletena orodja kot za programiranje v strojnem jeziku: potrebujete računalniške sisteme, ki temeljijo na mikroračunalniku ali osebnem računalniku z naborom periferne naprave(alfanumerična tipkovnica, prikazovalnik znakov, plavajoči pogon in tiskalna naprava), kot tudi rezidenčni sistemi ali sistemi za navzkrižno programiranje za zahtevane tipe mikroprocesorjev. Zbiralni jezik vam omogoča učinkovito pisanje in odpravljanje napak v veliko bolj zapletenih programih kot strojni jezik (do 1 - 4 KB).

Zbiralni jeziki so strojno usmerjeni, tj. odvisni od strojnega jezika in strukture ustreznega mikroprocesorja, saj je v njih vsakemu ukazu mikroprocesorja dodeljeno določeno simbolno ime.

Zbirni jeziki zagotavljajo znatno povečanje produktivnosti programerja v primerjavi s strojnimi jeziki in hkrati ohranjajo možnost uporabe vseh programsko razpoložljivih strojnih virov mikroprocesorja. To omogoča usposobljenim programerjem, da napišejo programe, ki jih je mogoče izvesti v manj kot kratek čas in zasedejo manj pomnilnika v primerjavi s programi, ustvarjenimi v jeziku visoke ravni.

V zvezi s tem so skoraj vsi programi za krmiljenje vhodno-izhodnih naprav (gonilnikov) napisani v zbirnem jeziku, kljub prisotnosti precej velikega števila jezikov na visoki ravni.

S pomočjo zbirnega jezika lahko programer nastavi naslednje parametre:

mnemonika (simbolično ime) vsakega ukaza strojnega jezika mikroprocesorja;

standardni format za vrstice programa, napisanega v zbirnem jeziku;

oblika za označevanje na različne načine naslavljanje in ukazne variante;

format za podajanje znakovnih konstant in celoštevilskih konstant v različnih številskih sistemih;

psevdoukazi, ki nadzorujejo proces sestavljanja (prevajanja) programa.

V zbirnem jeziku je program napisan vrstico za vrstico, kar pomeni, da je vsakemu ukazu dodeljena ena vrstica.

Za mikroračunalnike, zgrajene na osnovi najpogostejših tipov mikroprocesorjev, lahko obstaja več različic zbirnega jezika, vendar se običajno v praksi široko uporablja ena - to je tako imenovani standardni zbirni jezik

Programiranje na ravni strojnih ukazov je najnižja raven, na kateri je mogoče pisati programe. Sistem strojnih navodil mora zadostovati za izvajanje zahtevanih dejanj z izdajanjem navodil strojni opremi računalnika.

Vsak strojni ukaz je sestavljen iz dveh delov:

· operacijska dvorana - ugotavljanje »kaj narediti«;

· operand - definiranje procesnih objektov, »kaj storiti s«.

Ukaz mikroprocesorskega stroja, napisan v zbirnem jeziku, je ena vrstica z naslednjo sintaktično obliko:

operand(i) ukaza/navodila oznake; komentarji

V tem primeru je obvezno polje v vrstici ukaz ali direktiva.

Oznaka, ukaz/naredba in operandi (če obstajajo) so ločeni z vsaj enim presledkom ali tabulatorjem.

Če je treba ukaz ali direktivo nadaljevati v naslednji vrstici, se uporabi poševnica nazaj: \.

Privzeto zbirni jezik pri pisanju ukazov ali direktiv ne razlikuje med velikimi in malimi črkami.

Neposredno naslavljanje: Učinkovit naslov je določen neposredno s poljem odmika strojnega ukaza, ki je lahko velik 8, 16 ali 32 bitov.

mov eax, vsota ; eax = vsota

Sestavljalnik nadomesti vsoto z ustreznim naslovom, shranjenim v podatkovnem segmentu (privzeto ga naslovi register ds) in postavi vrednost, shranjeno v vsoti, v register eax.

Posredno naslavljanje pa ima naslednje vrste:

· posredno osnovno (registrsko) naslavljanje;

· posredno osnovno (registrsko) naslavljanje z odmikom;

· posredno indeksno naslavljanje;

· posredno osnovno indeksno naslavljanje.

Posredno osnovno (registrsko) naslavljanje. S tem naslavljanjem se lahko efektivni naslov operanda nahaja v katerem koli registru splošnega namena, razen v sp/esp in bp/ebp (to sta posebna registra za delo s segmentom sklada). Sintaktično v ukazu je ta način naslavljanja izražen z vključitvijo imena registra oglati oklepaji.

mov eax, ; eax = *esi; *esi vrednost na naslovu esi

Uvod.

Jezik, v katerem je napisano izvirni program, poklical vhod jezik, in jezik, v katerega se prevede za izvedbo s strani procesorja ob prostih dnevih jezik. Postopek pretvorbe vhodnega jezika v izhodni jezik se imenuje oddaja. Ker so procesorji sposobni izvajati programe v binarnem strojnem jeziku, ki se ne uporablja za programiranje, je potrebno prevajanje vseh izvornih programov. Znano dva načina oddaje: kompilacija in interpretacija.

pri kompilacija izvorni program je najprej v celoti preveden v enakovreden program v izhodnem jeziku, imenovanem predmet program in nato izveden. Ta postopek se izvaja s posebnim programi, klical prevajalnik. Prevajalnik, za katerega je vhodni jezik simbolna oblika predstavitve strojnega (izhodnega) jezika binarnih kod, se imenuje sestavljalec.

pri interpretacije Vsaka vrstica besedila v izvornem programu je analizirana (interpretirana) in v njej podani ukaz se takoj izvede. Izvedba te metode je zaupana tolmaški program. Tolmačenje traja dolgo. Da bi povečal učinkovitost, tolmač namesto obdelave vsake vrstice najprej vse pretvori ekipa nizi v znake (

). Ustvarjeno zaporedje simbolov se uporablja za izvajanje funkcij, dodeljenih izvirnemu programu.

Zbiralni jezik, obravnavan spodaj, je implementiran s prevajanjem.

Značilnosti jezika.

Glavne značilnosti monterja:

● namesto binarnih kod jezik uporablja simbolna imena - mnemotehnika. Na primer za ukaz za dodajanje (

) se uporabljajo mnemotehnike

Odštevanja (

množenje (

Divizije (

itd. Simbolična imena se uporabljajo tudi za naslavljanje pomnilniških celic. Za programiranje v zbirnem jeziku morate namesto binarnih kod in naslovov poznati samo simbolna imena, ki jih asembler prevede v binarne kode;

vsaka izjava ustreza en strojni ukaz(koda), tj. obstaja ujemanje ena proti ena med strojnimi ukazi in operaterji v programu v zbirnem jeziku;

● jezik omogoča dostop na vse predmete in ekipe. Jeziki na visoki ravni nimajo te sposobnosti. Na primer, zbirni jezik omogoča preverjanje bitov registra zastavic in jezik na visoki ravni (npr.

) nima te sposobnosti. Upoštevajte, da sistemski programski jeziki (na primer C) pogosto zasedajo vmesni položaj. Po dostopnosti so bližje zbirnemu jeziku, vendar imajo sintakso jezika na visoki ravni;

● zbirni jezik ni univerzalni jezik. Vsaka posebna skupina mikroprocesorjev ima svoj asembler. Jeziki na visoki ravni nimajo te pomanjkljivosti.

Za razliko od visokonivojskih jezikov pisanje in razhroščevanje programa v zbirnem jeziku zahteva veliko časa. Kljub temu je montažni jezik prejel široko uporabo zaradi naslednjih okoliščin:

● program, napisan v zbirnem jeziku, je bistveno manjši in deluje veliko hitreje kot program, napisan v jeziku visoke ravni. Za nekatere aplikacije imajo ti indikatorji primarno vlogo, na primer veliko sistemske programe(vključno s prevajalniki), programi na kreditnih karticah, mobilni telefon, gonilniki naprav itd.;

● nekateri postopki zahtevajo popoln dostop na strojno opremo, kar je običajno nemogoče narediti v jeziku na visoki ravni. Ta primer vključuje prekinitve in upravljalnike prekinitev v operacijskih sistemih ter krmilnike naprav v vdelanih sistemih v realnem času.

V večini programov je le majhen odstotek celotne kode odgovoren za velik odstotek časa izvajanja programa. Običajno je 1 % programa odgovoren za 50 % časa izvajanja, 10 % programa pa za 90 % časa izvajanja. Zato se za pisanje določenega programa v realnih pogojih uporabljata asembler in eden od jezikov na visoki ravni.

Oblika operatorja v zbirnem jeziku.

Program v zbirnem jeziku je seznam ukazov (izjav, stavkov), od katerih vsak zavzema posebno vrstico in vsebuje štiri polja: polje oznake, polje operacije, polje operanda in polje komentarja. Vsako polje ima ločen stolpec.

Polje oznake.

Polju oznake je dodeljen stolpec 1. Oznaka je simbolično ime ali identifikator, naslovi spomin. To je potrebno, da lahko:

● narediti pogojni ali brezpogojni prehod na ukaz;

● pridobiti dostop do lokacije, kjer so shranjeni podatki.

Take izjave so opremljene z oznako. Za označevanje imena se uporabljajo (velike) črke angleške abecede in številke. Ime mora imeti črko na začetku in dvopičje na koncu. Oznako dvopičja lahko zapišemo v ločeno vrstico, opcode pa lahko zapišemo v naslednjo vrstico v stolpcu 2, kar poenostavi delo prevajalnika. Odsotnost dvopičja ne omogoča razlikovanja oznake od kode operacije, če sta v ločenih vrsticah.

V nekaterih različicah zbirnega jezika so dvopičja postavljena le za oznakami navodil, ne za oznakami podatkov, dolžina oznake pa je lahko omejena na 6 ali 8 znakov.

V polju oznake ne sme biti enakih imen, saj je oznaka povezana z naslovi ukazov. Če med izvajanjem programa ni treba priklicati ukaza ali podatkov iz pomnilnika, ostane polje oznake prazno.

Polje kode operacije.

To polje vsebuje mnemonično kodo za ukaz ali psevdoukaz (glejte spodaj). Mnemonično kodo ukaza izberejo razvijalci jezika. V zbirnem jeziku

mnemonic je izbran za nalaganje registra iz pomnilnika

), in za shranjevanje vsebine registra v pomnilnik - mnemotehnika

). V zbirnih jezikih

za obe operaciji lahko uporabite isto ime

Če je izbira mnemoničnih imen lahko poljubna, potem je potreba po uporabi dveh strojnih ukazov določena z arhitekturo procesorja

Mnemotehnika registrov je odvisna tudi od različice asemblerja (tabela 5.2.1).

Polje operanda.

Tukaj se nahaja Dodatne informacije, potrebno za izvedbo operacije. V polju operanda za ukaze za skok je naveden naslov, na katerega je treba izvesti skok, ter naslovi in ​​registri, ki so operandi za strojni ukaz. Kot primer podajamo operande, ki se lahko uporabljajo za 8-bitne procesorje

● številčni podatki,

predstavljeni v različnih številskih sistemih. Za označevanje uporabljenega številskega sistema konstanti sledi ena od latinske črke: IN,

V skladu s tem so binarni, osmiški, šestnajstiški, decimalni številski sistemi (

Ni vam treba zapisati). Če je prva številka šestnajstiškega števila A, B, C,

Nato se spredaj doda nepomembna 0 (ničla);

● kode notranjih mikroprocesorskih registrov in pomnilniških celic

M (viri ali prejemniki informacij) v obliki črk A, B, C,

M ali njihovi naslovi v poljubnem številskem sistemu (na primer 10B - naslov v registru

v dvojiškem sistemu);

● identifikatorji,

za registrske pare letal,

Prve črke so B,

N; za par akumulatorja in registra funkcij -

; za programski števec -

;za kazalec sklada -

● oznake, ki označujejo naslove operandov ali naslednjih navodil v pogojniku

(če je pogoj izpolnjen) in brezpogojni prehodi. Na primer, operand M1 v ukazu

pomeni potrebo po brezpogojnem prehodu na ukaz, katerega naslov v polju oznake je označen z identifikatorjem M1;

● izrazi,

ki so sestavljeni s povezovanjem zgoraj obravnavanih podatkov z uporabo aritmetičnih in logičnih operatorjev. Upoštevajte, da je metoda za rezervacijo podatkovnega prostora odvisna od jezikovne različice. Razvijalci zbirnih jezikov za

Določite besedo) in pozneje vnesite Alternativna možnost.

ki je bil v jeziku za procesorje od vsega začetka

V jezikovni različici

rabljeno

Določite konstanto).

Procesorji obdelujejo operande različnih dolžin. Da bi ga definirali, so razvijalci asemblerjev sprejeli različne odločitve, na primer:

II registri različnih dolžin imajo različna imena: EAX - za namestitev 32-bitnih operandov (tip

); AX - za 16-bitno (tip

in AN - za 8-bitni (tip

● za procesorje

Vsaki operacijski kodi so dodane pripone: pripona

Za vrsto

; pripona ".B" za vrsto

različne operacijske kode se uporabljajo za operande različnih dolžin, na primer za nalaganje bajta, polbesede (

) in besede v 64-bitni register z uporabo operacijskih kod

oz.

Polje za komentarje.

V tem polju so razlage o dejanjih programa. Komentarji ne vplivajo na delovanje programa in so namenjeni ljudem. Morda bodo potrebni za spremembo programa, ki je brez takšnih komentarjev morda popolnoma nerazumljiv tudi izkušenim programerje. Komentar se začne s simbolom in se uporablja za razlago in dokumentiranje programov. Začetni znak komentarja je lahko:

● podpičje (;) v jezikih za procesorje podjetja

Klicaj(!) v jezikih za

Pred vsako ločeno vrstico komentarja je začetni znak.

Psevdoukazi (direktive).

V zbirnem jeziku obstajata dve glavni vrsti ukazov:

osnovni navodila, ki so enakovredna strojni kodi procesorja. Ti ukazi izvajajo vso obdelavo, ki jo predvideva program;

psevdoukazi oz direktive, zasnovan za servisiranje postopka prevajanja programa v jezik kombinacije kod. Kot primer v tabeli. 5.2.2 prikazuje nekaj psevdoukazov iz asemblerja

za družino

.

Pri programiranju obstajajo situacije, ko je treba v skladu z algoritmom večkrat ponoviti isto verigo ukazov. Da se rešite iz te situacije, lahko:

● napišite zahtevano zaporedje ukazov, kadar koli se pojavi. Ta pristop vodi do povečanja obsega programa;

● uredite to zaporedje v proceduro (podprogram) in jo po potrebi pokličite. Ta izhod ima svoje pomanjkljivosti: vsakič morate izvesti ukaz za klic posebne procedure in ukaz za vrnitev, kar lahko, če je zaporedje kratko in pogosto uporabljeno, močno zmanjša hitrost programa.

Najenostavnejši in učinkovita metoda večkratno ponavljanje verige ukazov je sestavljeno iz uporabe makro, ki ga lahko predstavimo kot psevdoukaz, zasnovan za ponovno prevajanje skupine ukazov, ki jih pogosto najdemo v programu.

Za makro ali makroukaz so značilni trije vidiki: makrodefinicija, makroinverzija in makrorazširitev.

Makro definicija

To je oznaka za večkrat ponovljeno zaporedje programskih ukazov, ki se uporablja za sklicevanja v besedilu programa.

Definicija makra ima naslednjo strukturo:

Seznam izrazov; Makro definicija

V dani strukturi makrodefinicije lahko ločimo tri dele:

● naslov

makro, vključno z imenom

Psevdo ukaz

in nabor parametrov;

● označeno s pikami telo makro;

● ekipa

matura

makro definicije.

Nabor parametrov definicije makra vsebuje seznam vseh parametrov, podanih v polju operanda za izbrano skupino ukazov. Če so bili ti parametri podani prej v programu, jih ni treba navesti v glavi definicije makra.

Za ponovno sestavljanje izbrane skupine ukazov se uporabi poziv, sestavljen iz imena

makro ukazi in seznam parametrov z drugimi vrednostmi.

Ko sestavljalnik med postopkom prevajanja naleti na definicijo makra, jo shrani v tabelo z definicijami makra. Ob poznejših pojavitvah v programu imena (

) makra, ga sestavljalnik nadomesti s telesom makra.

Pokliče se uporaba imena makra kot opcijske kode makroobrat(makro klic), in ga zamenjate s telesom makra - makro širitev.

Če je program predstavljen kot zaporedje znakov (črke, številke, presledki, ločila in znaki za premik v novo vrstico), je razširitev makra sestavljena iz zamenjave nekaterih verig iz tega zaporedja z drugimi verigami.

Makro razširitev se pojavi med postopkom sestavljanja, ne med izvajanjem programa. Dodeljene so metode za manipuliranje z nizi znakov makro pomeni.

Postopek montaže je izveden v dveh prehodih:

● Pri prvem prehodu se ohranijo vse definicije makrov, klici makrov pa se razširijo. V tem primeru se izvirni program prebere in pretvori v program, v katerem so odstranjene vse definicije makra, vsak klic makra pa je nadomeščen s telesom makra;

● drugi prehod obdela dobljeni program brez makrov.

Makri s parametri.

Za delo s ponavljajočimi se zaporedji ukazov, katerih parametri lahko imajo različne vrednosti, so na voljo definicije makrov:

● z dejansko parametri, ki so postavljeni v polje operanda klica makra;

● z formalno parametri. Med razširitvijo makra se vsak formalni parameter, ki se pojavi v telesu makra, nadomesti z ustreznim dejanskim parametrom.

z uporabo makrov s parametri.

Program 1 vsebuje dve podobni zaporedji ukazov, ki se razlikujeta po tem, da prvi zamenja P in

In drugo

Program 2 vključuje makro z dvema formalnima parametroma P1 in P2. Med razširitvijo makra se vsak znak P1 v telesu makra nadomesti s prvim dejanskim parametrom (P,

), simbol P2 pa se nadomesti z drugim dejanskim parametrom (

) iz programa št. 1. V klicu makra

program 2 je označen: P,

Prvi dejanski parameter,

Drugi dejanski parameter.

Program 1

Program 2

MOV EBX,Q MOV EAX,Pl

MOV Q,EAX MOV EBX,P2

MOV P,EBX MOV P2,EAX

Razširjene zmogljivosti.

Oglejmo si nekaj naprednih jezikovnih funkcij

Če je makro, ki vsebuje ukaz za pogojni skok in oznako, na katero je treba skočiti, poklican dvakrat ali večkrat, bo oznaka podvojena (težava s podvojeno oznako), kar bo povzročilo napako. Zato vsak klic dodeli ločeno oznako kot parameter (s strani programerja). V jeziku

oznaka je razglašena za lokalno (

) in zahvaljujoč naprednim zmožnostim asembler samodejno ustvari drugačno oznako vsakič, ko je makro razširjen.

omogoča definiranje makrov znotraj drugih makrov. Ta napredna funkcija je zelo uporabna v kombinaciji s pogojnim povezovanjem programa. Razmislimo

IF WORDSIZE GT 16 M2 MACRO

Makro M2 je mogoče definirati v obeh delih izjave

Vendar pa je definicija odvisna od tega, na katerem procesorju je program sestavljen: 16-bitnem ali 32-bitnem. Če M1 ni poklican, potem makro M2 sploh ne bo definiran.

Druga napredna funkcija je, da lahko makri kličejo druge makre, vključno s samim seboj - rekurzivno klic. V slednjem primeru mora makro, da se izogne ​​neskončni zanki, sam sebi posredovati parameter, ki se spremeni z vsako razširitvijo, in tudi preverite ta parameter in konča rekurzijo, ko parameter doseže določeno vrednost.

O uporabi makro sredstev v asemblerju.

Pri uporabi makrov mora biti sestavljalnik sposoben izvajati dve funkciji: shrani definicije makrov in razširiti makro izzive.

Shranjevanje definicij makrov.

Vsa imena makrov so shranjena v tabeli. Vsako ime spremlja kazalec na ustrezni makro, tako da ga je mogoče po potrebi priklicati. Nekateri sestavljalniki imajo ločeno tabelo za imena makrov, drugi imajo splošno tabelo, v kateri so poleg imen makrov tudi vsa strojna navodila in direktive.

Ko med sestavljanjem naletite na makro je ustvarjen:

nov element tabele z imenom makra, številom parametrov in kazalcem na drugo tabelo definicij makra, kjer bo shranjeno telo makra;

● seznam formalno parametri.

Telo makra, ki je preprosto niz znakov, se nato prebere in shrani v tabeli definicij makra. Označeni so formalni parametri, ki se pojavljajo v telesu zanke poseben značaj.

Notranja predstavitev makra

iz zgornjega primera za program 2 (str. 244) je:

MOV EAX, MOV EBX, MOV MOV &

kjer se podpičje uporablja kot znak za vrnitev v začetni začetek, ampersand & pa kot formalni znak parametra.

Razširitev makro klicev.

Kadar koli med sestavljanjem naletite na definicijo makra, je shranjena v tabeli makra. Ko je makro poklican, sestavljalnik začasno preneha brati vhodne podatke iz vhodne naprave in začne brati shranjeno telo makra. Formalni parametri, ekstrahirani iz telesa makra, so nadomeščeni z dejanskimi parametri in zagotovljeni s klicem. Parametra & pred in asemblerju omogočata, da jih prepozna.

Kljub dejstvu, da obstaja veliko različic asemblerja, imajo postopki sestavljanja skupne značilnosti in so si v marsičem podobni. Delovanje dvoprehodnega sestavljalnika je obravnavano spodaj.

Dvohodni sestavljalnik.

Program je sestavljen iz številnih stavkov. Zato se zdi, da lahko pri sestavljanju uporabite naslednje zaporedje dejanj:

● prevesti v strojni jezik;

● prenesite dobljeno strojno kodo v datoteko in ustrezen del listinga v drugo datoteko;

● ponavljajte navedene postopke, dokler ni preveden celoten program.

Vendar ta pristop ni učinkovit. Primer je tako imenovana težava povezava naprej.Če je prvi stavek skok na stavek P, ki se nahaja na samem koncu programa, ga asembler ne more prevesti. Najprej mora določiti naslov operaterja P, za to pa mora prebrati celoten program. Pokliče se vsako popolno branje izvornega programa prehod. Pokažimo, kako lahko rešite problem povezave lookahead z uporabo dveh prehodov:

ob prvem prehodu bi morali zbirati in shrani vse definicije simbolov (vključno z oznakami) v tabelo, pri drugem prehodu pa preberi in sestavi vsak operator. Ta metoda je relativno preprosta, vendar drugi prehod skozi izvirni program zahteva dodaten čas, porabljen za V/I operacije;

● pri prvem prehodu bi morali Pretvorba program v vmesno obliko in ga shranimo v tabelo, drugi prehod pa izvedemo ne po prvotnem programu, temveč po tabeli. Ta način sestavljanja prihrani čas, saj drugi prehod ne izvaja V/I operacij.

Prvi prehod.

Gol s prvo podajo- sestavite tabelo simbolov. Kot je navedeno zgoraj, je drugi cilj prvega prehoda ohraniti vse definicije makrov in razširiti klice, ko se pojavijo. Posledično se tako definicija simbola kot razširitev makra zgodita v enem prehodu. Simbol je lahko bodisi etiketa, oz pomen, ki mu je določeno ime dodeljeno z uporabo direktive -you:

;Vrednost - velikost medpomnilnika

Z dodeljevanjem pomena simbolnim imenom v polju z oznako ukaza sestavljalnik v bistvu določa naslove, ki jih bo imel vsak ukaz med izvajanjem programa. V ta namen sestavljalec med postopkom sestavljanja shrani števec naslovov navodil(

) kot posebna spremenljivka. Na začetku prvega prehoda je vrednost posebne spremenljivke nastavljena na 0 in se po vsakem obdelanem ukazu poveča za dolžino tega ukaza. Kot primer v tabeli. 5.2.3 prikazuje fragment programa, ki označuje dolžino ukazov in vrednosti števca. Ob prvem prehodu se generirajo tabele simbolna imena, direktive in kode delovanja, in če je potrebno dobesedno tabela. Literal je konstanta, za katero asembler samodejno rezervira pomnilnik. Naj takoj opozorimo, da sodobni procesorji vsebujejo navodila s takojšnjimi naslovi, zato njihovi sestavljalci ne podpirajo literalov.

Tabela imen simbolov

vsebuje en element za vsako ime (tabela 5.2.4). Vsak element tabele simboličnih imen vsebuje samo ime (ali kazalec nanj), njegovo številsko vrednost in včasih nekaj dodatnih informacij, ki lahko vključujejo:

● dolžina podatkovnega polja, povezanega s simbolom;

● biti za ponovno dodelitev pomnilnika (ki kažejo, ali se vrednost simbola spremeni, če je program naložen na drugem naslovu, kot je nameraval asembler);

● informacije o tem, ali je do simbola mogoče dostopati izven postopka.

Simbolična imena so oznake. Določite jih lahko z operatorji (npr.

Direktivna tabela.

Ta tabela navaja vse direktive ali psevdoukaze, na katere naletite pri sestavljanju programa.

Kodna tabela operacij.

Za vsako kodo operacije ima tabela ločene stolpce: oznaka kode operacije, operand 1, operand 2, šestnajstiška vrednost kode operacije, dolžina ukaza in tip ukaza (tabela 5.2.5). Kode operacij so razdeljene v skupine glede na število in vrsto operandov. Tip ukaza določa številko skupine in podaja proceduro, ki se kliče za obdelavo vseh ukazov v tej skupini.

Drugi prehod.

Gol druge podaje- izdelava objektnega programa in tiskanje po potrebi protokola sestavljanja; izhodne informacije, ki jih povezovalec potrebuje za povezovanje postopkov, ki so bili sestavljeni ob različnih časih v eno izvršljivo datoteko.

V drugem prehodu (kot v prvem) se vrstice, ki vsebujejo izjave, preberejo in obdelajo ena za drugo. Prvotni operator in iz njega izpeljan izhodni operator v šestnajstiški obliki predmet Kodo lahko natisnete ali postavite v medpomnilnik za kasnejše tiskanje. Po ponastavitvi števca naslovov ukaza se ukaz pokliče naslednja izjava.

Izvorni program lahko vsebuje napake, na primer:

dani simbol ni definiran ali je definiran večkrat;

● operacijska koda je predstavljena z neveljavnim imenom (zaradi tipkarske napake), nima dovolj operandov ali ima preveč operandov;

● brez operaterja

Nekateri sestavljalci lahko zaznajo nedefiniran simbol in ga zamenjajo. Vendar pa v večini primerov, ko naleti na izjavo o napaki, sestavljalnik na zaslonu prikaže sporočilo o napaki in poskuša nadaljevati postopek sestavljanja.

Članki, posvečeni zbirnemu jeziku.

Tema 2.5 Osnove programiranja procesorja

Z večanjem dolžine programa si je vse težje zapomniti kode različnih operacij. Mnemotehnika nudi nekaj pomoči pri tem.

Pokliče se jezik kodiranja simbolnih ukazov sestavljalec.

Zbirni jezik je jezik, v katerem vsaka izjava ustreza točno enemu strojnemu ukazu.

Montaža imenovano pretvorba programa iz zbirnega jezika, tj. priprava programa v strojnem jeziku z zamenjavo simbolnih imen operacij s strojnimi kodami in simbolnih naslovov z absolutnimi ali relativnimi številkami, kot tudi vključitev knjižničnih programov in generiranje zaporedij simbolnih navodil z določanjem specifičnih parametrov v mikroekipah. Ta program se običajno nahaja v ROM-u ali vnese v RAM z zunanjega medija.

Zbiralni jezik ima več lastnosti, po katerih se razlikuje od jezikov na visoki ravni:

1. To je ujemanje ena proti ena med stavki zbirnega jezika in strojnimi navodili.

2. Programer v zbirnem jeziku ima dostop do vseh objektov in navodil, ki so prisotna na ciljnem stroju.

Razumevanje osnov programiranja v strojno usmerjenih jezikih je koristno za:



Boljše razumevanje arhitekture osebnih računalnikov in kompetentnejša uporaba računalnikov;

Razviti bolj racionalne strukture algoritmov za programe za reševanje aplikativnih problemov;

Možnost ogleda in popravljanja izvršljivih programov s pripono .exe in .com, prevedenih iz katerega koli jezika na visoki ravni, v primeru izgube izvornih programov (s klicem določenih programov v razhroščevalniku programa DEBUG in dekompilacijo njihovega prikaza v sestavu jezik);

Prevajanje programov za reševanje najbolj kritičnih problemov (program, napisan v strojno orientiranem jeziku, je običajno bolj učinkovit - krajši in hitrejši za 30-60 odstotkov programov, pridobljenih kot rezultat prevajanja iz visokonivojskih jezikov)

Za izvajanje postopkov, ki so vključeni v glavni program v obliki ločenih fragmentov, če jih ni mogoče izvajati bodisi v uporabljenem jeziku na visoki ravni bodisi z uporabo servisnih postopkov OS.

Program v zbirnem jeziku se lahko izvaja samo na eni družini računalnikov, medtem ko se lahko program, napisan v jeziku visoke ravni, izvaja na različnih strojih.

Abeceda zbirnega jezika je sestavljena iz znakov ASCII.

Števila so samo cela števila. Obstajajo:

Dvojiška števila se končajo s črko B;

Decimalne številke, ki se končajo s črko D;

Šestnajstiška števila se končajo s črko H.

RAM, registri, predstavitev podatkov

Za določeno serijo MP se uporablja posamezen programski jezik - zbirni jezik.

Zbirni jezik zavzema vmesni položaj med strojnimi kodami in jeziki na visoki ravni. Programiranje v tem jeziku je lažje. Program v zbirnem jeziku učinkoviteje izkorišča zmožnosti določenega stroja (natančneje MP) kot program v visokonivojskem jeziku (ki je za programerja enostavnejši od asemblerja). Oglejmo si osnovna načela programiranja v strojno usmerjenih jezikih na primeru zbirnega jezika za MP KR580VM80. Za programiranje v jeziku se uporablja splošna metodologija. Specifične tehnične tehnike snemanja programov so povezane z značilnostmi arhitekture in ukaznega sistema ciljnega MP.

Model programske opreme mikroprocesorski sistem na osnovi MP KR580VM80

Programski model MPS v skladu s sliko 1

MP Ports Memory

S Z A.C. p C

Slika 1

Z vidika programerja ima MP KR580VM80 naslednje programsko dostopne registre.

A– 8-bitni akumulatorski register. Je glavni register MP. Vsaka operacija, izvedena v ALU, vključuje namestitev enega od operandov, ki jih je treba obdelati, v akumulator. Rezultat operacije v ALU je običajno shranjen tudi v A.

B, C, D, E, H, L– 8-bitni registri splošnega namena (GPR). Notranji spomin MP. Zasnovan za shranjevanje obdelanih informacij in rezultatov operacije. Pri obdelavi 16-bitnih besed registri tvorijo pare BC, DE, HL, dvojni register pa se imenuje prva črka - B, D, H. V registrskem paru je najvišji prvi register. Registra H in L imata posebno lastnost, ki se uporabljata tako za shranjevanje podatkov kot za shranjevanje 16-bitnih naslovov celic RAM.

FL– zastavični register (sign register) 8-bitni register, v katerem je shranjenih pet znakov rezultata izvajanja aritmetičnih in logičnih operacij v MP. FL format glede na sliko

Bit C (CY - prenos) - prenos, nastavljen na 1, če je med izvajanjem aritmetičnih operacij prišlo do prenosa iz višjega reda bajta.

Bit P (parnost) – pariteta, nastavljena na 1, če je število enic v bitih rezultata sodo.

Števka AC je dodaten prenos, namenjen shranjevanju prenosne vrednosti iz tetrade nizkega reda rezultata.

Bit Z (nič) – nastavljen na 1, če je rezultat operacije 0.

Bit S (predznak) – je nastavljen na 1, če je rezultat negativen, in na 0, če je rezultat pozitiven.

SP– kazalec sklada, 16-bitni register, zasnovan za shranjevanje naslova pomnilniške celice, kamor je bil zapisan zadnji bajt, vstavljen v sklad.

RS– programski števec (programski števec), 16-bitni register, namenjen shranjevanju naslova naslednjega ukaza, ki ga je treba izvesti. Vsebina programskega števca se samodejno poveča za 1 takoj po pridobitvi naslednjega ukaznega bajta.

Začetno pomnilniško območje naslova 0000Н – 07FF vsebuje nadzorni program in predstavitvene programe. To je območje ROM.

0800 – 0AFF - naslovno območje za snemanje preučevanih programov. (OVEN).

0В00 – 0ВВ0 - naslovno območje za pisanje podatkov. (OVEN).

0ВВ0 je začetni naslov sklada. (OVEN).

Sklad je posebej organizirano območje RAM-a, namenjeno začasnemu shranjevanju podatkov ali naslovov. Zadnja številka, zapisana v sklad, se najprej izloči. Kazalec sklada shrani naslov zadnje celice sklada, v kateri so zapisane informacije. Ob klicu podprograma se povratni naslov glavnega programa samodejno shrani na sklad. Praviloma se na začetku vsakega podprograma vsebine vseh registrov, ki sodelujejo pri njegovem izvajanju, shranijo na sklad, na koncu podprograma pa se obnovijo iz sklada.

Format podatkov in ukazna struktura zbirnega jezika

Pomnilnik MP KR580VM80 je niz 8-bitnih besed, imenovanih bajti.Vsak bajt ima svoj 16-bitni naslov, ki določa njegov položaj v zaporedju pomnilniških celic. MP lahko naslovi 65536 bajtov pomnilnika, ki je lahko v ROM-u in RAM-u.

Format podatkov

Podatki so shranjeni v pomnilniku kot 8-bitne besede:

D7 D6 D5 D4 D3 D2 D1 D0

Najmanj pomemben bit je bit 0, najpomembnejši bit je bit 7.

Za ukaz je značilen njegov format, to je število zanj dodeljenih bitov, ki so bajt za bajtom razdeljeni v določena funkcijska polja.

Oblika ukaza

Ukazi MP KR580VM80 imajo eno-, dvo- ali tribajtno obliko. Večbajtni ukazi morajo biti postavljeni v sosednje jezike. Oblika ukaza je odvisna od posebnosti operacije, ki se izvaja.

Prvi bajt ukaza vsebuje operacijsko kodo, zapisano v mnemonični obliki.

Določa obliko ukaza in dejanja, ki jih mora izvesti MP nad podatki med njegovim izvajanjem, ter način naslavljanja, lahko pa vsebuje tudi informacijo o lokaciji podatkov.

Drugi in tretji bajt lahko vsebujeta podatke o tem, katere operacije se izvajajo, ali naslove, ki označujejo lokacijo podatkov. Podatki, na katerih se izvajajo dejanja, se imenujejo operandi.

Enobajtni ukazni format v skladu s sliko 2

Slika 4

V ukazih zbirnega jezika ima operacijska koda skrajšano obliko pisanja angleških besed - mnemonični zapis. Mnemotehnika (iz grščine mnemonic - umetnost pomnjenja) omogoča lažje pomnjenje ukazov po njihovem funkcionalnem namenu.

Izvorni program se pred izvedbo prevede s prevajalskim programom imenovanim asembler v jezik kodnih kombinacij – strojni jezik, v tej obliki se namesti v pomnilnik MP in se nato uporabi pri izvajanju ukaza.


Metode naslavljanja

Vse kode operandov (vhodne in izhodne) se morajo nekje nahajati. Lahko se nahajajo v internih registrih MP (najbolj priročno in hitra možnost). Lahko se nahajajo v sistemski pomnilnik(najpogostejša možnost). Končno se lahko nahajajo v V/I napravah (najredkejši primer). Lokacija operandov je določena z ukazno kodo. obstajati različne metode, s katerim lahko ukazna koda določi, kje vzeti vhodni operand in kam postaviti izhodni operand. Te metode se imenujejo metode naslavljanja.

Za MP KR580VM80 obstajajo naslednji načini naslavljanja:

neposredno;

Registracija;

posredno;

Zloženo.

Neposredno naslavljanje predpostavlja, da se (vhodni) operand nahaja v pomnilniku takoj za kodo ukaza. Operand je običajno konstanta, ki jo je treba nekam poslati, nečemu dodati itd. podatki so vsebovani v drugem ali drugem in tretjem bajtu ukaza, pri čemer se spodnji bajt podatkov nahaja v drugem bajtu ukaza, in visoki bajt v tretjem ukaznem bajtu.

Naravnost (aka absolutno) naslavljanje predpostavlja, da se operand (vhod ali izhod) nahaja v pomnilniku na naslovu, katerega koda se nahaja znotraj programa takoj za kodo ukaza. Uporablja se v tribajtnih ukazih.

Registrirajte se naslavljanje predpostavlja, da je operand (vhod ali izhod) v notranjem registru MP. Uporablja se v enobajtnih ukazih

posredno (Implicitno) naslavljanje predpostavlja, da notranji register MP ne vsebuje samega operanda, temveč njegov naslov v pomnilniku.

Stack naslavljanje predpostavlja, da ukaz ne vsebuje naslova. Naslavljanje pomnilniških celic z uporabo vsebine 16-bitnega registra SP (kazalec sklada).

Komandni sistem

Sistem ukazov MP je popoln seznam osnovnih dejanj, ki jih je MP sposoben izvesti. MP, ki ga nadzirajo ti ukazi, izvaja preprosta dejanja, kot so elementarne aritmetične in logične operacije, prenos podatkov, primerjava dveh vrednosti itd. Število ukazov MP KR580VM80 je 78 (ob upoštevanju sprememb 244).

Ločimo naslednje skupine ukazov:

Prenos podatkov;

Aritmetika;

Uganka;

Ukazi za skok;

Ukazi za vhod/izhod, nadzor in sklad.


Simboli in okrajšave, ki se uporabljajo pri opisovanju ukazov in sestavljanju programov

Simbol Zmanjšanje
NASLOV 16-bitni naslov
PODATKI 8-bitni podatki
PODATKI 16 16-bitni podatki
PORT 8-bitni naslov V/I naprave
BAJT 2 Drugi bajt ukaza
BAJT 3 Tretji bajt ukaza
R, R1, R2 Eden od registrov: A, B, C, D, E, H, L
R.P. Eden od registrskih parov: B - določa par BC; D - določa par DE; H – določa par HL
RH Prvi register para
R.L. Drugi register para
Λ Logično množenje
V Logičen dodatek
Seštevanje po modulu dva
M Pomnilniška celica, katere naslov določa vsebino registrskega para HL, tj. M = (HL)

1. Arhitektura osebnega računalnika………………………………………………………………………………5

    1.1. Registri.

    1.1.1 Splošni registri.

1.1.2. Segmentni registri

1.1.3 Register zastav

1.2. Organizacija spomina.

1.3. Predstavitev podatkov.

1.3.1 Vrste podatkov

1.3.2 Predstavitev znakov in nizov

2. Programski stavki v asemblerju ……………………………………

    1. Ukazi zbirnega jezika

2.2. Načini naslavljanja in formati strojnih navodil

3. Psevdooperatorji………………………………………………………….

3.1 Direktive o definiciji podatkov

3.2 Struktura asemblerskega programa

3.2.1 Programski segmenti. prevzeti direktivo

3.2.3 Direktiva o poenostavljeni segmentaciji

4. Sestavljanje in sestavljanje programa ………………………….

5. Ukazi za prenos podatkov…………………………………………….

    5.1 Splošni ukazi

    5.2 Ukazi sklada

5.3 V/I ukazi

5.4 Ukazi za posredovanje naslovov

5.5 Ukazi za posredovanje zastavic

6. Aritmetični ukazi…………………………………………….

    6.1 Aritmetične operacije nad binarnimi celimi števili

6.1.1 Seštevanje in odštevanje

6.1.2 Ukazi za povečanje in zmanjšanje sprejemnika za eno

6.2 Množenje in deljenje

6.3 Sprememba predznaka

7. Logične operacije…………………………………………….

8. Premiki in ciklični premiki…………………………………………………………

9. Operacije nizov………………………………………………………….

10. Logika in organizacija programov……………………………………

10.1 Brezpogojni skoki

10.2 Pogojni skoki

10.4 Postopki v zbirnem jeziku

10.5 Prekinitve INT

10.6 Sistemska programska oprema

10.6.1.1 Branje s tipkovnice.

10.6.1.2 Prikaz znakov na zaslonu

10.6.1.3 Končanje programov.

10.6.2.1 Izbira načinov prikaza

11. Diskovni pomnilnik…………………………………………………………………..

11.2 Tabela porazdelitve datotek

11.3 V/I operacije diska

11.3.1 Zapisovanje datoteke na disk

11.3.1.1 Podatki ASCIIZ

11.3.1.2 Številka datoteke

11.3.1.3 Ustvarjanje diskovne datoteke

11.3.2 Branje diskovne datoteke

Uvod

Zbirni jezik je simbolna predstavitev strojnega jezika. Vse procese v osebnem računalniku (PC) na najnižji ravni strojne opreme poganjajo le ukazi (navodila) strojnega jezika. Nemogoče je resnično rešiti probleme, povezane s strojno opremo (ali celo, poleg tega, odvisne od strojne opreme, kot je povečanje hitrosti programa), brez znanja asemblerja.

Asembler je priročna oblika ukazov neposredno za komponente osebnega računalnika in zahteva poznavanje lastnosti in zmogljivosti integriranega vezja, ki vsebuje te komponente, namreč mikroprocesorja osebnega računalnika. Tako je zbirni jezik neposredno povezan z notranjo organizacijo osebnega računalnika. In ni naključje, da skoraj vsi visokonivojski prevajalniki jezikov podpirajo dostop do ravni sestavljanja programiranja.

Element usposabljanja profesionalnega programerja je nujno študij monterja. To je zato, ker programiranje v zbirnem jeziku zahteva poznavanje arhitekture osebnega računalnika, kar vam omogoča ustvarjanje učinkovitejših programov v drugih jezikih in njihovo kombiniranje s programi v zbirnem jeziku.

Priročnik obravnava programiranje v zbirnem jeziku za računalnike, ki temeljijo na mikroprocesorjih Intel.

Ta vadnica je namenjena vsem, ki jih zanima arhitektura procesorja in osnove programiranja v jeziku Assembly, predvsem razvijalcem programskih izdelkov.

    Arhitektura osebnega računalnika.

Računalniška arhitektura je abstraktna predstavitev računalnika, ki odraža njegovo strukturno, vezno in logično organizacijo.

Vsi sodobni računalniki imajo nekaj skupnih in individualnih arhitekturnih lastnosti. Posamezne lastnosti so edinstvene za določen model računalnika.

Koncept računalniške arhitekture vključuje:

    računalniški blokovni diagram;

    sredstva in metode dostopa do elementov računalniškega blokovnega diagrama;

    nabor in razpoložljivost registrov;

    organizacija in načini naslavljanja;

    način predstavitve in format računalniških podatkov;

    komplet računalniških strojnih navodil;

    formati strojnih navodil;

    obravnavanje prekinitev.

Glavni elementi računalniške strojne opreme: sistemska enota, tipkovnica, prikazovalne naprave, diskovni pogoni, tiskalne naprave (tiskalnik) in različna komunikacijska oprema. Sistemska enota sestoji iz osnovne plošče, napajalnika in razširitvenih celic za dodatne kartice. Sistemska plošča vsebuje mikroprocesor, bralni pomnilnik (ROM), Oven(RAM) in koprocesor.

      Registri.

Znotraj mikroprocesorja so informacije vsebovane v skupini 32 registrov (16 uporabniških, 16 sistemskih), v eni ali drugi meri na voljo za uporabo programerju. Ker je priročnik namenjen programiranju za mikroprocesor 8088-i486, je najbolj logično, da to temo začnemo z razpravo o notranjih registrih mikroprocesorja, ki so dostopni uporabniku.

Registre uporabnikov uporablja programer za pisanje programov. Ti registri vključujejo:

    osem 32-bitnih registrov (registri splošnega namena) EAX/AX/AH/AL, EBX/BX/BH/BL, ECX/CX/CH/CL, EDX/DX/DLH/DL, EBP/BP, ESI/SI, EDI/DI, ESP/SP;

    šest 16-bitnih segmentnih registrov: CS, DS, SS, ES, FS, GS;

    statusni in kontrolni registri: register zastavic EFLAGS/FLAGS in register kazalca ukazov EIP/IP.

Deli enega 32-bitnega registra so označeni s poševnico. Predpona E (razširjeno) označuje uporabo 32-bitnega registra. Za delo z bajti se uporabljajo registri s predponami L (nizki) in H (visoki), na primer AL, CH - označujejo nizke in visoke bajte 16-bitnih delov registrov.

        Splošni registri.

EAX/AX/AH/AL (akumulatorski register) – baterijo. Uporablja se pri množenju in deljenju, v V/I operacijah in v nekaterih operacijah nizov.

EBX/BX/BH/BL – osnovni register(bazni register), ki se pogosto uporablja pri naslavljanju podatkov v pomnilniku.

ECX/CX/CH/CL – števec(count register), ki se uporablja kot števec za število ponovitev zanke.

EDX/DX/DH/DL – register podatkov(data register), ki služi za shranjevanje vmesnih podatkov. V nekaterih ekipah je njegova uporaba obvezna.

Vsi registri v tej skupini omogočajo dostop do svojih "nižjih" delov. Samo spodnji 16- in 8-bitni deli teh registrov se lahko uporabljajo za samonaslavljanje. Zgornjih 16 bitov teh registrov ni na voljo kot neodvisni objekti.

Za podporo ukazom za obdelavo nizov, ki omogočajo zaporedno obdelavo verig elementov z dolžino 32, 16 ali 8 bitov, se uporabljajo naslednji:

ESI/SI (izvorni indeksni register) – kazalo vir. Vsebuje naslov trenutnega izvornega elementa.

EDI/DI (ciljni indeksni register) – kazalo sprejemnik(prejemnik). Vsebuje trenutni naslov v ciljni vrstici.

V mikroprocesorski arhitekturi je podatkovna struktura – sklad – podprta na strojni in programski ravni. Za delo s skladom obstajajo posebna navodila in posebni registri. Upoštevati je treba, da se sklad polni proti manjšim naslovom.

ESP/SP (register kazalca sklada) – register kazalec kup. Vsebuje kazalec na vrh sklada v trenutnem segmentu sklada.

EBP/BP (osnovni kazalec register) – register osnovnega kazalca sklada. Zasnovan za organiziranje naključnega dostopa do podatkov znotraj sklada.

1.1.2. Segmentni registri

Model mikroprocesorske programske opreme ima šest segmentni registri: CS, SS, DS, ES, GS, FS. Njihov obstoj je posledica posebne organizacije in uporabe RAM-a s strani mikroprocesorjev Intel. Mikroprocesorska strojna oprema podpira strukturno organizacijo programa, sestavljenega iz segmenti. Za označevanje segmentov, ki so na voljo v ta trenutek so namenjeni segmentni registri. Mikroprocesor podpira naslednje vrste segmentov:

    Segment kode. Vsebuje programske ukaze. Za dostop do tega segmenta uporabite register CS (register kodnega segmenta) - kodni register segmentov. Vsebuje naslov segmenta strojnih ukazov, do katerega ima mikroprocesor dostop.

    Segment podatkov. Vsebuje podatke, ki jih obdeluje program. Za dostop do tega segmenta uporabite register DS (data segment register) - register segmentnih podatkov, ki hrani naslov podatkovnega segmenta trenutnega programa.

    Segment sklada. Ta segment je območje pomnilnika, imenovano sklad. Mikroprocesor organizira sklad po principu - prvi notri, prvi ven. Za dostop do sklada uporabite register SS (register segmentov sklada) - register segmentov sklada, ki vsebuje naslov segmenta sklada.

    Segment dodatnih podatkov. Obdelani podatki se lahko nahajajo v treh dodatnih podatkovnih segmentih. Privzeto se domneva, da so podatki v segmentu podatkov. Pri uporabi dodatnih podatkovnih segmentov je treba njihove naslove izrecno podati z uporabo posebnih predpon za preglasitev segmentov v ukazu. Naslovi dodatnih podatkovnih segmentov morajo biti vsebovani v registrih ES, GS, FS (razširitveni podatkovni segmentni registri).

        Nadzorni in statusni registri

Mikroprocesor vsebuje več registrov, ki vsebujejo informacije o stanju samega mikroprocesorja in programa, katerega ukazi so trenutno naloženi v cevovod. to:

Register kazalca ukazov EIP/IP;

    register zastav EFLAGS/ZASTAVE.

Z uporabo teh registrov lahko pridobite informacije o rezultatih izvajanja ukazov in vplivate na stanje samega mikroprocesorja.

EIP/IP (instruction POINTer register) – kazalec ekipe. Register EIP/IP je širok 32 ali 16 bitov in vsebuje odmik naslednjega ukaza, ki ga je treba izvesti glede na vsebino registra segmenta CS v trenutnem segmentu ukaza. Ta register ni neposredno dostopen, lahko pa ga spremenite z navodili za skok.

EFLAGS/FLAGS (register zastav) – register zastave. Velikost bitov 32/16 bitov. Posamezni biti tega registra imajo določen funkcionalni namen in se imenujejo zastavice. Zastavica je bit, ki ima vrednost 1 ("zastavica nastavljena"), če je izpolnjen nek pogoj, v nasprotnem primeru pa vrednost 0 ("zastavica počiščena"). Spodnji del tega registra je popolnoma podoben registru FLAGS za i8086.

1.1.3 Register zastav

Register zastavic je 32-bitni in se imenuje EFLAGS (slika 1). Posamezni biti registra imajo določen funkcionalni namen in se imenujejo zastavice. Vsakemu od njih je dodeljeno določeno ime (ZF, CF itd.). Nižjih 16 bitov EFLAGS predstavlja 16-bitni register zastavic FLAGS, ki se uporablja pri izvajanju programov, napisanih za mikroprocesorja i086 in i286.

Slika 1 Register zastavic

Nekatere zastavice se običajno imenujejo zastavice pogojev; samodejno se spreminjajo, ko se ukazi izvajajo, in beležijo določene lastnosti njihovega rezultata (na primer, ali je enak nič). Druge zastave se imenujejo državne; spreminjajo se iz programa in vplivajo na nadaljnje obnašanje procesorja (npr. blokirajo prekinitve).

Oznake pogojev:

CF (nosilna zastavica) - nositi zastavo. Zavzame vrednost 1, če se je pri seštevanju celih števil pojavila nosilna enota, ki se ne »prilega« v bitno mrežo, ali če je bilo pri odštevanju nepredznačenih števil prvo manjše od drugega. Pri ukazih za premik se bit, ki je zunaj bitne mreže, vnese v CF. CF zajame tudi značilnosti ukaza množenja.

OF (prelivna zastavica) - zastavica za prelivanje. Nastavimo na 1, če pri seštevanju ali odštevanju celih števil s predznakom dobimo rezultat, ki absolutno presega dovoljeno vrednost (prelila se je mantisa in je »zlezla« v predznačno števko).

ZF (ničelna zastavica) - ničelna zastavica. Nastavite na 1, če je rezultat ukaza 0.

SF (znak zastave) - zastava znak. Nastavite na 1, če operacija s predpisanimi številkami povzroči negativen rezultat.

PF (zastavica paritete) - zastava pariteta. Enako 1, če rezultat naslednjega ukaza vsebuje sodo število binarnih enic. Običajno se upošteva samo za V/I operacije.

AF (pomožna nosilna zastavica) - dodatna nosilna zastavica. Popravi funkcije izvajanja operacij na binarnih decimalnih številih.

Državne zastave:

DF (smerna zastavica) - smerna zastavica. Nastavi smer za ogled vrstic v vrstičnih ukazih: ko je DF=0, se vrstice gledajo "naprej" (od začetka do konca), ko je DF=1 - v nasprotni smeri.

IOPL (vhodno/izhodna raven privilegijev) – V/I raven privilegijev. Uporablja se v zaščitenem načinu delovanja mikroprocesorja za nadzor dostopa do V/I ukazov, odvisno od privilegija naloge.

NT (ugnezdena naloga) – zastavica gnezdenja opravila. Uporablja se v zaščitenem načinu delovanja mikroprocesorja za beleženje dejstva, da je ena naloga ugnezdena v drugo.

Sistemska zastavica:

ČE (zastavica INterrupt) - prekinitvena zastavica. Ko je IF=0, se procesor neha odzivati ​​na dohodne prekinitve; ko je IF=1, se blokiranje prekinitev odstrani.

TF (trap zastavica) - zastavica za sledenje. Ko je TF=1, procesor po izvedbi vsakega ukaza izvede prekinitev (oštevilčeno z 1), ki jo je mogoče uporabiti pri odpravljanju napak v programu za sledenje.

RF (zastavica za nadaljevanje) – zastavica za nadaljevanje. Uporablja se pri obdelavi prekinitev iz registrov za odpravljanje napak.

VM (virtualni način 8086) – virtualna zastava 8086. 1-procesor deluje v virtualnem načinu 8086. 0-procesor deluje v realnem ali zaščitenem načinu.

AC (preverjanje poravnave) – zastavica za nadzor poravnave. Zasnovan tako, da omogoča nadzor poravnave pri dostopu do pomnilnika.

      Organizacija spomina.

Kliče se fizični pomnilnik, do katerega ima dostop mikroprocesor OVEN ( ali pomnilnik z naključnim dostopom - OVEN). RAM je veriga bajtov, ki imajo svoj edinstven naslov (njegovo številko), imenovan fizično. Razpon vrednosti fizičnega naslova je od 0 do 4 GB. Mehanizem za upravljanje pomnilnika je v celoti strojen.

Mikroprocesorska strojna oprema podpira več modelov uporabe RAM-a:

    segmentirani model. V tem modelu je pomnilnik za programe razdeljen na sosednja pomnilniška področja (segmente), sam program pa lahko dostopa le do podatkov, ki se nahajajo v teh segmentih;

    model strani. V tem primeru se RAM obravnava kot niz blokov fiksne velikosti 4 KB. Glavna uporaba tega modela je povezana z organizacijo virtualni pomnilnik, ki programom omogoča uporabo več pomnilniškega prostora kot fizičnega pomnilnika. Za mikroprocesor Pentium lahko velikost možnega navideznega pomnilnika doseže 4 TB.

Uporaba in implementacija teh modelov je odvisna od načina delovanja mikroprocesorja:

    Pravi način naslova (pravi način). Način je podoben delovanju procesorja i8086. Potreben za delovanje programov, razvitih za zgodnje modele procesorjev.

    Zaščiten način. Zaščiten način vam omogoča večopravilnost obdelava informacij, zaščita pomnilnika z uporabo štirinivojskega mehanizma privilegijev in njegove ostranjevalne organizacije.

    Virtualni način 8086. V tem načinu je mogoče zagnati več programov za i8086. V tem primeru lahko delujejo programi v realnem načinu.

Segmentacija je mehanizem naslavljanja, ki zagotavlja obstoj več neodvisnih naslovnih prostorov. Segment je neodvisen, strojno podprt blok pomnilnika.

Vsak program je lahko na splošno sestavljen iz poljubnega števila segmentov, vendar ima neposreden dostop do treh glavnih: kode, podatkov in sklada - ter od enega do treh dodatnih segmentov podatkov. Operacijski sistem postavi programske segmente v RAM na določene fizične naslove in nato postavi vrednosti teh naslovov v ustrezne registre. Znotraj segmenta program dostopa do naslovov glede na začetek segmenta linearno, to je od naslova 0 do naslova, ki je enak velikosti segmenta. Sorodniški naslov oz pristranskost, ki ga mikroprocesor uporablja za dostop do podatkov znotraj segmenta, se imenuje učinkovito.

Oblikovanje fizičnega naslova v realnem načinu

V realnem načinu je obseg sprememb fizičnega naslova od 0 do 1 MB. Največja velikost segmenta je 64 KB. Pri stiku z določenim fizični naslov RAM je določen z naslovom začetka segmenta in odmikom znotraj segmenta. Začetni naslov segmenta je vzet iz ustreznega segmentnega registra. V tem primeru segmentni register vsebuje le najpomembnejših 16 bitov fizičnega naslova začetka segmenta. Manjkajoče spodnje štiri bite 20-bitnega naslova dobimo s premikom vrednosti segmentnega registra v levo za 4 bite. Operacija premika se izvede v strojni opremi. Dobljena 20-bitna vrednost je dejanski fizični naslov, ki ustreza začetku segmenta. To je fizični naslov je podana kot par "segment:offset", kjer je "segment" prvih 16 bitov začetnega naslova segmenta pomnilnika, ki mu celica pripada, "offset" pa je 16-bitni naslov te celice, šteto od začetek tega pomnilniškega segmenta (vrednost 16 * segment +offset daje absolutni naslov celice). Če na primer register CS shrani vrednost 1234h, potem naslovni par 1234h:507h definira absolutni naslov, ki je enak 16*1234h+507h =12340h+507h = 12847h. Tak par je zapisan kot dvojna beseda in (kot pri številkah) v "obrnjeni" obliki: prva beseda vsebuje odmik, druga pa segment, vsaka od teh besed pa je predstavljena v "obrnjeni" obliki. Na primer, par 1234h:5678h bi bil zapisan takole:| 78 | 56| 34 | 12|.

Ta mehanizem za generiranje fizičnega naslova omogoča, da je programska oprema premestljiva, to je neodvisna od določenih naslovov za nalaganje v RAM.

Programiranje na ravni strojnih ukazov je najnižja raven, na kateri je mogoče pisati programe. Sistem strojnih navodil mora zadostovati za izvajanje zahtevanih dejanj z izdajanjem navodil strojni opremi računalnika.

Vsak strojni ukaz je sestavljen iz dveh delov:

  • operativno - določanje, "kaj storiti";
  • operand - definiranje predmetov obdelave, "kaj storiti s."

Ukaz mikroprocesorskega stroja, napisan v zbirnem jeziku, je ena vrstica z naslednjo sintaktično obliko:

oznaka ukaza/navodila operand(i); komentarji

V tem primeru je obvezno polje v vrstici ukaz ali direktiva.

Oznaka, ukaz/naredba in operandi (če obstajajo) so ločeni z vsaj enim presledkom ali tabulatorjem.

Če je treba ukaz ali direktivo nadaljevati v naslednji vrstici, se uporabi poševnica nazaj: \.

Privzeto zbirni jezik pri pisanju ukazov ali direktiv ne razlikuje med velikimi in malimi črkami.

Primer vrstic kode:

Štej db 1 ;Ime, direktiva, en operand
mov eax,0 ;Ukaz, dva operanda
cbw ; Ekipa

Oznake

Oznaka v zbirnem jeziku lahko vsebuje naslednje simbole:

  • vse črke latinske abecede;
  • številke od 0 do 9;
  • posebni znaki: _, @, $, ?.

Piko lahko uporabite kot prvi znak oznake, vendar nekateri prevajalniki ne priporočajo uporabe tega znaka. Rezerviranih imen Assemblerja (direktiv, operaterjev, imen ukazov) ni mogoče uporabiti kot oznake.

Prvi znak v oznaki mora biti črka ali poseben znak (vendar ne številka). Največja dolžina oznake – 31 znakov. Vse oznake, ki so zapisane v vrstici, ki ne vsebuje direktive za sestavljalnik, se morajo končati z dvopičjem: .

Ekipe

Ekipa pove prevajalcu, katero dejanje naj izvede mikroprocesor. V podatkovnem segmentu ukaz (ali direktiva) definira polje, delovni prostor ali konstanto. V segmentu kode ukaz določa dejanje, kot je premikanje (mov) ali dodajanje (add).

direktive

Sestavljalnik ima številne operaterje, ki vam omogočajo nadzor nad procesom sestavljanja in seznama. Ti operaterji se imenujejo direktive . Delujejo samo med postopkom sestavljanja programa in za razliko od ukazov ne generirajo strojne kode.

Operandi

Operand – objekt, na katerem se izvede strojni ukaz ali stavek programskega jezika.
Navodilo ima lahko enega ali dva operanda ali pa sploh nima operandov. Število operandov je implicitno določeno s kodo ukaza.
Primeri:

  • Brez operandov ret ;Return
  • En operand inc ecx ;Povečaj ecx
  • Dva operanda seštejeta eax,12 ; Dodaj 12 v eax

Oznaki, ukazu (direktivi) in operandu ni treba začeti na nobenem določenem mestu v vrstici. Priporočljivo pa je, da jih zapišete v stolpec, da bo program lažje berljiv.

Operandi so lahko

  • identifikatorji;
  • nizi znakov v enojnih ali dvojnih narekovajih;
  • cela števila v dvojiškem, osmiškem, decimalnem ali šestnajstiškem številskem sistemu.
Identifikatorji

Identifikatorji – zaporedja veljavnih znakov, ki se uporabljajo za označevanje programskih objektov, kot so operacijske kode, imena spremenljivk in imena oznak.

Pravila za beleženje identifikatorjev.

  • Identifikator je lahko sestavljen iz enega ali več znakov.
  • Kot simbole lahko uporabite črke latinice, številke in nekatere posebne znake: _, ?, $, @.
  • Identifikator se ne sme začeti s števko.
  • Dolžina identifikatorja je lahko do 255 znakov.
  • Prevajalec sprejme prvih 32 znakov identifikatorja in ignorira ostale.
Komentarji

Komentarji so od izvršljive vrstice ločeni z znakom; . V tem primeru je komentar vse, kar je napisano za podpičjem in do konca vrstice. Uporaba komentarjev v programu izboljša njegovo jasnost, zlasti kadar je namen nabora ukazov nejasen. Komentar lahko vsebuje poljubne natisljive znake, vključno s presledki. Komentar lahko zajema celotno vrstico ali sledi ukazu v isti vrstici.

Struktura programa skupščine

Program, napisan v zbirnem jeziku, je lahko sestavljen iz več delov, imenovanih moduli . Vsak modul ima lahko definiranega enega ali več segmentov podatkov, sklada in kode. Vsak popoln program za sestavljanje mora vključevati en glavni ali glavni modul, od katerega se začne njegovo izvajanje. Modul lahko vsebuje segmente kode, segmente podatkov in segmente sklada, deklarirane z uporabo ustreznih direktiv. Preden deklarirate segmente, morate podati pomnilniški model z uporabo direktive .MODEL.

Primer programa "ničesar" v zbirnem jeziku:

686P
.MODEL STANOVANJE, STDCALL
.PODATKI
.KODA
ZAČETEK:

RET
KONEC ZAČETEK

Ta program vsebuje samo en mikroprocesorski ukaz. Ta ukaz je RET. Zagotavlja, da se program pravilno zaključi. Na splošno se ta ukaz uporablja za izhod iz postopka.
Preostali del programa se nanaša na delovanje prevajalnika.
.686P - dovoljeni so ukazi zaščitenega načina Pentium 6 (Pentium II). Ta direktiva izbere podprt nabor ukazov asemblerja, ki označuje model procesorja. Črka P, navedena na koncu direktive, obvešča prevajalca, da procesor deluje v zaščitenem načinu.
.MODEL FLAT, stdcall - ploščati pomnilniški model. Ta spominski model se uporablja v operacijski sobi sistem Windows. stdcall
.DATA je segment programa, ki vsebuje podatke.
.CODE je programski blok, ki vsebuje kodo.
START - oznaka. V asemblerju imajo oznake pomembno vlogo, česar pa ne moremo reči za sodobne jezike na visoki ravni.
END START - konec programa in sporočilo prevajalniku, da naj se izvajanje programa začne z oznako START.
Vsak modul mora vsebovati direktivo END, ki označuje konec izvorna koda programi. Vse vrstice, ki sledijo direktivi END, so prezrte. Če izpustite direktivo END, se ustvari napaka.
Oznaka, navedena za direktivo END, pove prevajalcu ime glavnega modula, iz katerega se začne izvajanje programa. Če program vsebuje en modul, lahko oznako za direktivo END izpustite.




Vrh