TALINNA POLÜTEHNIKUM
Multimeedia erialaosakond
Kert
Kompus ASSEMBLER Referaat
OPERATSIOONISÜSTEEMI ALUSEDMS-18
Tallinn
2018 Sisukord
Assembler 3
Assemblerprogrammi lähtekood 5
Assemblerprogrammi loomine 6
Assemblerkeele
laused 8
Omistamine ja võrdlemine 9
Lausete näide
Inteli protsessori assemblerkeeles 11
Kasutatud kirjanudus 13
Assembler
Assembler on
teise põlvkonna madaltaseme programmeerimiskeel, mis tõlgib
assemblerkeeles programmi masinkoodiks. Assemblerkeeles on
masinakäskude kahendkoodid asendatud
mnemokoodidega
ehk mnemooniliste tähistega. Näiteks 11110111xx100xxx, kus x-id
tähistavad operandide aadressi arvuti mälus. Seega on
assemblertranslaatori töö päris lihtne, see peab jaotama mälu
instruktsioonidele ja andmetele, lisaks tõlkima iga
muutuja ning
sümboli masinkoodi. Lõpuks koondab see saadud koodi
väljundformaati. Väljunditeks võivad olla kas objektkoodi - või
käitusfailid
Enamik
assemblereid oskab seda teha ka käivitus- või objektifailiks.
Teegid ja objektifailid saab ühendada üheks tervikuks linkuri abil.
Assembler koodi ei optimeeri, kuna teisendamine assemblerkeelest
masinkoodi käib üksüheselt.
Igapäevaselt
kasutatakse sõna assemblerkood tihti ka assembleri kohta,
kuigi nii
nimetatakse ka assemblerkeele kompilaatorit
Masinkoodi
puhul on programmikood kahendarvude jadana ehk binaarkujul.
Assemblerkeele
puhul on programmikood kirjeldatud parameetrite ja nende lühikeste
käskudega, iga assemblerkeelne käsk on tõlgitav üheks või
mitmeks sama funktsiooniga masinkoodi käsuks. Kui sama
assemblerkeelne käsk on tõlgitav mitmeks masinkoodi käsuks, siis
on seda tihti võimalik kirjutada erikujul, kus osutatakse, millist
käsku parasjagu kasutatakse. Sellele erikujule tõlgivad koodi ka
disassemblerid.
Igal
erineval protsessoril on oma masinkeel ja sellele vastav
assemblerkeel. Ühele protsessorile arusaadavad käsud moodustavad
käsustiku. Kõrgtaseme programmeerimiskeeled vähendavad sõltuvust
protsessori eripäradest ja nendes kirjutatud kood kompileeritakse
kinda protsessori käsustikule vastavateks masinakäskudeks.
Lisaks
assemblerile on ka olemas makroassembler, mis on nagu assembler aga
sellele on lisatud makrodest koosneva metakeele toetus, mis võimaldab
korraga töödelda programmikonstruktsioone või terveid
assemblerkeelseid plokke.
Assemblerprogrammi lähtekood
Assemblerprogrammi
lähtekood on instruktsioonide jada, mida vastavalt antud juhenditele
täidetakse, vahele jäetakse ja korratakse. Peale mõnetäheliste
sümbolitega tähistatud käskude
tunnevad translaatoreid ka
direktiive ehk juhtnööre, mida translaator kasutab programmist aru
saamiseks ja keerukamate lahenduste loomiseks. Direktiivide
ülesanneteks on näiteks programmitüübi määramine, muutujate ja
avalike funktsioonide
deklareerimine ning muutujate ja koodi
joondamine mälus. Lähtekood peab olema suvalise tekstiredaktoriga
töödeldav ja suvalise translaatori poolt loetav. Ühel koodireal
võivad antud järjekorras olla pealdis, instruktsioon, argumendid ja
kommentaar. Loomulikult ei pea ühel
real kõiki nelja olema. Pealdis
on nimi, mis mingile programmireale antakse, et saaks programmi sees
ühest osast teise "hüppata". Instruktsioon ja
operand(vahel ka
operandid ) moodustavad käsu, mida täidab
protsessor ning kommentaaridega on võimalik programmide mõistetavust
võimaliku ümberkirjutamis- või uuendamisaja saabudes programmi
käikudest aru saada. Kommenteerimist loetakse ka üheks hea
programmeerimisstiili koostisosaks.
Assemblerprogrammi loomine
Assemblerprogrammi
tegemine algab lähteteksti kirjutamisest. Seda võib kirjutada
suvalise tekstiredaktoriga, millega saab
salvestada ASCII-teksti.
Assemblertranslaatorid on käsureal töötavad
programmid . Programmi
käivitades tuleb programmifaili nime järele kirjutada
assembleeritava lähtekoodi
tekstifaili nimi ja võtmed (juhendid
transleerimiseks). Võtmete hulka kuuluvad veaotsingu põhjalikkuse
määramine ja väljundformaadi valik. On olemas eraldi programme,
mis sisaldavad peale tekstiredaktori veel võimalust lihtsamalt
valida eelpoolmainitud võtmeid. Vastava täheühendi kirjutamise
asemel saab soovitud tingimused valida graafilisest menüüst.
Tegeliku translaatori saab välja kutsuda klaviatuuril
klahvikombinatsiooni
vajutades . Lähtekood transleeritakse ja juhul
kui tulemiks on programm, siis see käivitatakse. Faili salvestamisel
tuleb faili laiend muuta sisule vastavaks. Alustades programmi
kirjutamisega tuleks kõigepealt määrata sihttranslaator, uurida
selle võimalikke direktiive ja omadusi, mida tuleks kasutada. Need
tuleks kohe programmi alguses paika panna. Iga programm vajab
andmeid. Teistest keeltest erineb assembler selle poolest, et
alamäluga piirdudes võib olla vajalik kõikide muutujate
deklareerimine koos segmentidega, kus nad asuvad. Kaitstud režiimis
olles toimub kõik teise
loogika järgi, siis on kogu mälu vaadeldav
ühe suure tükina ja adresseerimine on täiesti lineaarne. Muutujate
defineerimiseks on kasutusel käsud, millel masinkoodis vastet pole,
kuid lähtekoodis asuvad nad samas kohas kus instruktsioon.
Muutujadeklaratsiooni üldkuju on järgmine: [muutuja nimi] andmetüüp
[väärtus], [väärtus],...
Assemblerkeele laused
Assemblerkeele
tekst koosneb lausetest ja iga lause on jagatud väljadeks:
- märgendiväli
- käsukoodiväli
- operandiväli
- kommendi - ehk kommentaariväli
Assembleri
translaatori direkiivid lihtsustavad assemblerikeeles
programmeerimist võrreldes masinakoodiga. Kasutusala järgi on
direktiivid järgmised:
- Nimede defineerimise pseudokäsud
- Andmete defineerimise pseudokäsud
- Mälu reserveerimise pseudokäsud
- Pseudokäsud transleerimise juhtimiseks
Väljatoodud
tähised UMRK, ARV ja MASS on programmeerija poolt valitud
konstantide või andmeobjektide nimed.
Omistamine ja võrdlemine
Süntaks:
CMP (võrdle) operand, operandi kirjeldus: Võrdleb esimest operandi
teisega ja analoogselt lahutamistehtele seab vastavalt tulemusele
lipuregistri bitid. Instruktsiooni kasutatakse koos tingimushüppega
, mis vastavalt lippude seisule otsustab, kas teha hüppe või mitte.
Näide:
Süntaks:
MOV sihtoperand, lähteoperand
Kirjeldus:
Kopeerib lähteoperandi sisu sihtoperandi. Lähteoperand võib olla
muutuja, konstant või register. Sihtoperand võib olla kas muutuja
või register. Operandid peavad olema võrdse suurusega.
Näide:
Lausete näide Inteli protsessori assemblerkeeles
Tavaliselt
kirjutatakse reale üks käsk, mis koosneb mõnetähelisest
mnemokoodist ja sellele järgnevatest käsu parameetritest, mis
eraldatakse üksteisest
komaga :
Selle
programmi selgitus:
Muudab
registri AX väärtuse 200-ks, seejärel liidab all
olevas reas arvu
seitsme. Tulemus 207 asub nüüd registris AX.
MOV
on lühend ingliskeelsest sõnast liigutama ja käsk ADD tuleneb
sõnast
lisama . Kõiki käske võib vabalt kirjutada nii suurte kui
väikeste tähtedega, kuna see nende tähendust ei muuda.
Siin
on ka näide kui assembler tõlgiks selle ära masinkoodi
kuueteistkümnendsüsteemi:
B8
C8 00
05
07 00
Kasutatud kirjanudus
Vikipedia.
(22.11.2018) Assemblerkeel
[
https://et.wikipedia.org/wiki/Assemblerkeel ]
Vikipeida.
(27.11.2018) Programmeerimiskeel Assembler
[
https://et.wikipedia.org/wiki/Programmeerimiskeel_Assembler ]
I.SISSEJUHATUS.
(27.11.2018) Definitsioonid
[
http://math.ut.ee/ktv/1995/pro.keeled/index.html ]
Kõik kommentaarid