montāžas valoda. Sāksim programmēt montāžas valodā. Termina "montāžas valoda" izcelsme un kritika

Nosūtiet savu labo darbu zināšanu bāzē ir vienkārši. Izmantojiet zemāk esošo veidlapu

Studenti, maģistranti, jaunie zinātnieki, kuri izmanto zināšanu bāzi savās studijās un darbā, būs jums ļoti pateicīgi.

montiera programmēšanas valoda

Ievads

Valodas vēsture

Turbo montētājs (TASM)

Programmas pārtraukšanas sistēma

Pārtraukšanas mehānisms

Pārtraukšanas mehānisma darbība

Secinājums

Bibliogrāfija

Pieteikums

Ievads

Progress datortehnoloģijas noteica jaunu daudzveidīgu zīmju sistēmu ierakstīšanas algoritmu - programmēšanas valodu rašanās procesu. Ir daudz programmēšanas valodu, taču mēs koncentrēsimies uz montāžu.

Neskatoties uz to, ka mūsdienās programmētājs var izmantot daudzas programmēšanas valodas, kas ir daudz vienkāršākas nekā Assembly, zināšanas par Assembly un prasme tajā programmēt nekad nebūs liekas. Šo faktu apstiprina šādi argumenti:

1. Citās programmēšanas valodās ne vienmēr ir iespējams uzrakstīt pieteikumu, kas pilnībā atbilst prasībām. Un dažos gadījumos tas ir pilnīgi neiespējami. Jebkuru pieteikumu var uzrakstīt Assembler programmēšanas valodā.

2. Dažkārt programmēšanas valodas augsts līmenis nevar nodrošināt nepieciešamo veiktspēju. Un programma, kas izveidota programmā Assembler, vienmēr ir ātra.

3. Augsta līmeņa valodās izveidoto lietojumprogrammu izmērs ir daudz lielāks nekā programmā Assembler izveidotajām lietojumprogrammām.

4. Montāžas valoda ļauj strādāt tieši ar aparatūru, kas atsevišķos gadījumos dod programmētājam priekšrocības un vēlamo rezultātu. Lietojumprogramma augsta līmeņa valodā darbojas ar aparatūras ierīcēm caur rakstītiem moduļiem, t.i., tas neļaus programmētājam neko mainīt un līdz ar to iegūt vēlamo rezultātu.

5. Asamblejas valodas zināšanas dod lielākas priekšrocības salīdzinājumā ar tiem, kas programmē tikai augsta līmeņa valodās. Zinošs montētājs pārzina gan datora uzbūvi, gan aparatūras ierīču uzbūvi.

Mērķis:

aprakstīt Assembler programmēšanas valodu;

apzināt valodas priekšrocības un trūkumus;

aprakstiet Turbo Assembler;

Iepazīstieties ar pārtraukšanas mehānismu.

Montāžas valoda

Montētāja vēsture

Programmētājiem jau bija pazīstams apakšprogrammas jēdziens: Greisa Hopere un viņas kolēģi Otrā pasaules kara laikā izmantoja apakšprogrammas Harvard Mark 1 apakšprogrammas, taču katra apakšprogramma atrisināja noteiktu problēmu.

Apakšprogrammas ir neatkarīgi datorprogrammas fragmenti, kurus izmanto atkārtoti un vajadzības gadījumā izsauc no galvenās programmas. Piemēram, viena apakšprogramma var aprēķināt kvadrātsakni, bet cita liks datoram parādīt rakstzīmi.

Pirmajiem programmētājiem gandrīz vienmēr bija piezīmju grāmatiņas ar visbiežāk izmantoto apakšprogrammu ierakstu, lai vajadzības gadījumā tās nepārkompilētu. Problēma bija tāda, ka apakšprogrammas komandu un mainīgo atrašanās vietas adreses atmiņā mainījās atkarībā no tās izvietojuma pēdējā. Apakšprogrammu iestatīšanai uz noteiktu vietu atmiņā acīmredzami bija nepieciešama automatizācija, un tas tika izdarīts pirmo reizi Edsac. Kembridžas programmētāji sāka, rakstot vienotu apakšprogrammu kopu, kas veidoja bibliotēku. Pēc tam pietika ievadīt tikai īsu komandu - un dators paveica visu apakšprogrammas iestatīšanas un ievietošanas darbu programmā.

Moriss Vilkss Edsac mnemonisko shēmu un apakšprogrammu bibliotēku sauca par montāžas sistēmu (angļu valodā assembly system — no tā izriet arī vārds "assembler"), jo tā montēja apakšprogrammu secības.

Montētājs (no angļu valodas assembler - assembler) - datorprogramma, kompilators avota kods montāžas valodas programmu mašīnvalodas programmā.

Montāžas valodu krievu valodā bieži sauc par vienkārši montētāju. Tulkotāju no šīs valodas parasti sauc arī par vienkārši montētāju, kas dažos gadījumos var radīt neskaidrības. Asamblejas valodas tulkošanas process mašīnkodā bieži tiek saukts par montāžu.

Termina "asamblejas valoda" lietošana var radīt nepareizu priekšstatu, ka pastāv viena valoda zems līmenis vai vismaz standarts šādām valodām, kas absolūti neatbilst patiesībai. Tāpēc, nosaucot valodu, kurā rakstīta konkrētā programma, vēlams norādīt, kādai arhitektūrai tā paredzēta un kurā valodas dialektā rakstīta.

Montāžas valodas programmēšana

Assembler ir zema līmeņa programmēšanas valoda, kas ir cilvēka uztverei ērts mašīnas instrukciju rakstīšanas formāts.

Montāžas valodas komandas viens pret vienu atbilst procesora komandām un faktiski ir ērta simboliska forma komandu un to argumentu rakstīšanai. Montāžas valoda nodrošina arī pamata programmēšanas abstrakcijas: programmas daļu un datu sasaisti, izmantojot etiķetes ar simboliskiem nosaukumiem un direktīvām.

Montāžas direktīvas ļauj programmā iekļaut datu blokus (skaidri aprakstītus vai nolasītus no faila); atkārtojiet noteiktu fragmentu noteiktu skaitu reižu; sastādīt fragmentu atbilstoši nosacījumam; iestatiet fragmenta izpildes adresi, mainiet etiķetes vērtības kompilācijas laikā; izmantot makro definīcijas ar parametriem utt.

Katram procesora modelim principā ir savs instrukciju kopums un atbilstošā montāžas valoda (vai dialekts).

Montāžas programmas var būt ļoti efektīvas. No programmētājiem ar vienādām prasmēm un spējām, kas strādā montāžas valodā, lai izveidotu programmu, kas ir kompaktāka un ātrāka par to pašu programmu, kas rakstīta augsta līmeņa valodā. Tas attiecas uz gandrīz visām mazām vai vidējām programmām. Diemžēl, palielinoties izmēram, montāžas valodas programmas zaudē dažas priekšrocības. Tas ir saistīts ar uzmanību detaļām, kas nepieciešama montāžas programmā. Kā redzat, montāžas valodai ir jāplāno katra datora darbība. Mazās programmās tas ļauj optimizēt programmas darbu ar aparatūru. Savukārt lielās programmās milzīgs detaļu daudzums var traucēt efektīvi strādāt pie pašas programmas, pat ja atsevišķi programmas komponenti izrādās ļoti labi. Protams, montāžas valodas programmēšana neatbilst katras programmas vajadzībām.

Montāžas valodas programmas ir ļoti precīzas. Tā kā šī valoda programmētājam ļauj strādāt tieši ar visu aparatūru, montāžas programma var veikt tādas darbības, ko neviena cita programma nevar. Neapšaubāmi, I/O ierīču programmēšanā, kur nepieciešama kontrole pār atsevišķiem ierīces reģistru bitiem, programmēšana montāžas valodā ir vienīgā piemērotā izvēle.

Ir skaidrs, ka montāžas valodas efektivitātei un precizitātei ir priekšrocības. Bet tās detaļas rada dažas problēmas. Kad programmēšanai jāizvēlas montāžas valoda?

Protams, jums vajadzētu izmantot montāžas valodas programmas, ja nav citas iespējas rakstīt programmu. Piemēram, IBM programmētāji rakstīja visas I/O ierīču vadības programmas IBM PC, izmantojot Assembler procedūras. I/O ierīču un pārtraukumu sistēmas kontrolei bija nepieciešama montāžas valodas precizitāte, ko nevar nodrošināt neviena cita programmēšanas valoda. Līdzīgi montāžas valodā IBM uzrakstīja diagnostikas procedūras, kurām jāpārbauda katra aparatūra.

Montāžas valoda ir nepieciešama arī tad, ja programmas veiktspēja ir vissvarīgākā. Tas varētu būt programmas izpildes laiks vai galīgais lielums. Fortran Mathematics Library ir tādas programmas piemērs, kurai nepieciešama labs sniegums, gan laika, gan izmēra ziņā. Matemātiskās procedūras ir daļa no jebkuras Fortran programmas, tāpēc tām vajadzētu aizņemt pēc iespējas mazāk vietas. Turklāt šīs procedūras kontrolē visas Fortran programmas matemātiskās funkcijas un bieži tiek izmantotas. Tāpēc tie ir jāizpilda ātri.

Kura programma nav piemērota montāžas valodai? Protams, tajā var rakstīt jebkuru programmu, taču labāk ir strādāt ar lielu programmu augsta līmeņa valodā, piemēram, C vai C#. Šīs valodas ļauj jums koncentrēties uz savu problēmu. Jums nav tieši jāsaskaras ar aparatūras un procesora sarežģījumiem. Augsta līmeņa valodas ļauj atkāpties un redzēt mežu caur kokiem.

Programmējot montāžas valodā un tikai rakstot programmas šādā detalizācijas līmenī, jūs varat saprast, kā iekārta darbojas zemākajā līmenī. Ja vēlaties uzzināt visu par datoru, jums ir jāzina montāžas valoda. Vienīgais veids, kā to panākt, ir rakstīt programmas šajā valodā.

Mūsdienās populārākie ir Borland's Turbo Assembler (TASM), Hutch's Macro Assembler for Windows32 (MASM32) (pamatojoties uz Microsoft veco MASM), Flat Assembler (FASM) un Netwide Assembler (NASM), ko izstrādājusi NASM Development Team. Visi šie montieri programmētājam sniedz ļoti plašas iespējas. Viņi var rakstīt programmas gan DOS, gan Windows.

Ir arī daudz citu veidu montētāju, kuru skaits pieaug. Piemēram: CodeX Assembler, Gema Assembler, Light Macro Assembler (LASM), Lazy Assembler (LZASM), Table Driven Assembler (TDASM), NewBasic++ Assembler (NBASM), TMA Macro Assembler utt.

Valodas priekšrocības un trūkumi

Priekšrocības

Prasmīgs programmētājs parasti spēj uzrakstīt efektīvāku montāžas programmu nekā tās, ko ģenerē tulki no augsta līmeņa programmēšanas valodām, tas ir, montāžas programmām ir tendence izmantot mazāk instrukciju un piekļuves atmiņai, kas var palielināt ātrumu un samazināt programmas lielumu. .

Konkrētu platformai raksturīgo iespēju maksimāla izmantošana, kas arī ļauj izveidot efektīvākas programmas ar mazākiem resursiem.

Programmējot montētājā, ir iespējama tieša piekļuve aparatūrai, ieskaitot I / O portus, procesora reģistrus utt.

Montāžas valoda tiek izmantota, lai izveidotu aparatūras draiverus un operētājsistēmas kodolus.

Montāžas valoda tiek izmantota, lai izveidotu "firmware" BIOS.

Ar montāžas valodas palīdzību tiek izveidoti augsta līmeņa valodu kompilatori un tulki, kā arī tiek ieviesta platformu savietojamība.

Ir iespējams izpētīt citas programmas, kurām trūkst pirmkoda, izmantojot demontētāju.

Trūkumi

Asemblera galvenā priekšrocība ir gandrīz pilnībā izlīdzināta ar labu optimizāciju mūsdienu augsta līmeņa valodu kompilatoros.

Mašīnorientācijas dēļ (“zemais” līmenis), salīdzinot ar augsta līmeņa programmēšanas valodām, cilvēkam ir grūtāk lasīt un saprast programmu, tā sastāv no pārāk “maziem” elementiem - kļūst mašīnas instrukcijas, programmēšana un atkļūdošana. sarežģītāk, palielinās darbietilpība un, iespējams, tiks ieviestas kļūdas. Sadarbības izstrādes sarežģītība ir ievērojami palielinājusies.

Parasti ir pieejams mazāk bibliotēku, salīdzinot ar mūsdienu industriālajām programmēšanas valodām.

Programmas nevar pārnest uz datoriem ar atšķirīgu arhitektūru un komandu sistēmu (izņemot bināros saderīgos).

Turbo montētājs (TASM)

Borland's Turbo Assembler ir daudzpakāpju montētājs ar uz priekšu atsauces izšķirtspēju, montāžas ātrumu līdz 48 000 rindiņām minūtē (datorā IBM PS/2 Model 60), saderīgs ar Microsoft MASM makro montētāju un papildu sintakses režīma izmantošanu. Neatkarīgi no jūsu programmēšanas pieredzes jūs noteikti novērtēsiet šīs funkcijas, kā arī vairākas citas funkcijas, kas ievērojami atvieglo montāžas valodas programmēšanu.

Starp šiem līdzekļiem īsumā var minēt:

pilnīgs 80386 procesora atbalsts;

uzlabota sintaktiskā tipa pārbaude;

vienkāršotas segmentu definīcijas direktīvas;

uzlabota saraksta pārvaldība;

POP un PUSH instrukciju paplašinājumi;

paplašināts CALL priekšraksts ar argumentiem un izvēles valodas parametru;

vietējās etiķetes;

lokālie identifikatori stekā un izsaukuma argumenti procedūrās;

struktūras un asociācijas;

ligzdotas direktīvas;

QUIRK režīms, emulē MASM;

pilna avota līmeņa atkļūdošana ar Turbo atkļūdotāju;

iebūvēta savstarpējās atsauces ģenerēšanas utilīta (TCREF);

konfigurācijas faili un pakešfaili.

Turbo Assembler ir spēcīgs montētājs, kas darbojas ar komandrinda, kas ņem jūsu avota failus (failus ar paplašinājumu *.asm*) un no tiem izveido objektu moduļus (failus ar paplašinājumu *.obj*). Pēc tam varat izmantot Borland TLINK saistīšanas programmu. EXE, atšķirīgs liels ātrums saites, lai saistītu iegūtos objektu moduļus un izveidotu izpildāmos failus (failus ar paplašinājumu *.exe*).

Turbo Assembler ir paredzēts darbam ar 80x86 un 80x87 sērijas procesoriem (lai iegūtu sīkāku informāciju, 80x86/80x87 procesoru instrukciju komplekts ir aprakstīts attiecīgajās Intel rokasgrāmatās).

Papildus pilnīgam Microsoft tulkotāja atbalstam Turbo Assembler ir papildus iespējas, kas apvienoti režīmā, ko izstrādātāji sauc par Ideal. Izmantojot šo režīmu, iesācējs programmētājs var izmantot vizuālāku un vienkāršāku programmēšanas stilu. Pieredzējuši montētāju programmētāji var izmantot Ideālā režīma iespējas, piemēram, ligzdotas struktūras, savienības.

Svarīga Ideal režīma iezīme ir datu tipu pārbaudes izmantošana, kas ir līdzīga augsta līmeņa valodām, kas ļauj atklāt daudzas kļūdas tulkošanas stadijā. Starp daudzām citām svarīgām ideālā režīma priekšrocībām ir šādas:

Spēja lietot vienus un tos pašus nosaukumus, lai atsauktos uz dažādu struktūru dalībniekiem;

HIGH un LOW operatoru pielietojums;

EQU izteiksmju iepriekšēja novērtēšana;

Pareiza grupās apvienoto datu segmentu pārvaldība;

Uzlabota direktīvu izmantošana;

Saprātīgs iekavu lietojums izteicienos.

Turbo Assembler nodod argumentus procedūrām steka rāmī augsta līmeņa valodās, pirms procedūras izsaukšanas ievietojot argumentus stekā. Procedūras, kas rakstītas augsta līmeņa valodās, pēc vajadzības izspiež argumentus no steka. Izejot, procedūra var noņemt argumentus no steka vai atstāt šo darbību izsaukšanas procedūrai.

Tradicionālais C++ un Assembly valodā rakstīto programmu apvienošanas veids ir atsevišķa kompilācija un pēc tam saistīšana vienā izpildāmā failā. Šajā gadījumā varat izmantot Borland C ++ kompilatoru, kas izsauc Turbo Assembler, lai tulkotu montētāja programmu.

Programmas izstrāde Turbo Assembler valodā ietver četrus posmus:

1. posms. Programmas avota teksta sagatavošana un formatēšana kā teksta fails (viens vai vairāki), izmantojot kādu redaktoru DOS formātā ar paplašinājumu *. asm*.

2. posms. Programmas salikšana, izmantojot Tasm kompilatoru, kā rezultātā tiek iegūts objekta fails ar paplašinājumu *. obj*. Ja programma sastāv no vairākiem failiem (moduļiem), tie tiek samontēti neatkarīgi viens no otra. Ja tulkošanas laikā tiek atrastas kļūdas, objekta fails netiek izveidots, bet tiek ģenerēts kļūdas ziņojums. Kļūdas tiek novērstas, pēc tam pārraide tiek atkārtota. Objekta failu (programmas bināro kodu) nevar palaist izpildei, jo tajā nav informācijas par programmas segmentu ielādi datora atmiņā.

3. posms. Programmas saistīšanu veic saistītājs (linker) Turbo Linker, un tas sastāv no objektu moduļu apvienošanas vienā izpildāmā failā ar programmas sākuma adreses piešķiršanu. Izpildāmajam failam ir paplašinājums *. exe*. 2. un 3.posmi definējiet programmas izpildāmā faila sagatavošanas procesu, ko sauc par tulkošanu.

4. posms sastāv no programmas atkļūdošanas, izmantojot Turbo Debugger, kas būs galvenais rīks komandu formātu, to kodēšanas un programmas mainīgo attēlojuma atmiņa izpētei.

Programmas pārtraukšanas sistēma

Viena no būtiskām atšķirībām starp datoru un jebkuru citu iekārtu ir tā, ka dators spēj reaģēt uz neparedzamiem notikumiem procesā. Šī iespēja tiek nodrošināta ar datora īpašas īpašības - pārtraukuma aparāta palīdzību. Pārtraukums ļauj datoram apturēt jebkuru darbību un pārslēgties uz citu atkarībā no tā, kas izraisa šo pārtraukumu. Piemēram, nospiežot atbilstošo tastatūras taustiņu.

Spēja pārtraukt atrisina šķietami visgrūtāko mūsu datora efektivitātes problēmu. No vienas puses, mēs vēlamies, lai dators veiktu darbu, ko mēs tam esam devuši. No otras puses, mums tas ir nepieciešams, lai reaģētu uz jebkuru no mūsu komandām, piemēram, izmantojot tastatūru. Ja dators bez uzmanības novēršanas spētu darīt tikai to, kas tam tiek prasīts, tas nespētu laicīgi atbildēt uz mūsu pieprasījumiem, nepārtraukti neuzraugot tastatūras darbību. Pārtraukšanas sistēma ļauj tai reaģēt uz tastatūras sūtītajiem signāliem, kā arī citiem signāliem, kuriem jāpievērš uzmanība, kamēr dators ir aizņemts ar citiem darbiem.

Mūsu datora mikroprocesoram ir "iedzimta" spēja pārtraukt darbības, tomēr tam ir uzticams līdzeklis pārtraukto darbu glabāšanai. Šim nolūkam tiek izmantota mikroprocesora kaudze. Kad notiek pārtraukums, stekā tiek saglabāts ieraksts par to, ko dators tajā brīdī darīja, lai pēc pārtraukuma beigām mēs varētu atgriezties vietā, no kuras mums bija jāatkāpjas. Šis ir viens no vairākiem skursteņa izmantošanas veidiem, taču tas ir vissvarīgākais. Bez kaudzes, kurā varam glabāt informāciju par veicamajiem darbiem, pati pārtraukšanas ideja nebūtu realizējama.

Pārtraukšanas mehānisms

Pārtraukums (angļu interrupt) - signāls, kas informē procesoru par notikuma iestāšanos. Šajā gadījumā pašreizējās komandu secības izpilde tiek apturēta, un vadība tiek nodota pārtraukumu apstrādātājam, kas reaģē uz notikumu un apkalpo to, pēc tam atgriež vadību pārtrauktajam kodam.

Programmatūras pārtraukums ir sinhrons pārtraukums, ko programma var ieviest, izmantojot īpašu instrukciju.

Pārtraukumi ir vislabāk piemēroti tādu notikumu apstrādei, kas notiek asinhroni attiecībā uz programmas izpildi. Pārtraukumu var uzskatīt par kādu īpašu notikumu sistēmā, kas prasa tūlītēju atbildi. Piemēram, labi izstrādātas izturīgas sistēmas izmanto strāvas padeves pārtraukumu, lai veiktu reģistra rakstīšanas un rakstīšanas rutīnas. brīvpiekļuves atmiņa uz magnētisko datu nesēju, lai pēc strāvas padeves atjaunošanas jūs varētu turpināt darbu no tās pašas vietas.

Šķiet skaidrs, ka dažādu iemeslu dēļ ir iespējami dažādi pārtraukumi. Tāpēc pārtraukums netiek uzskatīts tikai par tādu: ar to ir saistīts skaitlis, ko sauc par pārtraukuma tipa numuru vai vienkārši pārtraukuma numuru. Notikums ir saistīts ar katru pārtraukuma numuru. Sistēma spēj atpazīt, kurš pārtraukums, ar kādu numuru tas noticis, un sāk šim skaitlim atbilstošu procedūru.

Programmas pašas var izsaukt pārtraukumus ar noteiktu numuru. Lai to izdarītu, viņi izmanto komandu INT. Tie ir tā sauktie programmatūras pārtraukumi. Programmatūras pārtraukumi nav asinhroni, kā tos sauc no programmas.

X86 procesoros, lai skaidri izsauktu sinhrono pārtraukumu, ir Int instrukcija, kuras arguments ir pārtraukuma numurs (no 0 līdz 255). Ar IBM PC saderīgos datoros dažus pārtraukumus apstrādā BIOS rutīnas, kas tiek glabātas ROM, un tas kalpo kā interfeiss, lai piekļūtu BIOS nodrošinātajam pakalpojumam. Pārtraukumus var apstrādāt arī paplašināšanas karšu (piemēram, tīkla vai video karšu) BIOS, operētājsistēma un pat parastās (lietojumprogrammu) programmas, kas pastāvīgi atrodas atmiņā, kamēr citas programmas darbojas (tā sauktās rezidentu programmas). ). Atšķirībā no reālā režīma x86 procesoru aizsargātajā režīmā parastās programmas nevar apkalpot pārtraukumus, šī funkcija ir pieejama tikai sistēmas kodam (operētājsistēmai).

MS-DOS izmanto pārtraukumus, kas numurēti no 20h līdz 3Fh, lai sazinātos ar saviem moduļiem un lietojumprogrammām (numuri ir norādīti heksadecimālā sistēma calculus, kā tas ir ierasts, programmējot x86 montāžas valodā). Piemēram, piekļuve galvenajai MS-DOS funkciju kopai tiek veikta, izpildot Int 21h instrukciju (šajā gadījumā funkcijas numurs un tā argumenti tiek pārsūtīti reģistros). Šī pārtraukumu numuru piešķiršana nav savienota ar vadu, un citas programmas var instalēt savus pārtraukumu apdarinātājus, nevis esošos apdarinātājus, ko instalējusi MS-DOS vai citas programmas, un tos parasti izmanto, lai mainītu funkcionalitāti vai paplašinātu sistēmas funkciju sarakstu. Arī vīrusi izmanto šo iespēju.

Pārtraukšanas mehānisma darbība

Katrs definētais pārtraukums tiek identificēts pēc tā numura. Piemēram, taimeram un tastatūrai un printerim katram ir savs pārtraukuma numurs. Kas attiecas uz pamata I / O sistēmu, tās apkalpošanas programmas ir sadalītas grupās, un visām grupas programmām tiek piešķirts viens pārtraukuma numurs.

Kad notiek pārtraukums, tā numurs no tabulas tiek izmantots, lai iespējotu atbilstošo pārtraukumu apstrādātāju. Pirms šāda programma sāk savu darbu, mikroprocesora mehānisms, kas ir atbildīgs par pārtraukumu apstrādi, stekā atstāj ierakstu par to, kāds darbs tika veikts pirms pārtraukuma. Pēc tam tiek izpildīts pārtraukumu apstrādātājs.

Pārtraukumu apstrādātājs sāk ar piesardzības pasākumiem pret turpmākiem iespējamiem pārtraukumiem, ja jāveic ļoti svarīgas vai sarežģītas darbības, kuras nevar pārtraukt. Parasti šādas programmas ir saistītas ar segmentu reģistra maiņu, kas kontrolē piekļuvi atmiņai, kā arī nospiežot uz steku papildu stāvokļa informāciju, kas jāsaglabā papildus tai, kas tika automātiski ierakstīta pārtraukuma sākumā.

Pēc savu darbību pabeigšanas pārtraukumu apstrādātājs var atkal aktivizēt cita veida pārtraukumus un veikt nepieciešamos darbus. Kad pārtraukuma darbības beidzas, pārtraukumu apstrādātājs atjauno iekārtu stāvoklī, kādā tā bija pirms pārtraukuma, un dators turpina pārtraukto darbību.

Piemēram, apsveriet programmu, kas ir izpildāma *. .exe fails, pēc kura palaišanas ekrānā periodiski parādās Krievijas valsts karogs. Parādīšanās periods ir aptuveni 1 reizi 2 sekundēs (skatīt pielikumu). Šī programma ir šāds darba algoritms (1. att.):

Izmitināts vietnē http://www.allbest.ru/

Rīsi. 1. Programmas algoritms.

Programmatūras piekļuve BIOS video draiverim tiek īstenota, izmantojot INT 10h pārtraukumu. Strādājot teksta režīmā, parasti tiek izmantotas šādas draivera funkcijas:

02h - iestatīt kursora pozīciju;

03h - iegūt kursora pozīciju;

05h - iestatīt video lapu;

06h - inicializējiet vai ritiniet logu uz augšu;

07h - inicializējiet vai ritiniet uz leju logu;

09h - parādīt rakstzīmi un atribūtu kursora pozīcijā;

0Ah - displeja rakstzīme kursora pozīcijā;

0Eh - displeja rakstzīme teletaipa režīmā;

10h, apakšfunkcija 3h - pārslēgšanas mirgošanas/spilgtuma bits;

13h - izvada virkni teletaipa režīmā.

Izmantojot funkcijas 06h un 07h, noteiktā displeja ekrāna vietā tiek izveidoti noteikta izmēra krāsu taisnstūrveida logi. Ja šajos logos tiek parādīts kāds teksts, tad, izmantojot šīs funkcijas, to var ritināt uz augšu un uz leju.

Funkcijas 09h, 0Ah, 0Eh un 13h izmanto, lai parādītu atsevišķas rakstzīmes un rakstzīmju virknes (cilpā). Tiek nodrošināta vienas rakstzīmes izvade noteiktu skaitu reižu, ko var izmantot, veidojot rāmjus un citus ornamentus.

Funkcija 0Eh reaģē uz vadības kodiem, veicot atbilstošas ​​darbības. Kursors pārvietojas pēc katras rakstzīmes izdrukāšanas.

Funkcija 13h ir paredzēta virkņu izvadīšanai, norādot gan katras rakstzīmes atribūtus atsevišķi, gan visas virknes. Funkciju var izpildīt četros veidos atkarībā no režīma koda, kas norādīts AL reģistrā.

Rādot ekrānā, izmantojot BIOS draiveri, jāpatur prātā, ka, ierakstot Ctrl / C no tastatūras, programma netiek pārtraukta. Sargieties no bezgalīgām ekrāna cilpām — no tām var atbrīvoties, tikai restartējot datoru.

Ārējie aparatūras pārtraukumu signāli (no taimera, tastatūras, diskiem u.c.) nenonāk procesorā tieši, bet caur pārtraukumu kontrolieri, kas ir Intel 8259A mikroshēma. Aparatūras pārtraukumu apstrāde obligāti ietver pārtraukumu kontrollera vadības rutīnas. Aparatūras pārtraukumu sistēmas organizācija ir tāda, ka ierīču izejas ir savienotas ar kontroliera astoņām ievades tapām, uz kurām rodas pārtraukumu signāli. Kontroliera INT izeja ir savienota ar tāda paša nosaukuma mikroprocesora ieeju. Šajā gadījumā papildus INT signālam, kas mikroprocesorā uzsāk pārtraukuma procedūru, kontrolieris pa datu līnijām nosūta mikroprocesoram vektora numuru, caur kuru jāizsauc programma saņemtā pārtraukuma apstrādei. Pārsūtītais vektora numurs tiek veidots kontrollerī, pievienojot vienā no tā reģistriem ierakstīto bāzes numuru ar tās ievades līnijas numuru, kurā tika saņemts pieprasījums. Bāzes vektora numurs tiek automātiski ievadīts kontrollerī datora sākotnējās sāknēšanas laikā. Kontrolieris tiek ieprogrammēts caur portiem 20h un 21h. Tā kā bāzes vektors vienmēr ir 8, tad aparatūras pārtraukumiem piešķirto vektoru skaits ir diapazonā 8h,..., Fh.

Mūsu gadījumā ir jāņem vērā arī pārtraukumi, ko izraisa sistēmas taimera signāli.

Pārtraukumi ir rutīnas, ko dators izsauc, lai veiktu noteiktu uzdevumu. Ir aparatūras un programmatūras pārtraukumi. Aparatūras pārtraukumus aktivizē aparatūra vai nu no mātesplates, vai no pievienojumkartes. Tos var izraisīt signāls no taimera mikroshēmas, signāls no printera, nospiežot taustiņu uz tastatūras un daudzi citi iemesli. Aparatūras pārtraukumi nav saskaņoti ar darbu programmatūra. Kad tiek izsaukts pārtraukums, procesors atstāj savu darbu, izpilda pārtraukumu un pēc tam atgriežas sākotnējā vietā. Lai varētu atgriezties tieši pareizajā programmas vietā, stekā kopā ar karogu reģistru tiek saglabāta šīs vietas adrese (CS: IP). Pēc tam pārtraukumu apstrādātāja adrese tiek ielādēta CS:IP un vadība tiek pārsūtīta uz to. Pārtraukumu apstrādātājus dažreiz sauc par pārtraukumu draiveriem. Tos vienmēr izbeidz ar IRET (return from interrupt) instrukciju, kas izbeidz pārtraukuma uzsākto procesu, atgriežot vecās CS:IP vērtības un karogu reģistru, tādējādi ļaujot programmai turpināt izpildi no tā paša stāvokļa. Visi IBM datori izmanto 8253 (vai 8254) taimera mikroshēmu, lai saskaņotu impulsus no sistēmas pulksteņa mikroshēmas. Sistēmas pulksteņa ciklu skaits tiek pārvērsts vienā impulsā, un šo impulsu secība tiek skaitīta, lai noteiktu laiku, vai arī tos var nosūtīt uz datora skaļruni, lai radītu noteiktas frekvences skaņu. 8253 mikroshēmai ir trīs identiski neatkarīgi kanāli, no kuriem katru var ieprogrammēt. 8253 mikroshēma darbojas neatkarīgi no procesora. Procesors ieprogrammē mikroshēmu un pēc tam pāriet uz citiem jautājumiem. Tādā veidā 8253 darbojas kā reāllaika pulkstenis – tas skaita impulsus neatkarīgi no tā, kas notiek datorā. Tomēr maksimālais programmējamais intervāls ir aptuveni 1/12 sekundes. Lai aprēķinātu laika intervālus stundās un minūtēs, ir nepieciešami citi līdzekļi. Šī iemesla dēļ impulsi no taimera mikroshēmas nulles kanāla tiek uzkrāti mainīgajā, kas atrodas BIOS datu apgabalā. Šo uzkrāšanos parasti sauc par diennakts laika skaitīšanu. 18. Divas reizes sekundē kanāla 0 izvadi apstrādā aparatūras pārtraukums (taimera pārtraukums), kas īslaicīgi aptur procesoru un palielina diennakts laika skaitītāju.

Skaitlis 0 atbilst pusnaktij 12:00; kad skaitītājs sasniedz vērtību, kas līdzvērtīga 24 stundām, tas tiek atiestatīts uz nulli. Citu laiku dienas laikā var viegli noteikt, dalot skaitītāju ar 18,2 par katru sekundi. Diennakts laika skaitītājs tiek izmantots lielākajā daļā ar laiku saistīto darbību.

Secinājums

Assembler ir mašīnvalodas simbolisks līdzinieks. Šī iemesla dēļ programmai, kas rakstīta ar assembleri, ir jāatspoguļo visas mikroprocesora arhitektūras iezīmes: atmiņas organizācija, operandu adresācijas veidi, reģistru lietošanas noteikumi utt. Tā kā šādas iespējas ir jāņem vērā, assembleris katram ir unikāls. mikroprocesora veids.

Kursa darbā tiek apgūts teorētiskais materiāls par zema līmeņa valodu - assembler, tās priekšrocībām un trūkumiem, galvenajiem programmēšanas posmiem assemblerā. Tika apskatīti pārtraukumu apstrādes principi, informācijas izvade un ievade grafiskā un teksta režīmos, sistēmas taimera ziņojumu apstrāde, realizēts uzdevuma izpildes algoritms un kods pārtulkots izpildāmā failā.

Bibliogrāfija

Kasvands EG Ievads programmēšanā montāžas valodā. 1. daļa - M. : VIENOTĪBA - DANA, 2006.

Jurovs V. Montētājs. Īpašs ceļvedis. - Sanktpēterburga. : Pēteris, 2007.

Kas ir montētājs. [Elektroniskais resurss]. - Piekļuves režīms: http://www.assembler.webservis.ru

Vaulin A.S. Programmēšanas valodas. grāmatu. 5 - M.: Skola-Prese, 2008. gads.

Maļutins E. A. Programmēšanas valodas. - M. : Apgaismība, 2008.

Abel P. Montāžas valoda IBM PC un programmēšana / Per. no angļu valodas. Ju. V. Saļņikova - M.; Augstskola 2007 - 447 lpp. : slim.

Mēs programmējam montētājā. [Elektroniskais resurss]. - Piekļuves režīms: http://www.kalashnikoff.ru

Zubkovs S. V. DOS, Windows un Unix montētājs. - M. : INFRA-M, 2009.

Bogumirsky B. Efektīvs darbs uz IBM PC Windows 95 vidē Sanktpēterburga, "Piter", 2007.g.

Jurovs V., Khoroshenko V. Montētājs - Apmācības kurss. - Sanktpēterburga. : Pēteris, 2007.

Pieteikums

Programmas kods

; mov AX, dati; inicializācija

mov DS, AX; segmentu reģistrs DS

; Izlasiet un saglabājiet 8. vektora sākotnējo saturu

mov vārds ptr old_08h, BX

mov vārds ptr old_08h+2, ES

; Instalējiet mūsu pārtraukumu apstrādātāju new_08h

mov DX, nobīde jauns_08h

push DS; Saglabājiet kādu laiku DS

push CS; Nosūtīsim CS saturu

int 21h; DOS zvans (funkcijas 25h)

pop DS; Atjaunosim DS

; Simulēt darbības, kas veiktas 3 sekunžu laikā, vienkārši cilpot programmu

; Programmas otrais atzars, aktivizēts pēc 3 s

; balta svītra

; zila svītra

; sarkana svītra

mov CS: laiks, 20

; Lietojumprogrammas taimera pārtraukumu apstrādātājs,

; aktivizēts 18, 2 reizes sekundē

push AX; Saglabājiet divus izmantotos

push BP; reģistra apstrādātājā

dec CS:laiks; Laika intervāla samazināšana

jnz outint; Vēl nav 0, izejas pārtraukums

; Laika šūnas saturs ir samazinājies līdz 0, veiciet programmas pārslēgšanu

mov BP, SP; BP = pašreizējā kaudzes augšdaļa

mov AX, nobīdes spura; Pārejas punkta nobīde

mov , AX; /Nospiediet to uz steka IP vietā

mov AX, seg fin; /segmenta pārejas punkts

mov , AX; /Nospiediet to uz kaudzītes CS vietā

outint: mov AL, 20h; / Padodiet EOI kontrolierim

ārā 20h, AL; /pārtrauc

MOV AX, 0600h ; AH=06 (ritināšana), AL=00 (pilnekrāna režīms)

MOV BH, 07; normāls atribūts

MOV CX, 0000 ; augšējā kreisā pozīcija

MOV DX, 184Fh; apakšējā labajā pozīcijā

INT 10h ; pārsūtiet vadību uz BIOS

MOV AH, 02; funkcijas numurs

MOV BH, 00 ; lapas numurs

MOV DH, 00 ; līnijas numurs

MOV DL, 00; kolonnas numurs

INT 10h ; iestatīt kursoru

pop BP; /Atjaunot abus

pop AX; /saglabāts gadījums

iret; /Izejas pārtraukums

laiks dw 20; /Šūna laika noteikšanai

; /datu lauki

old_08hdd 0; /Cell, lai saglabātu sākotnējo vektoru

Mitināts vietnē Allbest.ru

...

Līdzīgi dokumenti

    Programmēšanas valodu evolūcija no zemā līmeņa līdz mūsdienām. Otrās paaudzes programmēšanas valodas - montētājs. Imperatīvās, funkcionālās, loģiskās un objektorientētās valodas. mašīnas neatkarība. programmēšanas paradigmas.

    prezentācija, pievienota 14.10.2013

    Dažu montāžas valodas un datoru aspektu izpēte kopumā. Algoritmu izveide problēmas risināšanai programmēšanas valodās C, Assembler UM un IBM PC. Risinājumu blokshēmu sastādīšana un programmu rakstīšana katrā no uzskaitītajām valodām.

    kursa darbs, pievienots 20.10.2014

    Apgūstiet zema līmeņa montāžas valodu, lai uzrakstītu programmas paraugu 16 bitu lietojumprogrammai. Algoritma izstrāde un ieviešana skaitļu paaugstināšanai skaitļu pakāpē laukā, kas pārsniedz 2. bāzi (mod 2). DOS lietojumprogrammas izveides tehnikas ilustrācija.

    kursa darbs, pievienots 08.11.2011

    Mašīnu kodi un montētājs. Pirmās augsta līmeņa programmēšanas valodas. FORTRAN programmēšanas valoda. ALGOL priekšrocības un trūkumi. Zinātniskās un grāmatvedības programmas. Pamatprincipi, kas tika ievēroti, veidojot Basic programmēšanas valodu.

    kursa darbs, pievienots 21.06.2014

    Programmēšanas valoda ir formāla zīmju sistēma programmu rakstīšanai. Refal kā rekursīvo funkciju algoritmiskā valoda. Lisp kā montētājs, kas orientēts uz darbu ar sarakstu struktūrām. Prologs: koncepcija, pamatlīdzekļi.

    prezentācija, pievienota 22.02.2014

    Montētāja iezīmes - zema līmeņa uz mašīnu orientēta valoda, ko izmanto vienkāršu lietojumprogrammu izveidei. Programmu saistīšana dažādās valodās. Tipisks komandu, instrukciju un montāžas valodas direktīvu rakstīšanas formāts. Spēles "Čūska" izstrāde.

    kursa darbs, pievienots 20.07.2014

    Programmēšanas valodu īpašības: Īss stāsts, hronoloģija. Galvenie programmēšanas valodu veidi: montētājs; PAMATA. Formulu izveide un izmantošana programmā Excel. Operatoru izmantošana formulās. Funkciju izmantošana programmā Excel. Brīvdienu mājas vietne.

    prakses pārskats, pievienots 03.06.2011

    Ciparu ievadīšana un izvadīšana, izmantojot IO spraudni. Iezīmes darbam ar viendimensiju un divdimensiju masīviem. Karogu stāvokļa pārbaude. Principi un prasmes strādāt ar kompilatoru un atkļūdotāju. Programmas algoritmu shēmas izstrāde montāžas valodā.

    kursa darbs, pievienots 12.02.2009

    Operētājsistēmas funkciju izpēte, programmu kopums, kas kontrolē lietojumprogrammu un sistēmas lietojumprogrammu darbību. Mūsdienu arhitektūras un programmatūras apraksti operētājsistēmas. Programmēšanas valodas Assembler priekšrocības.

    prezentācija, pievienota 22.04.2014

    Assembler kā simbolisks mašīnvalodas analogs. Mikroprocesoru arhitektūra: atmiņas organizācija, operandu adresācijas veidi, reģistru lietošanas noteikumi. Programmas teksts. Programmēšanas posmi montētājā, uzdevumu izpildes algoritmi.