Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • OS
  • Përbërësit kryesorë të gjuhës së asamblesë dhe struktura e komandave. Karakteristikat e përgjithshme të sistemit të komandës së gjuhës Assembler për IBM-PC (bashkësia bazë e komandave, metodat themelore të adresimit të operandëve)

Përbërësit kryesorë të gjuhës së asamblesë dhe struktura e komandave. Karakteristikat e përgjithshme të sistemit të komandës së gjuhës Assembler për IBM-PC (bashkësia bazë e komandave, metodat themelore të adresimit të operandëve)

Komandat mund të dallohen sipas qëllimit të tyre (në kllapa janë shembuj të kodeve mnemonike të operacioneve për komandat e montimit të një PC si IBM PC):

l kryerja e veprimeve aritmetike (ADD dhe ADC - mbledhje dhe mbledhje me transferim, SUB dhe SBB - zbritje dhe zbritje me një hua, MUL dhe IMUL - shumëzim i panënshkruar dhe i nënshkruar, DIV dhe IDIV - pjesëtime të panënshkruara dhe të nënshkruara, CMP - krahasime etj.) ;

l kryerja e veprimeve logjike (OR, DHE, JO, XOR, TEST, etj.);

l transferimi i të dhënave (MOV - dërgoni, XCHG - shkëmbim, IN - hyni në mikroprocesor, OUT - dalje nga mikroprocesori, etj.);

l transferimi i kontrollit (degët e programit: JMP - dega e pakushtëzuar, THIRRJA - thirrja e procedurës, RET - kthimi nga procedura, J * - dega e kushtëzuar, LOOP - kontrolli i ciklit, etj.);

l përpunimi i vargjeve të karaktereve (MOVS - transferime, CMPS - krahasime, LODS - shkarkime, SCAS - skanime. Këto komanda zakonisht përdoren me prefiksin (modifikues i përsëritjes) REP;

l ndërprerje të programit (INT - ndërprerjet e softuerit, INTO - ndërprerje e kushtëzuar në rast të tejmbushjes, IRET - kthim nga ndërprerja);

l kontrolli i mikroprocesorit (ST * dhe CL * - vendosja dhe fshirja e flamujve, HLT - ndalimi, PRIT - pritje, NOP - boshe, etj.).

Një listë e plotë e komandave të asemblerit mund të gjendet në vepra.

Komandat e transferimit të të dhënave

l MOV dst, src - transferimi i të dhënave (lëviz - transferimi nga src në dst).

Transferimet: një bajt (nëse src dhe dst janë në format bajt) ose një fjalë (nëse src dhe dst janë në formatin word) ndërmjet regjistrave ose ndërmjet regjistrit dhe memories, dhe gjithashtu shkruan një vlerë të menjëhershme në një regjistër ose memorie.

Operaandët dst dhe src duhet të jenë në të njëjtin format bajt ose fjalësh.

Src mund të jetë i tipit: r (regjistër) - regjistër, m (memorie) - memorie, i (rezistenca) - vlerë e menjëhershme. Dst mund të jetë i tipit r, m. Ju nuk mund të përdorni operandët e mëposhtëm në të njëjtën komandë: rsegm së bashku me i; dy operandë të tipit m dhe dy operandë të tipit rsegm). Operandi i mund të jetë gjithashtu një shprehje e thjeshtë:

mov AX, (152 + 101B) / 15

Shprehja vlerësohet vetëm gjatë përkthimit. Nuk ndryshon flamujt.

l PUSH src - shtyrja e një fjale në pirg (shty - shtyj përmes; shtyje në pirg nga src). Shtyn përmbajtjen e src në krye të stivës - çdo regjistër 16-bitësh (përfshirë ata të segmentit) ose dy vendndodhje memorie që përmbajnë një fjalë 16-bit. Flamujt nuk ndryshojnë;

l POP dst - nxjerr një fjalë nga steka (pop - pop; lexo nga pirgu në dst). Nxjerr një fjalë nga maja e pirgut dhe e vendos atë në dst - çdo regjistër 16-bitësh (duke përfshirë segmentin) ose dy vendndodhje memorie. Flamujt nuk ndryshojnë.

Prezantimi.

Gjuha në të cilën është shkruar programi origjinal quhet hyrje gjuha, dhe gjuha në të cilën është përkthyer për ekzekutim nga procesori-rom është fundjavë gjuhe. Procesi i konvertimit të një gjuhe hyrëse në një gjuhë dalëse quhet transmetimi. Meqenëse procesorët janë të aftë të ekzekutojnë programe në një gjuhë makine të kodeve binare, e cila nuk përdoret për programim, përkthimi i të gjitha programeve burimore është i nevojshëm. I njohur dy mënyra përkthimet: përmbledhja dhe interpretimi.

përpilimi programi origjinal fillimisht përkthehet plotësisht në një program ekuivalent në gjuhën e daljes, i quajtur Objekt program dhe më pas ekzekutohet. Ky proces zbatohet duke përdorur një speciale programe, thirrur përpiluesi. Një përpilues për të cilin gjuha hyrëse është një paraqitje simbolike e gjuhës së makinës (dalëse) të kodeve binare quhet montues.

interpretimetçdo rresht i tekstit të programit burim analizohet (interpretohet) dhe komanda e specifikuar në të ekzekutohet menjëherë. Zbatimi i kësaj metode i është besuar program përkthyes. Interpretimi kërkon shumë kohë. Për të rritur efikasitetin e tij, në vend që të përpunojë çdo rresht, përkthyesi fillimisht i konverton të gjitha ekipi vargjet me karaktere (

). Sekuenca e gjeneruar e simboleve përdoret për të kryer funksionet e caktuara në programin origjinal.

Gjuha e asamblesë e diskutuar më poshtë zbatohet duke përdorur përpilimin.

Veçoritë e gjuhës.

Karakteristikat kryesore të montimit janë:

● në vend të kodeve binare, gjuha përdor emra simbolikë - mnemonikë. Për shembull, për komandën e shtimit (

) përdoret mnemonikja

Zbritja (

shumimi (

Divizionet (

e kështu me radhë Emrat simbolikë përdoren edhe për adresimin e qelizave të memories. Për programimin në gjuhën e asamblesë, në vend të kodeve dhe adresave binare, duhet të dini vetëm emra simbolikë, të cilët asembleri i përkthen në kode binare;

çdo deklaratë përputhet një komandë makinerie(kodi), domethënë ekziston një korrespodencë një-për-një ndërmjet udhëzimeve të makinës dhe operatorëve në një program në gjuhën e asamblesë;

● gjuha ofron akses ndaj të gjitha objekteve dhe ekipet. Gjuhët e nivelit të lartë nuk e kanë këtë aftësi. Për shembull, gjuha e asamblesë ju lejon të kontrolloni bitin e regjistrimit të flamujve dhe një gjuhë të nivelit të lartë (për shembull,

) nuk e ka këtë aftësi. Vini re se gjuhët për programimin e sistemit (për shembull, C) shpesh zënë një pozicion të ndërmjetëm. Për sa i përket aksesueshmërisë, ato janë më afër gjuhës së asamblesë, por kanë sintaksën e një gjuhe të nivelit të lartë;

● gjuhën e asamblesë nuk është një gjuhë universale.Çdo grup specifik i mikroprocesorëve ka montuesin e vet. Gjuhët e nivelit të lartë nuk e kanë këtë disavantazh.

Ndryshe nga gjuhët e nivelit të lartë, shkrimi dhe korrigjimi i një programi në gjuhën e asamblesë kërkon kohë. Përkundër kësaj, u mor gjuha e asamblesë përdorim të gjerë për shkak të rrethanave të mëposhtme:

● një program i shkruar në gjuhën e asamblesë është shumë më i vogël dhe shumë më i shpejtë se një program i shkruar në një gjuhë të nivelit të lartë. Për disa aplikacione, këta tregues luajnë një rol parësor, për shembull, shumë programe të sistemit (përfshirë përpiluesit), programe në kartat e kreditit, telefonat celularë, drejtuesit e pajisjeve, etj .;

● disa procedura kërkojnë akses të plotë në pajisje, gjë që zakonisht nuk është e mundur në një gjuhë të nivelit të lartë. Ky rast përfshin mbajtësit e ndërprerjeve dhe ndërprerjeve në sistemet operative, si dhe kontrolluesit e pajisjeve në sistemet e integruara që funksionojnë në kohë reale.

Në shumicën e programeve, vetëm një përqindje e vogël e kodit total është përgjegjëse për një përqindje të madhe të kohës së ekzekutimit të programit. Në mënyrë tipike, 1% e programit është përgjegjëse për 50% të kohës së ekzekutimit dhe 10% e programit është përgjegjëse për 90% të kohës së ekzekutimit. Prandaj, për të shkruar një program specifik në kushte reale, përdoren si një asembler ashtu edhe një nga gjuhët e nivelit të lartë.

Formati i operatorit në gjuhën e asamblesë.

Një program në gjuhën e asamblesë është një listë komandash (deklarata, fjali), secila prej të cilave zë një rresht të veçantë dhe përmban katër fusha: një fushë etiketimi, një fushë operacioni, një fushë operand dhe një fushë komenti. Ekziston një kolonë e veçantë për secilën fushë.

Fusha e etiketës.

Kolona 1 është caktuar për fushën e etiketës. Etiketa është një emër simbolik ose identifikues, adresat memorie. Është e nevojshme për të qenë në gjendje:

● bëni një kërcim të kushtëzuar ose të pakushtëzuar te komanda;

● merrni akses në vendin ku ruhen të dhënat.

Deklarata të tilla janë etiketuar. Për të caktuar një emër, përdoren shkronjat (të mëdha) të alfabetit anglez dhe numrat. Emri duhet të paraprihet nga një shkronjë dhe një ndarës dy pika në fund. Një etiketë me dy pika mund të shkruhet në një rresht të veçantë dhe një kod optik mund të shkruhet në rreshtin tjetër në kolonën 2, gjë që thjeshton punën e përpiluesit. Mungesa e dy pikave nuk lejon dallimin e një etikete nga një kod optik nëse ato janë të vendosura në vija të veçanta.

Në disa versione të gjuhës së asamblesë, dy pikat vendosen vetëm pas etiketave të komandave, por jo pas etiketave të të dhënave dhe gjatësia e etiketës mund të kufizohet në 6 ose 8 karaktere.

Nuk duhet të ketë emra identikë në fushën e etiketës, pasi etiketa shoqërohet me adresat e komandave. Nëse gjatë ekzekutimit të programit nuk ka nevojë të thirret një komandë ose të dhëna nga memoria, fusha e etiketës mbetet bosh.

Fusha e kodit të funksionimit.

Kjo fushë përmban kodin mnemonik të komandës ose pseudo-komandës (shih më poshtë). Kodi mnemonik i komandave zgjidhet nga projektuesit e gjuhës. Në gjuhën e asamblesë

mnemonic i zgjedhur për të ngarkuar regjistrin nga memoria

), dhe për të ruajtur përmbajtjen e regjistrit në memorie - kujtesën

). Në gjuhët e asamblesë

një emër mund të përdoret për të dy operacionet, përkatësisht

Nëse zgjedhja e emrave mnemonikë mund të jetë arbitrare, atëherë nevoja për të përdorur dy instruksione makinerie është për shkak të arkitekturës së përpunuesve

Mnemonik i regjistrit varet gjithashtu nga versioni i asemblerit (Tabela 5.2.1).

Fusha e operandit.

Informacioni shtesë i kërkuar për të përfunduar operacionin gjendet këtu. Në fushën e operandëve për instruksionet e kërcimit, tregohet adresa ku dëshironi të hidheni, si dhe adresat dhe regjistrat, të cilët janë operandë për një instruksion makinerie. Si shembull, ne do të japim operandët që mund të përdoren për procesorët 8-bit.

● të dhëna numerike,

të paraqitura në sisteme të ndryshme numrash. Për të përcaktuar sistemin e numrave të përdorur, konstanta ndiqet nga një nga shkronjat latine: B,

Prandaj, sistemet e numrave binar, oktal, heksadecimal, dhjetor (

nuk keni pse ta shkruani). Nëse shifra e parë e një numri heksadecimal është A, B, C,

Pastaj një 0 (zero) e parëndësishme shtohet përpara;

● kodet e regjistrave të brendshëm të mikroprocesorit dhe qelizave të memories

M (burimet ose marrësit e informacionit) në formën e shkronjave A, B, C,

M ose adresat e tyre në çdo sistem numrash (për shembull, 10B - adresa e regjistrit

në sistemin binar);

● identifikuesit,

për regjistrin e çifteve të avionëve,

Shkronjat e para B,

H; për një palë akumulatorë dhe një regjistër shenjash -

; për numëruesin e komandës -

; për treguesin e stivës -

● etiketat që tregojnë adresat e operandëve ose udhëzimet vijuese në kusht

(nëse plotësohet kushti) dhe kërcime të pakushtëzuara. Për shembull, operandi M1 në komandë

nënkupton nevojën për një kalim të pakushtëzuar në komandën, adresa e së cilës në fushën e etiketës shënohet me identifikuesin M1;

● shprehjet,

të cilat ndërtohen duke lidhur të dhënat e diskutuara më sipër duke përdorur operatorë aritmetikë dhe logjikë. Vini re se mënyra se si rezervohet hapësira e të dhënave varet nga versioni i gjuhës. Zhvilluesit e gjuhës Asambleje për

Përcaktoni një fjalë), dhe më vonë prezantoi një alternativë.

që ishte në gjuhën për përpunuesit që në fillim

Në versionin gjuhësor

përdorur nga

Përcaktoni një konstante).

Procesorët përpunojnë operandë me gjatësi të ndryshme. Për ta përcaktuar atë, zhvilluesit e asemblerit morën vendime të ndryshme, për shembull:

Regjistrat II me gjatësi të ndryshme kanë emra të ndryshëm: ЕАХ - për vendosjen e operandëve 32-bit (lloji

); АХ - për 16-bit (lloji

dhe AH - për 8-bit (lloji

● për procesorë

në çdo opcode shtohen prapashtesa: prapashtesa

Për llojin

; prapashtesa ".B" për llojin

për operandët me gjatësi të ndryshme, përdoren kode optike të ndryshme, për shembull, për të ngarkuar një bajt, gjysmë fjalë (

) dhe fjalët në regjistrin 64-bit, përdoren kodet optike

përkatësisht.

Fusha e komenteve.

Kjo fushë jep shpjegime rreth veprimeve të programit. Komentet nuk ndikojnë në funksionimin e programit dhe janë të destinuara për njerëzit. Ato mund të nevojiten për të modifikuar programin, i cili pa komente të tilla mund të jetë plotësisht i pakuptueshëm edhe për programuesit me përvojë. Një koment fillon me një simbol dhe përdoret për të shpjeguar dhe dokumentuar programet. Karakteri fillestar i një komenti mund të jetë:

● pikëpresje (;) në gjuhët për përpunuesit e kompanisë

● pikëçuditëse (!) Në gjuhët për

Çdo rresht individual i komenteve paraprihet nga një karakter fillestar.

Pseudo-komandime (direktiva).

Në gjuhën e asamblesë, ekzistojnë dy lloje kryesore komandash:

bazë udhëzime që janë ekuivalente me kodin e makinës së procesorit. Këto komanda kryejnë të gjithë përpunimin e ofruar nga programi;

pseudo komanda, ose direktiva, projektuar për të shërbyer procesin e përkthimit të një programi në gjuhën e kombinimeve të kodeve. Si shembull, në tabelë. 5.2.2 janë dhënë disa pseudo-komanda nga ac-sampler

për familjen

.

Gjatë programimit, ka situata kur, sipas algoritmit, i njëjti zinxhir komandash duhet të përsëritet shumë herë. Për të dalë nga kjo situatë, mund të:

● shkruani sekuencën e dëshiruar të komandave sa herë që haset. Kjo qasje rrit madhësinë e programit;

● formoni këtë sekuencë në një procedurë (nënrutinë) dhe thirreni nëse është e nevojshme. Ky dalje ka të metat e veta: çdo herë që duhet të ekzekutoni një komandë thirrjeje të procedurës speciale dhe një komandë kthimi, të cilat, me një sekuencë të shkurtër dhe të përdorur shpesh, mund të reduktojnë shumë shpejtësinë e programit.

Mënyra më e thjeshtë dhe më efikase për të përsëritur një zinxhir komandash shumë herë është përdorimi makro, e cila mund të konsiderohet si një pseudo-komandë e krijuar për të ritransmetuar një grup komandash që hasen shpesh në një program.

Një makro, ose makro, karakterizohet nga tre aspekte: makro-përkufizimi, makro-kthimi dhe makro-zgjerimi.

Përkufizimi makro

Ky është një përcaktim i një sekuence të përsëritur të përsëritur të komandave të programit, të përdorura për lidhjet në tekstin e programit.

Përkufizimi makro ka strukturën e mëposhtme:

Lista e shprehjeve; Përkufizimi makro

Në strukturën e mësipërme të një makro-përkufizimi mund të dallohen tre pjesë:

● titull

një makro që përfshin një emër

Pseudo-komandë

dhe një grup parametrash;

● shënuar me pika trupi makro;

● ekip

përfundimet

makro.

Seti i parametrave të definicionit makro përmban një listë të të gjithë parametrave të listuar në fushën e operandit për grupin e zgjedhur të komandave. Nëse këto parametra janë dhënë në program më herët, atëherë ato mund të hiqen në kokën e përkufizimit makro.

Për të ribashkuar grupin e zgjedhur të komandave, përdorni adresën që përbëhet nga emri

makro dhe një listë parametrash me vlera të tjera.

Kur asembleri ndeshet me një përkufizim makro gjatë përpilimit, ai e ruan atë në tabelën e përkufizimit makro. Në paraqitjet e mëvonshme në programin e emrit (

) të makros, asembleri e zëvendëson atë me trupin e makros.

Përdorimi i një emri makro si një kod optik quhet makro qarkullimi(me një thirrje makro), dhe zëvendësimi i tij me trupin e makros është zgjerim makro.

Nëse programi paraqitet si një sekuencë karakteresh (shkronja, numra, hapësira, shenja pikësimi dhe kthime për një rresht të ri), atëherë zgjerimi makro konsiston në zëvendësimin e disa vargjeve nga kjo sekuencë me vargje të tjera.

Zgjerimi makro ndodh gjatë procesit të montimit, jo gjatë ekzekutimit të programit. Mënyra për të manipuluar vargjet e karaktereve është përgjegjësi e fondet makro.

Procesi i montimit kryhet në dy kalime:

● në kalimin e parë, të gjitha përkufizimet makro ruhen dhe thirrjet makro zgjerohen. Në këtë rast, programi origjinal lexohet dhe konvertohet në një program në të cilin hiqen të gjitha përkufizimet makro dhe çdo thirrje makro zëvendësohet nga trupi i makros;

● në kalimin e dytë, programi që rezulton përpunohet pa makro.

Makrot e parametrizuara.

Për të punuar me sekuenca të përsëritura komandash, parametrat e të cilave mund të marrin vlera të ndryshme, jepen përkufizimet e mëposhtme makro:

● me aktuale parametrat që vendosen në fushën e operandëve të thirrjes makro;

● me formale parametrave. Në procesin e zgjerimit të makros, çdo parametër formal që shfaqet në trupin e makros zëvendësohet nga parametri aktual përkatës.

duke përdorur makro me parametra.

Programi 1 tregon dy sekuenca të ngjashme komandash, që ndryshojnë në atë që i pari ndërron P dhe

Dhe e dyta

Programi 2 përfshin një makro me dy parametra zyrtarë P1 dhe P2. Gjatë zgjerimit makro, çdo karakter P1 brenda trupit makro zëvendësohet nga parametri i parë aktual (P,

) dhe P2 zëvendësohet nga parametri i dytë aktual (

) nga programi nr 1. Në makrozonë

programi 2 është shënuar: P,

Parametri i parë aktual,

Parametri i dytë aktual.

Programi 1

Programi 2

MOV EBX, Q MOV EAX, Pl

MOV Q, EAX MOV EBX, P2

MOV P, EBX MOV P2, EAX

Aftësi të zgjeruara.

Le të shqyrtojmë disa veçori të avancuara të gjuhës

Nëse makroja që përmban komandën e degës së kushtëzuar dhe etiketën në të cilën po bëhet dega thirret dy ose më shumë herë, atëherë etiketa do të dublikohet (problemi i etiketave të dyfishta), gjë që do të shkaktojë një gabim. Prandaj, me çdo thirrje, një etiketë e veçantë caktohet (nga programuesi) si parametër. Në gjuhë

etiketa është deklaruar lokale (

) dhe falë veçorive të avancuara, asembleri gjeneron automatikisht një etiketë të ndryshme sa herë që zgjerohet makroja.

ju lejon të përcaktoni makro brenda makrove të tjera. Kjo veçori e avancuar është shumë e dobishme kur kombinohet me lidhje të kushtëzuara. Merrni parasysh

NËSE MAKRO GT 16 M2 MAKRO

Makro M2 mund të përcaktohet në të dyja pjesët e deklaratës

Megjithatë, përkufizimi varet nga cili procesor është montuar programi: 16-bit ose 32-bit. Nëse M1 nuk thirret, atëherë makroja M2 nuk do të përcaktohet fare.

Një veçori tjetër e avancuar është se makrot mund të thërrasin makro të tjera, duke përfshirë edhe veten e tyre - rekursive telefononi. Në rastin e fundit, për të mos marrë një lak të pafund, makro duhet t'i kalojë vetes një parametër, i cili ndryshon me çdo zgjerim, dhe gjithashtu kontrolloni këtë parametër dhe përfundoni rekursionin kur parametri arrin një vlerë të caktuar.

Mbi përdorimin e makrove në asembler.

Kur përdorni makro, asembleri duhet të jetë në gjendje të kryejë dy funksione: ruajnë makro-përkufizimet dhe zgjeroni thirrjet makro.

Ruajtja e makrove.

Të gjithë emrat e makrove ruhen në një tabelë. Çdo emër shoqërohet nga një tregues në makronë përkatëse në mënyrë që të mund të thirret nëse është e nevojshme. Disa montues kanë një tabelë të veçantë për emrat e makrove, ndërsa të tjerët kanë një tabelë të përgjithshme në të cilën, së bashku me emrat e makrove, ndodhen të gjitha udhëzimet dhe direktivat e makinerive.

Kur hasni një makro gjatë montimit është krijuar:

element i ri i tabelës me emrin e makros, numrin e parametrave dhe një tregues në një tabelë tjetër të përkufizimeve makro, ku do të ruhet trupi i makros;

● listë formale parametrave.

Më pas, trupi i makros lexohet dhe ruhet në tabelën e përcaktimeve të makro, e cila është vetëm një varg simbolesh. Parametrat formalë që gjenden në trupin e lakut shënohen me një simbol të veçantë.

Paraqitja e brendshme e një makro

nga shembulli i mësipërm për programin 2 (fq. 244) duket si:

MOV EAX, MOV EBX, MOV MOV &

ku një pikëpresje përdoret si karakter kthimi i karrocës, dhe ampersant & përdoret si një karakter parametër formal.

Zgjerimi i thirrjeve makro.

Sa herë që haset një makro gjatë montimit, ai ruhet në tabelën makro. Kur thirret makro, montuesi ndalon përkohësisht leximin e hyrjes nga pajisja hyrëse dhe fillon të lexojë trupin e ruajtur të makro. Parametrat formalë të nxjerrë nga trupi i makros zëvendësohen me parametrat aktualë dhe sigurohen nga thirrja. Ampersant & përballë parametrave lejon si-kampionues t'i njohë ato.

Përkundër faktit se ka shumë versione të asemblerit, proceset e montimit kanë karakteristika të përbashkëta dhe janë të ngjashme në shumë mënyra. Puna e montimit me dy kalime diskutohet më poshtë.

Montues me dy kalime.

Programi përbëhet nga një numër operatorësh. Prandaj, duket se kur montoni, mund të përdorni sekuencën e mëposhtme të veprimeve:

● përkthejeni atë në gjuhën e makinës;

● transferoni kodin e marrë të makinës në një skedar, dhe pjesën përkatëse të listimit - në një skedar tjetër;

● përsëritni procedurat e mësipërme derisa të përkthehet i gjithë programi.

Megjithatë, kjo qasje nuk është efektive. Një shembull është i ashtuquajturi problem lidhjet përpara. Nëse deklarata e parë është një kërcim në deklaratën P që ndodhet në fund të programit, atëherë asembleri nuk mund ta përkthejë atë. Ai fillimisht duhet të përcaktojë adresën e operatorit P, dhe për këtë është e nevojshme të lexohet i gjithë programi. Çdo lexim i plotë i programit origjinal quhet rresht. Le t'ju tregojmë se si mund ta zgjidhni problemin e lidhjes përpara duke përdorur dy kalime:

pason kalimi i parë te mbledhesh dhe ruani të gjitha përkufizimet e simboleve (përfshirë etiketat) në tabelë, dhe në kalimin e dytë - lexoni dhe montoni secilin operator. Kjo metodë është relativisht e thjeshtë, por kalimi i dytë përmes programit origjinal kërkon kohë shtesë të shpenzuar në operacionet I / O;

● në kalimin e parë, transformoj programojeni në një formë të ndërmjetme dhe ruani atë në tabelë dhe ekzekutoni kalimin e dytë jo sipas programit origjinal, por sipas tabelës. Kjo metodë e montimit kursen kohë, pasi asnjë I/O nuk kryhet në kalimin e dytë.

Kalimi i parë.

Objektivi i kalimit të parë- ndërtoni një tabelë simbolesh. Siç u përmend më lart, një qëllim tjetër i kalimit të parë është ruajtja e të gjitha makrotave dhe zgjerimi i thirrjeve siç shfaqen. Rrjedhimisht, si përkufizimi i simbolit ashtu edhe zgjerimi makro ndodhin në një kalim. Simboli mund të jetë ose etiketë, ose kuptimi, të cilit i caktohet një emër specifik duke përdorur direktivën:

; Vlera - madhësia e tamponit

Duke caktuar vlera për emrat simbolikë në fushën e etiketës së instruksionit, asembleri në thelb vendos adresat që do të ketë çdo instruksion gjatë ekzekutimit të programit. Për këtë, montuesi kursen gjatë procesit të montimit numëruesi i adresave të komandës(

) si një variabël i veçantë. Në fillim të kalimit të parë, vlera e ndryshores speciale vendoset në 0 dhe rritet pas çdo komande të përpunuar për gjatësinë e kësaj komande. Si shembull, në tabelë. 5.2.3 tregon një fragment të programit që tregon gjatësinë e komandave dhe vlerat e numëruesit. Në kalimin e parë, formohen tabela emra simbolikë, direktiva dhe kodet optike, dhe nëse është e nevojshme fjalë për fjalë tabela. Një literal është një konstante për të cilën asembleri do të rezervojë automatikisht memorien. Menjëherë, vërejmë se procesorët modernë përmbajnë udhëzime me adresa të menjëhershme, kështu që grumbulluesit e tyre nuk mbështesin fjalë për fjalë.

Tabela e emrave simbolikë

përmban një element për çdo emër (tabela 5.2.4). Çdo element i tabelës së emrit simbolik përmban vetë emrin (ose një tregues për të), vlerën e tij numerike dhe ndonjëherë disa informacione shtesë, të cilat mund të përfshijnë:

● gjatësia e fushës së të dhënave të lidhur me simbolin;

● pjesë të rialokimit të memories (që tregojnë nëse vlera e një simboli ndryshon nëse programi ngarkohet në një adresë të ndryshme nga ajo e synuar nga asembleri);

● informacion nëse simboli mund të aksesohet nga jashtë procedurës.

Emrat simbolikë janë etiketa. Ato mund të specifikohen duke përdorur operatorë (për shembull,

Tabela e udhëzimeve.

Kjo tabelë rendit të gjitha direktivat, ose pseudo-komandat, që hasen gjatë montimit të një programi.

Tabela e kodit të funksionimit.

Për secilin opkod, tabela ofron kolona të veçanta: përcaktimi i kodit optik, operandi 1, operandi 2, vlera heksadecimal e kodit optik, gjatësia e komandës dhe lloji i komandës (Tabela 5.2.5). Kodet e funksionimit ndahen në grupe në varësi të numrit dhe llojit të operandëve. Lloji i komandës përcakton numrin e grupit dhe specifikon procedurën që thirret për të përpunuar të gjitha komandat në këtë grup.

Kalimi i dytë.

Objektivi i kalimit të dytë- krijimi i një programi objekti dhe printimi, nëse është e nevojshme, i protokollit të montimit; nxjerrja e informacionit të nevojshëm për lidhjen për të lidhur procedurat që janë mbledhur në kohë të ndryshme në një skedar të ekzekutueshëm.

Në kalimin e dytë (si në të parën), rreshtat që përmbajnë deklaratat lexohen dhe përpunohen njëri pas tjetrit. Operatori origjinal dhe që rrjedh prej tij në daljen e sistemit heksadecimal Objekt kodi mund të printohet ose të ruhet për printim të mëvonshëm. Pas rivendosjes së numëruesit të adresës së komandës, thirret deklarata tjetër.

Programi origjinal mund të përmbajë gabime, për shembull:

simboli i dhënë është i papërcaktuar ose i përcaktuar më shumë se një herë;

● kodi optik përfaqësohet nga një emër i pavlefshëm (për shkak të një gabimi tipik), nuk është i pajisur me një numër të mjaftueshëm operandësh ose ka shumë operandë;

● nuk ka operator

Disa montues mund të marrin një karakter të papërcaktuar dhe ta zëvendësojnë atë. Megjithatë, në shumicën e rasteve, kur zbulon një deklaratë me një gabim, asembleri shfaq një mesazh gabimi në ekran dhe përpiqet të vazhdojë procesin e montimit.

Artikuj kushtuar gjuhës së asamblesë.

Tema 1.4 Mnemonika e montimit. Struktura dhe format e komandave. Llojet e adresimit. Komandanti i mikroprocesorit

Plani:

1 Gjuha e Kuvendit. Konceptet bazë

2 Simbolet e gjuhës së asamblesë

3 Llojet e deklaratave të asemblerit

4 Direktivat e Kuvendit

5 Kompleti i udhëzimeve të procesorit

1 igjuha e asamblesë. Konceptet bazë

Gjuha e asamblesëështë një paraqitje simbolike e gjuhës së makinës. Të gjitha proceset në një makinë në nivelin më të ulët të harduerit drejtohen vetëm nga komandat (udhëzimet) e gjuhës së makinës. Prandaj, është e qartë se, pavarësisht nga emri i përgjithshëm, gjuha e asamblesë është e ndryshme për çdo lloj kompjuteri.

Një program në gjuhën e asamblesë është një koleksion blloqesh memorie të quajtura segmentet e memories. Një program mund të përbëhet nga një ose më shumë segmente të tilla blloku. Çdo segment përmban një grup fjalish gjuhësore, secila prej të cilave zë një rresht të veçantë të kodit të programit.

Fjalitë e asamblesë janë katër llojesh:

1) komandat ose udhëzimet, të cilat janë analoge simbolike të instruksioneve të makinës. Në procesin e përkthimit, udhëzimet e asemblerit shndërrohen në komandat përkatëse të grupit të instruksioneve të mikroprocesorit;

2) makro -fjalitë e tekstit të programit, të formuara në një mënyrë të caktuar, zëvendësohen gjatë transmetimit me fjali të tjera;

3) direktiva,të cilat janë udhëzime për përkthyesin asembler për të kryer disa veprime. Direktivat nuk kanë analoge në paraqitjen e makinerive;

4) linjat e komenteve që përmban ndonjë simbol, duke përfshirë shkronjat e alfabetit rus. Komentet janë injoruar nga përkthyesi.

­ Struktura e një programi asambleje. Sintaksa e montimit.

Fjalitë që përbëjnë programin mund të jenë një konstrukt sintaksor që korrespondon me një komandë, makro, direktivë ose koment. Në mënyrë që përkthyesi asembler t'i njohë ato, ato duhet të formohen sipas disa rregullave sintaksore. Mënyra më e mirë për ta bërë këtë është përdorimi i një përshkrimi zyrtar të sintaksës së gjuhës si rregullat gramatikore. Mënyrat më të zakonshme për të përshkruar një gjuhë programimi si kjo - diagramet sintaksore dhe forma të zgjeruara Backus-Naur. Më i përshtatshëm për përdorim praktik diagramet sintaksore. Për shembull, sintaksa e fjalive asembler mund të përshkruhet duke përdorur diagramet sintaksore të paraqitura në figurat e mëposhtme 10, 11, 12.

Figura 10 - Formati i fjalisë së montimit


­ Figura 11 - Formati i direktivave

­ Figura 12 - Formati i komandave dhe makrove

Në këto figura:

­ emri i etiketës- një identifikues, vlera e të cilit është adresa e bajtit të parë të asaj fjalie të tekstit burimor të programit, të cilin ai e cakton;

­ emri -identifikues që e dallon këtë direktivë nga direktivat e tjera me të njëjtin emër. Si rezultat i përpunimit të një direktive specifike nga montuesi, këtij emri mund t'i caktohen disa karakteristika;

­ opcode (COP) dhe direktiva - ato janë emërtime kujtimore të udhëzimeve përkatëse të makinës, komandës makro ose direktivës së përkthyesit;

­ operandët -pjesë të një komande, makro ose direktive të montimit që përcaktojnë objektet që duhen manipuluar. Operandët e montimit përshkruhen me shprehje me konstante numerike dhe tekstuale, etiketa dhe identifikues të variablave duke përdorur shenja operimi dhe disa fjalë të rezervuara.

Diagramet sintaksore ndihmojnë gjeni dhe më pas kaloni nga hyrja e diagramit (majtas) në daljen e tij (djathtas). Nëse ekziston një shteg i tillë, atëherë fjalia ose ndërtimi janë sintaksisht të sakta. Nëse nuk ka një rrugë të tillë, atëherë përpiluesi nuk do ta pranojë këtë ndërtim.

­ 2 Simbolet e gjuhës së asamblesë

Karakteret e lejuara gjatë shkrimit të tekstit të programit janë:

1) të gjitha shkronjat latine: A-Z,a-z... Në këtë rast, shkronjat e mëdha dhe të vogla konsiderohen ekuivalente;

2) numrat nga 0 përpara 9 ;

3) shenja ? , @ , $ , _ , & ;

4) ndarës , . () < > { } + / * % ! " " ? = # ^ .

Fjalitë montuese formohen nga argumentet, të cilat janë sekuenca të pandashme sintaksore të karaktereve të vlefshme të gjuhës që kanë kuptim për përkthyesin.

Leksema janë:

1) identifikuesit - sekuenca të karaktereve të vlefshme të përdorura për të treguar objektet e programit si opkodet, emrat e variablave dhe emrat e etiketave. Rregulli për shkrimin e identifikuesve është si më poshtë: një identifikues mund të përbëhet nga një ose më shumë karaktere;

2) vargjet e karaktereve - sekuenca karakteresh të mbyllura në thonjëza të vetme ose të dyfishta;

3) numrat e plotë të një prej sistemeve të numrave të mëposhtëm : binare, dhjetore, heksadecimal. Identifikimi i numrave gjatë shkrimit të tyre në programet e gjuhës së asamblesë kryhet sipas rregullave të caktuara:

4) numrat dhjetorë nuk kërkojnë ndonjë simbol shtesë për identifikimin e tyre, për shembull 25 ose 139. Për identifikimin në kodin burimor të programit numrat binareështë e nevojshme pasi të regjistrohen zerot dhe ato që i përbëjnë ato, të vendoset latinishtja " b”, Për shembull 10010101 b.

5) Numrat heksadecimal kanë më shumë konvencione kur shkruhen:

Së pari, ato përbëhen nga numra 0...9 , shkronjat e vogla dhe të mëdha të alfabetit latin a,b, c,d,e,f ose A,B,C,D,E,F.

Së dyti, përkthyesi mund të ketë vështirësi në njohjen e numrave heksadecimalë për shkak të faktit se ato mund të përbëhen ose nga vetëm shifra 0 ... 9 (për shembull, 190845), ose të fillojnë me një shkronjë të alfabetit latin (për shembull, ef15). Për t'i "shpjeguar" përkthyesit se një shenjë e dhënë nuk është një numër dhjetor ose një identifikues, programuesi duhet të zgjedhë një numër heksadecimal në një mënyrë të veçantë. Për ta bërë këtë, në fund të sekuencës së shifrave heksadecimal që përbëjnë një numër heksadecimal, shkruani shkronjën latine " h“. Ky është një parakusht. Nëse një numër heksadecimal fillon me një shkronjë, atëherë para tij shkruhet një zero kryesore: 0 ef15 h.

Pothuajse çdo fjali përmban një përshkrim të objektit mbi të cilin ose me ndihmën e të cilit kryhet një veprim. Këto objekte quhen operandët... Ato mund të përkufizohen si kjo: operandët- këto janë objekte (disa vlera, regjistra ose qeliza memorie) mbi të cilat veprohet nga udhëzimet ose direktivat, ose janë objekte që përcaktojnë ose sqarojnë veprimin e udhëzimeve ose direktivave.

Është e mundur të kryhet klasifikimi i mëposhtëm i operandëve:

­ operandë konstante ose imediate;

­ operandët e adresës;

­ operandët e luajtshëm;

numëruesi i adresave;

­ operandi i regjistrimit;

­ operandët bazë dhe indeks;

­ operandët strukturorë;

rekorde.

Operandët janë komponentë elementë nga të cilët formohet një pjesë e një instruksioni makine, që tregojnë objektet mbi të cilat kryhet një operacion. Në një rast më të përgjithshëm, operandët mund të përfshihen si pjesë përbërëse në formacione më komplekse, të quajtura shprehjet.

Shprehjet janë kombinime operandësh dhe operatorësh, të trajtuar në tërësi. Rezultati i vlerësimit të një shprehjeje mund të jetë një adresë e ndonjë qelize memorie ose ndonjë vlere konstante (absolute).

­ 3 Llojet e deklaratave të asemblerit

Le të rendisim llojet e mundshme operatorët e montimit dhe rregullat sintaksore për formimin e shprehjeve asembler:

­ operatorët aritmetikë;

­ operatorët e turneve;

­ operatorët e krahasimit;

­ operatorët logjik;

­ operatori i indeksit;

­ operatori i mbivendosjes së tipit;

­ operatori i ripërcaktimit të segmentit;

­ operatori i emërtimit të tipit të strukturës;

­ operatori për marrjen e komponentit segment të adresës së shprehjes;

­ operatori për të marrë kompensimin e një shprehjeje.

1 Direktivat e montimit

­ Direktivat e montuesve janë:

1) Direktivat e segmentimit. Gjatë diskutimit të mëparshëm, ne zbuluam të gjitha rregullat themelore për të shkruar komanda dhe operandë në një program assembler. Çështja se si të formulohet saktë sekuenca e komandave në mënyrë që përkthyesi t'i përpunojë ato dhe mikroprocesori t'i ekzekutojë ato mbetet e hapur.

Kur shqyrtojmë arkitekturën e mikroprocesorit, mësuam se ai ka gjashtë regjistra segmentesh, përmes të cilëve mund të punojë njëkohësisht:

­ me një segment kodi;

­ me një segment të pirgut;

­ me një segment të të dhënave;

­ me tre segmente shtesë të të dhënave.

Fizikisht, një segment është një zonë memorie e zënë nga udhëzime dhe (ose) të dhëna, adresat e të cilave llogariten në lidhje me vlerën në regjistrin përkatës të segmentit. Përshkrimi sintaksor i një segmenti në montim është ndërtimi i paraqitur në Figurën 13:


­ Figura 13 - Përshkrimi sintaksor i një segmenti në asembler

Është e rëndësishme të theksohet se funksionaliteti i një segmenti është disi më i gjerë sesa thjesht ndarja e një programi në blloqe kodi, të dhënash dhe stek. Segmentimi është pjesë e një mekanizmi më të përgjithshëm që lidhet me koncepti i programimit modular. Ai supozon unifikimin e dizajnit të moduleve të objekteve të krijuara nga përpiluesi, duke përfshirë ato nga gjuhë të ndryshme programimi. Kjo ju lejon të kombinoni programe të shkruara në gjuhë të ndryshme. Operatorët në direktivën SEGMENT synojnë të zbatojnë variante të ndryshme të një shoqate të tillë.

2) Direktivat e menaxhimit të listimit. Direktivat e kontrollit të listimit ndahen në grupet e mëposhtme:

­ direktivat e përgjithshme të kontrollit të listimit;

­ direktivat për daljen në listë të skedarëve të përfshirë;

­ direktivat për nxjerrjen e blloqeve të montimit të kushtëzuar;

­ direktiva për listimin e makrove;

­ direktiva për nxjerrjen e informacionit në lidhje me referencat e kryqëzuara në listim;

­ direktiva për ndryshimin e formatit të listimit.

2 Kompleti i udhëzimeve të procesorit

Seti i udhëzimeve të procesorit është paraqitur në figurën 14.

Le të shqyrtojmë grupet kryesore të ekipeve.

­ Figura 14 - Klasifikimi i udhëzimeve të montimit

Ekipet janë:

1 Komandat e transferimit të të dhënave. Këto komanda zënë një vend shumë të rëndësishëm në grupin e instruksioneve të çdo procesori. Ata kryejnë funksionet e mëposhtme thelbësore:

­ ruajtja e përmbajtjes së regjistrave të brendshëm të procesorit në memorie;

­ kopjimi i përmbajtjes nga një zonë e memories në tjetrën;

­ shkrimi në pajisjet I/O dhe leximi nga pajisjet I/O.

Në disa procesorë, të gjitha këto funksione kryhen nga një komandë e vetme. MOV (për transferimet e bajtit - MOVB ) por me metoda të ndryshme të adresimit të operandëve.

Në procesorë të tjerë përveç komandës MOV ka disa komanda të tjera për të kryer funksionet e listuara. Gjithashtu, komandat e transferimit të të dhënave përfshijnë komandat e shkëmbimit të informacionit (përcaktimi i tyre bazohet në fjalë Shkëmbim ). Shkëmbimi i informacionit ndërmjet regjistrave të brendshëm, ndërmjet dy gjysmave të një regjistri ( SHKËRBIMI ) ose midis një regjistri dhe një lokacioni memorie.

2 Komandat aritmetike. Udhëzimet aritmetike i trajtojnë kodet e operandit si kode numerike binare ose binar-decimal. Këto komanda mund të ndahen në pesë grupe kryesore:

­ komandat e operacioneve në pikë fikse (mbledhje, zbritje, shumëzim, pjesëtim);

­ komandat me pikë lundruese (mbledhje, zbritje, shumëzim, pjesëtim);

­ komandat e pastrimit;

­ komandat e rritjes dhe zvogëlimit;

­ komanda e krahasimit.

3 Komandat e veprimeve me një pikë fikse punojnë me kode në regjistrat e procesorit ose në memorie si me kodet e zakonshme binare. Udhëzimet me pikë lundruese (pikë) përdorin formatin e paraqitjes së numrave me rend dhe mantisa (zakonisht këta numra zënë dy vendndodhje të njëpasnjëshme të memories). Në procesorët modernë të fuqishëm, grupi i udhëzimeve me pikë lundruese nuk kufizohet vetëm në katër operacione aritmetike, por përmban shumë udhëzime të tjera më komplekse, për shembull, llogaritjen e funksioneve trigonometrike, funksionet logaritmike, si dhe funksionet komplekse të nevojshme për përpunimin e zërit dhe imazhe.

4 Udhëzimet e fshirjes janë krijuar për të shkruar një kod zero në një regjistër ose qelizë memorie. Këto komanda mund të anashkalohen me komandat e transferimit zero, por komandat speciale të qarta zakonisht janë më të shpejta se komandat e transferimit.

5 Komanda për rritje (rritje me një) dhe zvogëlim

(zvogëlimi me një) janë gjithashtu shumë të përshtatshëm. Ato në parim mund të zëvendësohen nga mbledhja me një ose zbritja e një komande, por rritja dhe zvogëlimi janë më të shpejta se mbledhja dhe zbritja. Këto udhëzime kërkojnë një operand hyrës, i cili është gjithashtu një operand në dalje.

6 Instruksioni i krahasimit krahason dy operandë hyrës. Në fakt, ai llogarit diferencën midis këtyre dy operandëve, por nuk formon një operand dalës, por ndryshon vetëm bitet në regjistrin e statusit të procesorit bazuar në rezultatin e kësaj zbritjeje. Instruksioni tjetër pas instruksionit të krahasimit (zakonisht një instruksion i degës) do të analizojë bitet në regjistrin e statusit të procesorit dhe do të kryejë veprime në varësi të vlerave të tyre. Disa procesorë ofrojnë udhëzime për lidhjen e dy sekuencave të operandëve në memorie me zinxhirë.

7 komanda logjike. Udhëzimet logjike kryejnë operacione logjike (bitwise) në operandë, domethënë, ata i konsiderojnë kodet e operandit jo si një numër të vetëm, por si një grup bitësh të veçantë. Kështu ndryshojnë nga komandat aritmetike. Komandat logjike kryejnë veprimet themelore të mëposhtme:

­ logjik DHE, logjik OSE, moduli i shtimit 2 (Ekskluziv OSE);

­ ndërrime logjike, aritmetike dhe ciklike;

­ kontrollimi i biteve dhe operandeve;

­ vendosja dhe pastrimi i biteve (flamujve) të regjistrit të statusit të procesorit ( PSW).

Udhëzimet logjike ju lejojnë të llogaritni funksionet bazë logjike nga dy operandë hyrës, pak nga pak. Për më tepër, operacioni AND përdoret për të pastruar me forcë bitet e specifikuara (një kod maskë përdoret si një nga operandët, në të cilin bitet që do të pastrohen vendosen në zero). Operacioni OR përdoret për të vendosur me forcë bitet e specifikuara (si një nga operandët përdoret kodi i maskës, në të cilin bitet që kërkojnë vendosjen në një janë të barabartë me një). Operacioni "Exclusive OR" përdoret për të përmbysur bitet e specifikuara (një kod maskë përdoret si një nga operandët, në të cilin bitet që do të përmbysen vendosen në një). Udhëzimet kërkojnë dy operandë hyrje dhe formojnë një operand në dalje.

8 Komandat Shift lejojnë zhvendosjen e kodit të operandit pak nga pak djathtas (drejt biteve të rendit të ulët) ose majtas (drejt biteve të rendit të lartë). Lloji i zhvendosjes (logjik, aritmetik ose ciklik) përcakton se cila do të jetë vlera e re e bitit më domethënës (kur zhvendoset djathtas) ose bitit më pak domethënës (kur zhvendoset në të majtë), dhe gjithashtu përcakton nëse vlera e mëparshme nga biti më domethënës (kur zhvendoset në të majtë) do të ruhet diku ose biti më pak i rëndësishëm (kur zhvendoset në të djathtë). Zhvendosjet ciklike lejojnë që pjesët e një operandi të zhvendosen në mënyrë rrethore (në drejtim të akrepave të orës kur zhvendosen djathtas, ose në të kundërt kur zhvendosen në të majtë). Në këtë rast, flamuri i transportit mund ose nuk mund të përfshihet në unazën e ndërrimit. Biti i flamurit të transportit (nëse përdoret) ruan vlerën e bitit më të rëndësishëm kur qarkullon në të majtë dhe të bitit më pak të rëndësishëm kur qarkullon në të djathtë. Prandaj, vlera e bitit të flamurit të bartjes do të mbishkruhet në bitin më pak të rëndësishëm kur ecni me biçikletë në të majtë dhe në pjesën më të rëndësishme kur ecni me biçikletë në të djathtë.

9 Komandat e tranzicionit. Udhëzimet e kërcimit janë krijuar për të organizuar të gjitha llojet e sytheve, degëve, thirrjeve nënrutinë, etj., domethënë, ato prishin rrjedhën vijuese të programit. Këto komanda shkruajnë një vlerë të re në regjistrin e numëruesit të komandave dhe kështu bëjnë që procesori të kërcejë jo te komanda tjetër sipas radhës, por te ndonjë komandë tjetër në memorien e programit. Disa komanda tranzicioni ofrojnë kthim të mëtejshëm në pikën nga e cila është bërë kalimi, të tjerat nuk e parashikojnë këtë. Nëse sigurohet kthimi, atëherë parametrat aktual të procesorit ruhen në pirg. Nëse nuk sigurohet kthim, atëherë parametrat aktual të procesorit nuk ruhen.

Komandat e tranzicionit pa kthim prapa ndahen në dy grupe:

­ komandat e kërcimit të pakushtëzuar;

­ komandat e kërcimit të kushtëzuar.

Këto komanda përdorin fjalët Degë dhe kërce.

Udhëzimet e kërcimit të pakushtëzuar shkaktojnë një kërcim në një adresë të re pavarësisht nga çdo gjë. Ato mund të shkaktojnë një kërcim me një sasi të caktuar kompensimi (përpara ose prapa) ose në një adresë të caktuar memorie. Vlera e kompensimit ose vlera e re e adresës specifikohet si një operand hyrës.

Udhëzimet e kërcimit me kusht nuk shkaktojnë gjithmonë një kërcim, por vetëm kur plotësohen kushtet e specifikuara. Këto kushte janë zakonisht vlerat e flamujve në regjistrin e statusit të procesorit ( PSW ). Kjo do të thotë, gjendja e tranzicionit është rezultat i operacionit të mëparshëm që ndryshon vlerat e flamujve. Mund të ketë nga 4 deri në 16 kushte të tilla kërcimi në total. Disa shembuj të komandave të kërcimit me kusht:

­ tranzicioni nëse është i barabartë me zero;

­ tranzicioni nëse nuk është i barabartë me zero;

­ kërce nëse ka tejmbushje;

­ kërce nëse nuk ka tejmbushje;

­ tranzicioni nëse është më i madh se zero;

­ kërce nëse është më pak ose e barabartë me zero.

Nëse plotësohet kushti i tranzicionit, atëherë vlera e re ngarkohet në regjistrin e komandës. Nëse kushti i kërcimit nuk plotësohet, numëruesi i instruksioneve thjesht rritet dhe procesori zgjedh dhe ekzekuton instruksionin vijues sipas radhës.

Komanda e krahasimit (CMP) që i paraprin komandës së degës së kushtëzuar (ose edhe disa komandave të degëzimit të kushtëzuar) përdoret posaçërisht për të kontrolluar kushtet e kërcimit. Por flamujt mund të vendosen nga çdo komandë tjetër, për shembull, një komandë për transferimin e të dhënave, çdo komandë aritmetike ose logjike. Vini re se vetë komandat e kërcimit nuk i ndryshojnë flamujt, gjë që thjesht ju lejon të vendosni disa komanda kërcimi njëra pas tjetrës.

Komandat e ndërprerjes zënë një vend të veçantë midis komandave të kërcimit. Këto udhëzime kërkojnë një numër ndërprerjeje (adresa vektoriale) si një operand hyrës.

konkluzioni:

Gjuha e asamblesë është një paraqitje simbolike e një gjuhe makine. Gjuha e Asamblesë për çdo lloj kompjuteri është e ndryshme. Një program në gjuhën e asamblesë është një koleksion blloqesh memorie të quajtura segmente memorie. Çdo segment përmban një grup fjalish gjuhësore, secila prej të cilave zë një rresht të veçantë të kodit të programit. Fjalitë e asamblesë janë katër llojesh: komanda ose udhëzime, makro, direktiva, linja komentesh.

Të gjitha shkronjat latine janë karaktere të vlefshme kur shkruani tekstin e programit: A-Z,a-z... Në këtë rast, shkronjat e mëdha dhe të vogla konsiderohen ekuivalente; shifra nga 0 përpara 9 ; shenjat ? , @ , $ , _ , & ; ndarës , . () < > { } + / * % ! " " ? = # ^ .

Llojet e mëposhtme të deklaratave të asemblerit dhe rregullat e sintaksës për formimin e shprehjeve të asemblerit zbatohen. operatorët aritmetikë, operatorët e ndërrimit, operatorët e krahasimit, operatorët logjikë, operatori i indeksit, operatori i mbivendosjes së tipit, operatori i mbivendosjes së segmentit, operatori i emërtimit të llojit të strukturës, operatori për marrjen e komponentit të segmentit të një adrese shprehjeje, operatori për marrjen e zhvendosjes së një shprehjeje.

Sistemi i komandës ndahet në 8 grupe kryesore.

­ Pyetjet e kontrollit:

1 Çfarë është gjuha e asamblesë?

2 Cilat simbole mund të përdoren për të shkruar komanda në gjuhën e asamblesë?

3 Cilat janë etiketat dhe qëllimi i tyre?

4 Shpjegoni strukturën e komandave të asemblerit.

5 Listoni 4 lloje fjalish asembler.

Struktura e instruksionit në gjuhën e asamblesë Programimi në nivelin e instruksionit të makinës është niveli minimal në të cilin programimi kompjuterik është i mundur. Kompleti i udhëzimeve të makinës duhet të jetë i mjaftueshëm për të kryer veprimet e kërkuara duke lëshuar udhëzime në harduerin e makinës. Çdo instruksion i makinës përbëhet nga dy pjesë: një operativ që përcakton "çfarë duhet bërë" dhe një operand që përcakton objektet e përpunimit, domethënë çfarë duhet bërë. Një instruksion makinerie mikroprocesori i shkruar në gjuhën e asamblesë është një rresht i vetëm i formës së mëposhtme: instruksioni i etiketës / operandi (ët) direktivë; komentet Etiketa, komanda / direktiva dhe operandi janë të ndara nga të paktën një karakter hapësirë ​​ose skedë. Operatorët e komandës ndahen me presje.

Struktura e udhëzimeve në gjuhën e asamblesë Një udhëzim në gjuhën e asamblesë i tregon përkthyesit se çfarë veprimi duhet të ndërmarrë mikroprocesori. Direktivat e Assemblerit janë parametra të specifikuar në tekstin e programit që ndikojnë në procesin e montimit ose në vetitë e skedarit dalës. Operandi përcakton vlerën fillestare të të dhënave (në segmentin e të dhënave) ose elementet mbi të cilat do të veprohet nga komanda (në segmentin e kodit). Një instruksion mund të ketë një ose dy operandë, ose asnjë operand. Numri i operandëve përcaktohet në mënyrë implicite nga kodi i komandës. Nëse një komandë ose direktivë duhet të vazhdojë në rreshtin tjetër, atëherë përdoret karakteri i vijës së prapme: "". Si parazgjedhje, Assembler nuk bën dallimin midis shkronjave të mëdha dhe të vogla në shkrimin e komandave dhe direktivave. Shembuj të direktivës dhe komandës Numërimi db 1; Emri, direktiva, një operand mov eax, 0; Komanda, dy operandë

Identifikuesit janë sekuenca të karaktereve të vlefshme që përdoren për të treguar emrat e ndryshoreve dhe emrat e etiketave. Identifikuesi mund të përbëhet nga një ose më shumë nga karakteret e mëposhtme: të gjitha shkronjat e alfabetit latin; numrat nga 0 në 9; karaktere speciale: _, @, $,? ... Një pikë mund të përdoret si karakteri i parë i etiketës. Emrat e rezervuar të montuesve (direktivat, operatorët, emrat e komandave) nuk mund të përdoren si identifikues. Karakteri i parë i identifikuesit duhet të jetë një shkronjë ose karakter i veçantë. Gjatësia maksimale e identifikuesit është 255 karaktere, por përkthyesi pranon 32 karakteret e para, injoron pjesën tjetër. Të gjitha etiketat që janë shkruar në një rresht që nuk përmban një direktivë asembler duhet të përfundojnë me dy pika ":". Etiketa, komanda (direktiva) dhe operandi nuk duhet të fillojnë në ndonjë pozicion të caktuar në varg. Rekomandohet që ato të shënohen në një kolonë për lexueshmëri më të mirë të programit.

Etiketat Të gjitha etiketat që janë shkruar në një rresht që nuk përmban një direktivë asembler duhet të përfundojnë me dy pika ":". Etiketa, komanda (direktiva) dhe operandi nuk duhet të fillojnë në ndonjë pozicion të caktuar në varg. Rekomandohet që ato të shënohen në një kolonë për lexueshmëri më të mirë të programit.

Komentet Përdorimi i komenteve në një program përmirëson qartësinë, veçanërisht kur qëllimi i grupit të udhëzimeve nuk është i qartë. Komentet fillojnë në çdo rresht në modulin burimor me një pikëpresje (;). Të gjithë personazhet në të djathtë të “; “Në fund të rreshtit është një koment. Komenti mund të përmbajë çdo karakter të printueshëm, duke përfshirë "hapësirën". Një koment mund të përfshijë të gjithë rreshtin ose të ndjekë një komandë në të njëjtën linjë.

Struktura e një programi në gjuhën e asamblesë Një program i shkruar në gjuhën e asamblesë mund të përbëhet nga disa pjesë, të quajtura module, në secilën prej të cilave mund të përcaktohen një ose më shumë segmente të dhënash, stek dhe kodi. Çdo program i plotë i gjuhës së asamblesë duhet të përfshijë një modul kryesor, ose kryesor, nga i cili fillon ekzekutimi i tij. Një modul mund të përmbajë segmente programi, segmente të dhënash dhe një pirg, të deklaruar duke përdorur direktivat e duhura.

Modelet e memories Përpara se të deklaroni segmente, duhet të specifikoni modelin e memories duke përdorur një direktivë. Modifikuesi MODEL memory_model, call_convention, OS_type, stack_parameter Modelet bazë të memories së gjuhës së asamblesë: Modeli i memories Adresimi i kodit Adresimi i të dhënave Sistemi operativ Kodi dhe ndërthurja e të dhënave TË VOGËL AFËR MS-DOS Lejohen VOGËL AFERË MS-DOS, Windows Jo MESËM AFËR MS-DOS, Windows Jo MESËM LARGË- Windows NEAR, Asnjë KOMPAKT Afër MS-DOS LARG, Windows Jo MS-DOS LARGË I MADH, Windows Jo MS-DOS TË MADH LARG, Windows Jo Afër Windows 2000, Windows XP, Windows Lejohen FLAT Afër NT,

Modelet e memories Modeli i vogël funksionon vetëm në aplikacionet MS-DOS 16-bitësh. Në këtë model, të gjitha të dhënat dhe kodi ndodhen në një segment fizik. Në këtë rast, madhësia e skedarit të programit nuk i kalon 64 KB. Modeli i vogël mbështet një segment kodi dhe një segment të të dhënave. Të dhënat dhe kodi adresohen sa më afër kur përdorni këtë model. Modeli i mesëm mbështet segmente të shumta kodi dhe një segment të dhënash, me të gjitha lidhjet në segmentet e kodit të konsideruara larg si parazgjedhje dhe lidhjet në një segment të dhënash si afër. Modeli kompakt mbështet segmente të shumta të të dhënave duke përdorur adresimin e të dhënave të largëta dhe një segment afër të dhënave. Modeli i madh mbështet segmente të shumta kodi dhe segmente të shumta të dhënash. Si parazgjedhje, të gjitha referencat e kodit dhe të dhënave konsiderohen larg. Modeli i madh është pothuajse i barabartë me modelin e memories së madhe.

Modelet e memories Modeli i sheshtë supozon një konfigurim programi jo të segmentuar dhe përdoret vetëm në sistemet operative 32-bit. Ky model është i ngjashëm me modelin e vogël në atë që të dhënat dhe kodi përmbahen në një segment të vetëm 32-bit. Për të zhvilluar një program për modelin e sheshtë përpara direktivës. model banese duhet vendosur nje nga direktivat:. 386,. 486,. 586 ose. 686. Zgjedhja e direktivës së përzgjedhjes së procesorit përcakton grupin e udhëzimeve të disponueshme gjatë shkrimit të programeve. Shkronja p pas direktivës së përzgjedhjes së procesorit tregon një mënyrë funksionimi të mbrojtur. Adresimi i të dhënave dhe kodit është afër, me të gjitha adresat dhe treguesit 32-bit.

Modelet e memories. Modifikuesi MODEL memory_model, call_convention, OS_type, stack_parameter Parametri i modifikuesit përdoret për të përcaktuar llojet e segmenteve dhe mund të marrë vlerat e mëposhtme: përdorni 16 (segmentet e modelit të zgjedhur përdoren si 16-bit) përdorni 32 (segmentet e modelit të zgjedhur përdoren si 32-bit). Parametri call_convention përdoret për të përcaktuar se si kalohen parametrat kur thirret një procedurë nga gjuhë të tjera, duke përfshirë gjuhët e nivelit të lartë (C ++, Pascal). Parametri mund të marrë vlerat e mëposhtme: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

Modelet e memories. Modifikuesi MODEL memory_model, call_ convention, OS_type, stack_parameter OS_type është OS_DOS i parazgjedhur dhe aktualisht është vlera e vetme e mbështetur për këtë parametër. Stack_parametri është vendosur në: NEARSTACK (rregjistri SS është DS, zonat e të dhënave dhe stivit janë të vendosura në të njëjtin segment fizik) FARSTACK (Regjistri SS nuk është i barabartë me DS, zonat e të dhënave dhe të stivit janë të vendosura në segmente të ndryshme fizike). Parazgjedhja është NEARSTACK.

Një shembull i një programi "duke mos bërë asgjë". 686 P. MODEL BANESE, STDCALL. TË DHËNAT. KODI START: RET END START RET - komanda e mikroprocesorit. Siguron përfundimin e saktë të programit. Pjesa tjetër e programit lidhet me punën e përkthyesit. ... 686 P - Lejohen komandat e modalitetit të mbrojtura Pentium 6 (Pentium II). Kjo direktivë zgjedh grupin e udhëzimeve të asamblerit të mbështetur duke specifikuar modelin e procesorit. ... MODEL FLAT, stdcall është një model memorie të sheshtë. Ky model memorie përdoret në sistemin operativ Windows. stdcall është procedura e thirrjes së konventës së përdorur.

Një shembull i një programi "duke mos bërë asgjë". 686 P. MODEL BANESE, STDCALL. TË DHËNAT. KODI FILLIMI: RET FUND FILLIMI. DATA është një segment programi që përmban të dhëna. Ky program nuk përdor stack, kështu që. STACK mungon. ... KODI - një segment i programit që përmban kodin. START është një etiketë. FUND START - fundi i programit dhe një mesazh për përpiluesin se programi duhet të fillohet nga etiketa START. Çdo program duhet të përmbajë një direktivë END për të shënuar fundin e kodit burimor të programit. Të gjitha rreshtat që ndjekin direktivën END nuk merren parasysh.Etiketa e specifikuar pas direktivës END i tregon përkthyesit emrin e modulit kryesor nga i cili fillon programi. Nëse programi përmban një modul, etiketa pas direktivës END mund të hiqet.

Përkthyes të gjuhës Asambleje Përkthyesi është një program ose mjet teknik që konverton një program në një nga gjuhët e programimit në një program në gjuhën e synuar, të quajtur kodi i objektit. Përveç mbështetjes së kujtesës së udhëzimeve të makinës, çdo përkthyes ka grupin e vet të direktivave dhe mjeteve makro, të cilat shpesh janë të papajtueshme me asgjë. Llojet kryesore të përkthyesve të gjuhës së asamblesë: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - një montues falas me shumë kalime i shkruar nga Tomasz Grishtar (polak), NASM (Netwide Assembler) - një montues falas. për arkitekturën Intel x 86, u krijua nga Simon Tatham në bashkëpunim me Julian Hall dhe aktualisht po zhvillohet nga një ekip i vogël zhvillimi në Source. Falsifikoj. neto.

Src = "https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt = "(! LANG: Transmetimi i programit në Microsoft Visual Studio 2005 1) Krijo një projekt duke zgjedhur File-> I ri-> Projekti dhe"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src = "https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt = "(! LANG: Transmetimi i programit në Microsoft Visual Studio 2005 2) Në pemën e projektit (View-> Solution Explorer) shtoni"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Përkthimi i programit në Microsoft Visual Studio 2005 3) Zgjidhni llojin e skedarit Code C ++, por specifikoni emrin me shtesën. asm:

Përkthimi i programit në Microsoft Visual Studio 2005 5) Vendosni opsionet e përpiluesit. Klikoni me të djathtën në menunë Custom Build Rules ... në skedarin e projektit.

Përkthimi i programit në Microsoft Visual Studio 2005 dhe zgjidhni Microsoft Macro Assembler në dritaren që shfaqet.

Përkthimi i programit në Microsoft Visual Studio 2005 Kontrolloni duke klikuar me të djathtën në hello. asm të pemës së projektit të menysë Properties dhe vendosni General-> Tool: Microsoft Macro Assembler.

Src = "https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt = "(! LANG: Transmetimi i programit në Microsoft Visual Studio 2005 6) Përpiloni skedarin duke zgjedhur Build-> Build hello. Prj."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Programimi në Windows OS Programimi në Windows OS bazohet në përdorimin e funksioneve API (Application Program Interface). Numri i tyre arrin në 2000. Programi për Windows përbëhet kryesisht nga thirrje të tilla. I gjithë ndërveprimi me pajisjet e jashtme dhe burimet e sistemit operativ ndodh, si rregull, përmes funksioneve të tilla. Sistemi operativ Windows përdor një model memorie të sheshtë. Adresa e çdo lokacioni memorie do të përcaktohet nga përmbajtja e një regjistri 32-bit. Ekzistojnë 3 lloje të strukturave programore për Windows: dialog (dritarja kryesore - dialog), konsolë ose struktura pa dritare, struktura klasike (dritare, korniza teli).

Thirrja e funksioneve të Windows API Në skedarin ndihmës, çdo funksion API paraqitet si tipi emri i funksionit (FA 1, FA 2, FA 3) Lloji - lloji i vlerës së kthyer; ФАх - një listë e argumenteve formale sipas radhës që shfaqen.Për shembull, int Message. Kutia (HWND h. Wnd, LPCTSTR lp. Tekst, LPCTSTR lp. Titulli, UINT u. Lloji); Ky funksion shfaq një dritare me një mesazh dhe një buton daljeje (ose butona). Kuptimi i parametrave: h. Wnd - doreza në dritaren në të cilën do të shfaqet dritarja e mesazhit, lp. Tekst - teksti që do të shfaqet në dritare, lp. Titulli - teksti në mbishkrimin e dritares, u. Lloji - lloji i dritares, në veçanti, ju mund të përcaktoni numrin e butonave të daljes.

Thirrja e funksioneve të Windows API int Message. Kutia (HWND h. Wnd, LPCTSTR lp. Tekst, LPCTSTR lp. Titulli, UINT u. Lloji); Pothuajse të gjithë parametrat e funksioneve API janë në fakt numra të plotë 32-bit: HWND është një numër i plotë 32-bit, LPCTSTR është një tregues 32-bit në një varg, UINT është një numër i plotë 32-bit. Prapashtesa "A" shpesh i shtohet emrit të funksionit për të kaluar në versionet më të reja të funksionit.

Thirrja e funksioneve të Windows API int Message. Kutia (HWND h. Wnd, LPCTSTR lp. Tekst, LPCTSTR lp. Titulli, UINT u. Lloji); Kur përdorni MASM, duhet të shtoni @N N në fund të emrit - numrin e bajteve që argumentet e kaluara zënë në rafte. Për funksionet Win 32 API, ky numër mund të përcaktohet si numri i argumenteve n herë 4 (bajtë në secilin argument): N = 4 * n. Komanda CALL assembler përdoret për të thirrur funksionin. Në këtë rast, të gjitha argumentet e funksionit i kalohen atij nëpërmjet stakut (komandë PUSH). Drejtimi i kalimit të argumenteve: TË LARTË NE DJATHTAS - POSHT LARTË. Argumenti i parë që do të shtyhet në pirg është u. Lloji. Thirrja në funksionin e specifikuar do të duket kështu: Mesazhi i Thirrjes. Kuti. [email i mbrojtur]

Thirrja e funksioneve të Windows API int Message. Kutia (HWND h. Wnd, LPCTSTR lp. Tekst, LPCTSTR lp. Titulli, UINT u. Lloji); Rezultati i ekzekutimit të çdo funksioni API është, si rregull, një numër i plotë që kthehet në regjistrin EAX. Direktiva OFFSET është një "segment offset", ose, në terma gjuhësorë të nivelit të lartë, një "tregues" në fillim të një rreshti. Direktiva EQU, si #define në gjuhën C, përcakton një konstante. Direktiva EXTERN i tregon përkthyesit se funksioni ose identifikuesi është i jashtëm për modulin e dhënë.

Një shembull i programit "Përshëndetje të gjithëve!" ... 686 P. MODEL BANESE, STDCALL. STACK 4096. TË DHËNAT MB_OK EQU 0 STR 1 DB "Programi im i parë", 0 STR 2 DB "Përshëndetje të gjithëve!", 0 HW DD? Mesazh EXTERN. Kuti. [email i mbrojtur]: Afër. KODI START: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Mesazh. Kuti. [email i mbrojtur] RET FUND FILLIM

Direktiva INVOKE Përkthyesi i gjuhës MASM bën të mundur gjithashtu thjeshtimin e thirrjes së funksioneve duke përdorur një mjet makro - direktiva INVOKE: funksioni INVOKE, parametri1, parametri2, ... Në këtë rast, nuk ka nevojë të shtoni @ 16 në thirrje funksioni; parametrat shkruhen saktësisht sipas radhës në të cilën janë dhënë në përshkrimin e funksionit. parametrat shtyhen në pirg me anë të përkthyesit. për të përdorur direktivën INVOKE, duhet të keni një përshkrim të prototipit të funksionit duke përdorur direktivën PROTO në formën: Mesazh. Kuti. A PROTO: DWORD,: DWORD Nëse programi përdor shumë funksione Win 32 API, këshillohet të përdorni direktivën e përfshirë C: masm 32includeuser 32. inc

Puna e kursit

Në disiplinën "Programimi i sistemit"

Tema numër 4: "Zgjidhja e problemeve për procedurat"

Opsioni 2

UNIVERSITETI SHTETËROR I SIBERISË LINDORE

TEKNOLOGJIA DHE KONTROLL

____________________________________________________________________

KOLEGJI TEKNOLOGJIK

USHTRIMI

për punimin term

Disipline:
Tema: Zgjidhja e problemeve për procedurat
Interpretues (të): Glavinskaya Arina Aleksandrovna
Kreu: DambaevaSesegma Viktorovna
Përmbledhja e punës: studimi i rutinave në gjuhën e asamblesë,
zgjidhja e problemit duke përdorur nënprograme
1. Pjesa teorike: Informacion bazë për gjuhën e Asamblesë (set
komandat, etj.), Organizimi i nënprogrameve, Metodat e kalimit në parametra
në nënprograme
2. Pjesa praktike: Zhvilloni dy nënprograme, njëra prej të cilave konverton çdo shkronjë të caktuar në shkronja të mëdha (përfshirë shkronjat ruse) dhe tjetra e konverton shkronjën në shkronja të vogla.
konverton çdo shkronjë të dhënë në shkronjë të madhe dhe tjetra e konverton shkronjën në shkronjë të vogël.
konverton një shkronjë në shkronja të vogla.
Afatet e projektit sipas planit:
1. Pjesa teorike - 30% me 7 javë.
2. Pjesa praktike - 70% me 11 javë.
3. Mbrojtja - 100% nga 14 javë.
Kërkesat për regjistrim:
1. Zgjidhja dhe shënimi shpjegues i projektit të kursit duhet të paraqitet në
kopje elektronike dhe në letër.
2. Vëllimi i raportit duhet të jetë së paku 20 faqe të shtypura me makinë, pa përfshirë bashkëngjitjet.
3. RPZ hartohet në përputhje me GOST 7.32-91 dhe nënshkruhet nga kreu.

Drejtues i punës __________________

Kontraktori __________________

Data e lëshimit " 26 " shtator 2017 G.


Prezantimi. 2

1.1 Informacion bazë për gjuhën e Asamblesë. 3

1.1.1 Komandanti i komandës. 4

1.2 Organizimi i nënprogrameve në gjuhën e asamblesë. 4

1.3 Metodat e kalimit të parametrave në nënprograme. 6

1.3.1 Kalimi i parametrave nëpër regjistra .. 6

1.3.2 Kalimi i parametrave nëpër pirg. 7

2 SEKSIONI PRAKTIK .. 9

2.1 Deklarata e problemit. 9

2.2 Përshkrimi i zgjidhjes së problemit. 9

2.3 Testimi i programit .. 7

konkluzioni. tetë

Referencat .. 9


Prezantimi

Është e njohur se është e vështirë të programosh në Assembler. Siç e dini, tani ka shumë gjuhë të ndryshme. nivel të lartë që ju lejojnë të shpenzoni shumë më pak përpjekje kur shkruani programe. Natyrisht, lind pyetja kur një programuesi mund të ketë nevojë të përdorë Assembler kur shkruan programe. Aktualisht, ekzistojnë dy fusha në të cilat përdorimi i gjuhës së asamblesë është i justifikuar dhe shpesh i nevojshëm.

Së pari, këto janë të ashtuquajturat programe të sistemit të varur nga makina, zakonisht ato kontrollojnë pajisje të ndryshme në kompjuter (programe të tilla quhen drejtues). Këto programe të sistemit përdorin udhëzime të veçanta të makinës që nuk kanë nevojë të përdoren në mënyrë të zakonshme (ose, siç thonë ata aplikuar) programe. Këto komanda janë të pamundura ose shumë të vështira për t'u përcaktuar në një gjuhë të nivelit të lartë.

Fusha e dytë e aplikimit të Assembler lidhet me optimizimin e ekzekutimit të programit. Shumë shpesh, programet e përkthimit (përpiluesit) nga gjuhët e nivelit të lartë prodhojnë një program shumë joefikas të gjuhës makine. Kjo zakonisht vlen për programet e një natyre llogaritëse, në të cilat një pjesë shumë e vogël (rreth 3-5%) e programit (laku kryesor) ekzekutohet shumicën e kohës. Për të zgjidhur këtë problem, mund të përdoren të ashtuquajturat sisteme programimi shumëgjuhësh, të cilat ju lejojnë të shkruani pjesë të programit në gjuhë të ndryshme. Zakonisht, pjesa kryesore e programit shkruhet në një gjuhë programimi të nivelit të lartë (Fortran, Pascal, C, etj.), dhe seksionet kritike për kohën e programit shkruhen në Assembler. Në këtë rast, shpejtësia e të gjithë programit mund të rritet ndjeshëm. Kjo është shpesh mënyra e vetme për ta bërë programin të prodhojë një rezultat në një kohë të arsyeshme.

Qëllimi i punës së kësaj lënde është të fitojë aftësi praktike në programim në gjuhën asemble.

Detyrat e punës:

1. Të studiojë informacionin bazë për gjuhën Assembler (struktura dhe përbërësit e programit Assembler, formati i komandave, organizimi i nënprogrameve etj.);

2. Të studiojë llojet e veprimeve të biteve, formatin dhe logjikën e udhëzimeve logjike të Asemblerit;

3. Zgjidh një problem individual mbi përdorimin e nënprogrameve në Assembler;

4 .. Formuloni një përfundim për punën e bërë.

1 SEKSION TEORIK

Kuptimi i gjuhës Asambleje

Assembler është një gjuhë programimi e nivelit të ulët që është një format i lexueshëm nga njeriu për shkrimin e udhëzimeve të makinës.

Udhëzimet e gjuhës asambleje korrespondojnë një-për-një me udhëzimet e procesorit dhe, në fakt, përfaqësojnë një shënim simbolik të përshtatshëm (kodi mnemonik) i komandave dhe argumenteve të tyre. Gjithashtu, gjuha e asamblesë ofron abstraksione bazë të softuerit: lidhjen e pjesëve të programit dhe të dhënave përmes etiketave me emra simbolikë dhe direktiva.

Direktivat e Assembler-it ju lejojnë të përfshini blloqe të dhënash (të përshkruara në mënyrë eksplicite ose të lexuara nga një skedar) në program; përsëritni një fragment të caktuar një numër të caktuar herë; përpiloni një fragment me kusht; vendosni adresën e ekzekutimit të fragmentit, ndryshoni vlerat e etiketave gjatë procesit të përpilimit; përdorni makro me parametra etj.

Avantazhet dhe disavantazhet

· Shuma minimale e kodit të tepërt (duke përdorur më pak instruksione dhe aksese në kujtesë). Si rezultat - shpejtësi më e lartë dhe madhësi më e vogël e programit;

· Sasi të mëdha kodi, një numër i madh detyrash të vogla shtesë;

· Lexueshmëri e dobët e kodit, vështirësi në mirëmbajtje (debugging, shtimi i veçorive);

· Vështirësia e zbatimit të paradigmave të programimit dhe çdo konvente tjetër më komplekse, kompleksiteti i zhvillimit të përbashkët;

· Më pak biblioteka të disponueshme, përputhshmëria e tyre e ulët;

· Qasje direkte në harduer: portat hyrëse-dalëse, regjistrat specialë të procesorit;

· "Përshtatje" maksimale për platformën e dëshiruar (përdorimi i udhëzimeve speciale, veçoritë teknike të "hardware");

· Intolerancë ndaj platformave të tjera (përveç të pajtueshme binar).

Përveç udhëzimeve, një program mund të përmbajë direktiva: komanda që nuk përkthehen drejtpërdrejt në instruksione të makinës, por kontrollojnë funksionimin e përpiluesit. Kompleti dhe sintaksa e tyre ndryshojnë ndjeshëm dhe nuk varen nga platforma e harduerit, por nga përpiluesi i përdorur (duke krijuar dialekte të gjuhëve brenda së njëjtës familje arkitekturash). Si një grup direktivash, mund të veçohen:

· Përkufizimi i të dhënave (konstantet dhe variablat);

· Menaxhimi i organizimit të programit në memorie dhe parametrave të skedarit dalës;

· Vendosja e mënyrës së funksionimit të kompajlerit;

· Të gjitha llojet e abstraksioneve (d.m.th. elementet e gjuhëve të nivelit të lartë) - nga hartimi i procedurave dhe funksioneve (për të thjeshtuar zbatimin e paradigmës së programimit procedural) deri te strukturat e kushtëzuara dhe unazat (për paradigmën e programimit të strukturuar);

· Makro.

Komandanti i grupit

Komandat tipike të gjuhës së asamblesë janë:

Komandat e transferimit të të dhënave (lëvizje, etj.)

Komandat aritmetike (add, sub, imul, etj.)

Operacionet logjike dhe bitwise (ose, dhe, xor, shr, etj.)

· Komandat për të kontrolluar ekzekutimin e programit (jmp, loop, ret, etj.)

Ndërprerja e komandave të thirrjes (ndonjëherë të referuara si komanda kontrolli): int

Komandat I/O për portet (në, jashtë)

Për mikrokontrolluesit dhe mikrokompjuterët, komandat janë gjithashtu karakteristike që kryejnë kontrollin dhe kalimin sipas kushteve, për shembull:

· Jne - lëviz nëse nuk është e barabartë;

· Jge - kërce nëse është më i madh ose i barabartë.

Artikujt kryesorë të lidhur