Kada su stvoreni asembler i strojni jezik? Uvod Program prekida programa

Državna proračunska obrazovna ustanova

Stvar: informatika

sažetak

Predmet: Povijest programskih jezika.

Asembler.

Dovršeno: učenik razreda 8,

srednja škola broj 1467

Sorokin Nikolay

Vođa: Tsvetkova Oksana Mikhailovna

Uvod

S povećanjem opsega izračuna pojavio se prvi prijenosni prijenosni instrument - "Abacus".

Početkom 17. stoljeća pojavila se potreba za složenim proračunima. potrebni računski uređaji sposobni za izvođenje veliki volumen proračuni s velikom preciznošću. Francuski matematičar Pascal 1642. konstruirao je prvi mehanički računski stroj, Pascaline.

1830. engleski znanstvenik Babidge predložio je ideju prvog programabilnog računarskog stroja ("analitički stroj"). Morao ga je napajati para, a programi su bili kodirani na bušenim karticama. Ova se ideja nije mogla realizirati, jer nije bilo moguće izraditi neke dijelove stroja.

Prvi koji je proveo ideju Hollerith-ovih bušotina. Izumio je stroj za obradu rezultata popisa stanovništva. U svom je automobilu prvo koristio struju za proračune. Američki je znanstvenik Bush 1930. izumio diferencijalni analizator - prvo računalo na svijetu.

Drugi svjetski rat dao je veliki poticaj razvoju računalne tehnologije. Vojsci je trebalo računalo, koje je postalo Mark 1, prvo digitalno računalo na svijetu, koje je 1944. godine izumio profesor Eiknam. Koristio je kombinaciju električnih signala i mehaničkih pogona. Dimenzije: 15 X 2,5 m, 750 000 komada. Mogao je pomnožiti dva 23-bitna broja u 4 sekunde.

Godine 1946. skupina inženjera koju je naručio američki vojni odjel stvorila je prvo elektroničko računalo, Eniak. Izvedba: 5000 operacija zbrajanja i 300 operacija množenja u sekundi. Dimenzije: 30 m duljine, zapremina - 85 m3, težina - 30 tona. Upotrijebljeno 18000 e-maila. svjetiljke.

Prvi stroj s kroničnim programom - "Edsak" - stvoren je 1949., a 1951. oni su stvorili stroj "

Univac ”- prvo serijsko računalo s kroničnim programom. Ovaj je stroj prvi upotrijebio magnetsku vrpcu za snimanje i pohranu podataka.

Čemu služi programski jezik?

Računala su se davno pojavila u našem svijetu, ali tek nedavno su se počela tako intenzivno koristiti u mnogim područjima ljudskog života. Prije deset godina rijetko je bilo vidjeti osobno računalo - jesu, ali bile su vrlo skupe, pa čak ni svaka tvrtka nije mogla imati računalo u svom uredu. A sada? Sada se u svakoj trećoj kući nalazi računalo, koje je već duboko ušlo u život stanovnika kuće.

Sama ideja stvaranja umjetne inteligencije pojavila se davno, ali tek su je u 20. stoljeću počeli provoditi u praksi. Prvo su se pojavila ogromna računala, koja su često bila veličine ogromne kuće. Korištenje takvih strojeva, kao što i sami razumijete, nije bilo baš prikladno. Ali što možete učiniti? No, svijet nije stajao na jednom mjestu evolucijskog razvoja - ljudi su se promijenili, promijenilo im se stanište, a s tim se mijenjale i same tehnologije koje su se sve više poboljšavale. A računala su se smanjivala i smanjivala sve dok nisu dosegla veličinu koja je danas.

Ali osoba također mora nekako komunicirati s automobilom - uostalom, kome treba nekontrolirani automobil? U početku su ljudi komunicirali s računalima pomoću bušenih karata. Punch kartice su male kartice na kojima su otisnuti redovi brojeva. Računalo je imalo "disketni pogon" u koji su bile umetnute same kartice i uz pomoć malih igala stavljalo je rupe na brojeve. Malo je ljudi uživalo u takvoj komunikaciji - uostalom, nije baš zgodno sa sobom nositi hrpe bušenih karata, koje su nakon jedne upotrebe morale biti bačene.

Ali, kao i druge tehnologije, proces ljudske komunikacije s umjetna inteligencija je pretrpio neke promjene. Sada osoba svoj razgovor s računalom vodi pomoću tipkovnice i miša. Prilično je, a ponekad čak i ugodno za osobu.

Suvremena računala predstavljaju jedno od najznačajnijih dostignuća ljudske misli, čiji se utjecaj na razvoj znanstvenog i tehnološkog napretka teško može precijeniti. Područja primjene računala neprestano se šire. Tome uvelike pridonosi širenje osobnih računala, a posebno mikroračunala.

Od 1950-ih, digitalno računalo razvilo se od "čarobnog", ali skupog, jedinstvenog i pregrijanog zbrke vakuumskih cijevi, žica i magnetskih jezgri u mali stroj - osobno računalo - koji se sastoji od milijuna sićušnih poluvodičkih uređaja. u malim plastičnim kutijama.

Kao rezultat ove transformacije, računala su postala sveprisutna. Oni kontroliraju rad kasa, nadgledaju rad sustava za paljenje automobila, prate obiteljski proračun ili se jednostavno koriste kao zabavni kompleks ... Ali to je samo mali dio mogućnosti modernih računala. Štoviše, brzi napredak poluvodičke mikroelektronike, koja je osnova računalne tehnologije, ukazuje na to da je trenutna razina samih računala i njihovih područja primjene tek slaba sličnost s onim što će doći u budućnosti.

Računala počinju utjecati na svačiji život. Ako se razbolite i ako vas pošalju u bolnicu, kad jednom stignete tamo, naći ćete se u svijetu u kojem život ljudi ovisi o računalima (u nekim modernim bolnicama naći ćete čak više računala nego sami pacijenti i taj će omjer s vremenom rasti, nadmašujući broj pacijenata). Postepeno učenje računalna tehnologija pokušavajući ga uvesti u školski program kao obvezni predmet, tako da dijete već od prilično rane dobi može znati strukturu i mogućnosti računala. I u samim školama (uglavnom na Zapadu i u Americi) računala se već dugi niz godina koriste za održavanje obrazovne dokumentacije, a sada se koriste u proučavanju mnogih akademskih disciplina koje nisu izravno povezane s računarstvom. Čak i u osnovnoj školi, računala se uvode za učenje tečajeva iz osnovne matematike i fizike. Sami mikroprocesori jednako su rašireni kao i računala - ugrađeni su u štednjake za kuhanje, perilice posuđa, pa čak i satove.

Igre temeljene na mikroprocesorima vrlo su raširene. Danas industrija igara zauzima vrlo velik dio tržišta, postupno zamjenjujući tuđu dječju zabavu. No, za dječje je tijelo vrlo štetno sjediti satima za monitorom i očajnički pritiskati tipke, jer dijete može razviti neku vrstu bolesti - kad mu je na pameti samo jedno - računalo i ništa drugo. Djeca s ovim stanjem obično postaju agresivna ako im je ograničeno igranje. Takva djeca odmah gube svaku želju da rade nešto što nije povezano s računalom i što ih ne zanima - pa počinju napuštati studije, što dovodi do ne baš dobrih posljedica.

Već računala mogu jasno izgovarati razne fraze, fraze, puštati glazbu itd. Osoba sada može na svoje računalo zapisati neke riječi, rečenice, pa čak i glazbene skladbe, tako da ih kasnije računalo može reproducirati u bilo koje određeno vrijeme.

Računala također mogu percipirati govorni jezik kao signale, ali moraju napraviti puno posla da bi dešifrirali ono što čuju ako oblik komunikacije nije čvrsto uspostavljen. Napokon, istu naredbu ista osoba može izgovoriti na više načina, a cijelo vrijeme ta će naredba zvučati drugačije; a u cijelom svijetu postoje milijarde ljudi i svi izgovaraju istu zapovijed na nekoliko različitih načina. Stoga je u ovom trenutku prilično teško stvoriti računalo kojim će upravljati ljudski glas. Mnoge tvrtke pokušavaju riješiti ove probleme. Neke tvrtke poduzimaju male korake prema tom cilju, ali svejedno, ti su koraci još uvijek gotovo neprimjetni.

Ali problem prepoznavanja govora dio je šireg problema koji se naziva prepoznavanje uzoraka. Ako računala mogu dobro prepoznati slike, moći će analizirati radiografije i otiske prstiju, kao i obavljati mnoge druge korisne funkcije (već su uključeni u sortiranje slova). Valja napomenuti da ljudski mozak izvrsno prepoznaje uzorke čak i u prisutnosti različitih buka i iskrivljenja, a istraživanja na ovom području usmjerena na dovođenje odgovarajućih mogućnosti računala kako bi se podudarale sa sposobnostima neke osobe izgledaju vrlo obećavajuće . Ako su računala sposobna prepoznati govor dovoljno kvalitetno i odgovoriti mu u verbalnom obliku, tada će, očito, biti moguće unijeti programe i podatke u njih u ovom obliku. To će omogućiti računalu doslovno reći što treba učiniti i saslušati njegovo mišljenje o tom pitanju, pod uvjetom da, naravno, da su upute dane jasne, da ne sadrže proturječnosti itd.

Usmena komunikacija s računalima pojednostavit će njegovo programiranje, ali ostaje neriješen problem koji jezik treba koristiti za komunikaciju s njim. Mnogi ljudi u te svrhe predlažu engleski jezik, ali on nema točnost i jednoznačnost potrebnu sa stajališta računala i programa koji se na njemu izvršavaju. Na ovom je području već puno toga učinjeno, ali još puno toga treba učiniti.

Često se žalimo da nas drugi ljudi ne razumiju; ali zasad nas osobna računala nisu u stanju u potpunosti razumjeti ili shvatiti što želimo reći na prvi pogled. I neko ćemo se vrijeme morati zadovoljiti takvim strojevima koji jednostavno slijede naše upute, izvršavajući ih "s milimetarskom preciznošću".

Za komunikaciju s računalima, čak i u vrijeme bušenja karata, tadašnji programeri koristili su programski jezik vrlo sličan modernom Assembleru. Ovo je jezik na kojem su sve naredbe koje dolaze na računalo detaljno napisane pomoću posebne riječi i ikone (?).

U današnje vrijeme koriste se programski jezici više razine, s kojima je puno lakše raditi nego s Assemblerom, jer u njima jedna riječ može zamijeniti nekoliko naredbi odjednom. Osim toga, većina programskih jezika na visokoj razini u imenima naredbi koji se koriste u komunikaciji s računalom koriste ekvivalente imenovane na Engleski jezikšto prirodno olakšava programiranje. Ali oni imaju jedan nedostatak u usporedbi s jezicima kao što je Assembler - u Assembleru su sve naredbe primljene iz programa jasno raspoređene u memoriji računala, zauzimajući slobodni prostor, čime značajno povećavaju brzinu; i jezici visoke razine ne znaju kako se to radi, gubeći na brzini izvršavanja programa. A u našem današnjem svijetu svi znaju da je: "Vrijeme je novac".

Iako, iako je računalo inferiorno od osobe u smislu kreativne aktivnosti, jer stroj još nije obdaren takvim kvalitetama koje bi mu mogle pomoći da stvori nešto novo što osoba ne unosi u njegovo sjećanje.

Čini se da većina ljudi misli da su pojmovi "računarstvo" i "računarstvo" sinonimi i povezuju ih s fizičkom opremom poput mikroprocesora, zaslona, ​​diskova, pisača i drugih uređaja koji privlače pažnju ljudi kada osoba vidi računalo. Iako su ti uređaji važni, oni su samo "vrh sante". U početnoj fazi upotrebe moderno računalo ne bavimo se samim računalom, već skupom pravila koja se nazivaju programski jezici, a koja označavaju radnje koje računalo mora izvršiti. Važnost programskog jezika podcrtava činjenica da se sam računalni stroj može promatrati kao hardverski tumač za određeni jezik, koji se naziva strojni jezik. Kako bi se osigurao učinkovit rad stroja, razvijeni su strojni jezici čija upotreba predstavlja dobro poznate poteškoće za ljude. Većina korisnika ne osjeća te neugodnosti zbog prisutnosti jednog ili više jezika osmišljenih za poboljšanje komunikacije čovjek-stroj. Fleksibilnost računala očituje se u činjenici da može izvršavati programe prevoditelja (u općenitom slučaju nazivaju se kompajlerima ili tumačima) za pretvaranje programa iz korisnički orijentiranih jezika u programe strojnog jezika. (Zauzvrat, čak i sami programi, igre, školjke sustava nisu ništa drugo doli prilično jednostavan program za prevođenje, koji se, kako djeluje, ili igra, svojim naredbama obraća "računalnim iznutricama i vanjima", prevodeći svoje naredbe u stroj jezika. I sve se to događa u stvarnom vremenu.)

Strojni jezici, montažni jezici i

jezici na visokoj razini

Programeri pišu programe na različitim programskim jezicima, od kojih su neki izravno razumljivi računalu, dok drugi zahtijevaju srednju fazu prevođenja. Stotine dostupnih jezika mogu se klasificirati u tri opće vrste:

1. Strojni jezici

2. Asemblerski jezici

3. Jezici visoke razine.

Svako računalo može razumjeti samo vlastiti strojni jezik, koji je prirodni jezik određenog računala. Usko je povezan sa svojim hardverom. Strojni jezici uglavnom se sastoje od nizova brojeva (obično nula i jedinica), koji su upute za izvođenje pojedinih elementarnih operacija. Strojni jezici ovise o stroju, tj. određeni strojni jezik može se koristiti samo s određenom vrstom računala. Strojni jezici su nezgodni za ljudsko razumijevanje.

Širenjem računala postalo je očito da programiranje na strojnim jezicima usporava razvoj računalne tehnologije, vrlo je spor i, za većinu programera, neodoljiv zadatak. Umjesto niza brojeva koji su izravno razumljivi računalu, programeri su počeli koristiti engleske kratice za predstavljanje elementarnih operacija, koje su činile osnovu skupnih jezika. Da bi se programi napisani na takvim jezicima pretvorili u strojni jezik, razvijeni su prevodilački programi, tzv monteri... Pretvorba se odvijala brzinom jednakom brzini računala. Pojavom montažnih jezika upotreba računala znatno se proširila, ali svejedno je trebalo napisati velik broj uputa čak i za provođenje rješenja najjednostavnijih problema. Da bi se ubrzao proces programiranja, razvijeni su jezici na visokoj razini u kojima je dovoljno napisati jednog operatora za izvođenje složenih radnji. Programi za pretvaranje niza naredbi na jeziku visoke razine u strojni jezik nazivaju se kompajlerima. Na jezicima visoke razine, upute koje su napisali programeri često izgledaju poput običnog engleskog teksta koristeći uobičajene matematičke simbole.

Jedan od jezika visoke razine je programski jezik C.

Povijest jezika C

C jezik potječe iz dva jezika, BCPL i B. 1967., Martin Richards razvio je BCPL kao jezik za pisanje softver i sastavljači. 1970. godine Ken Thompson koristio je B za stvaranje ranih verzija operativnog sustava UNIX na računalu DEC PDP-7. i u BCPL i u B varijable nisu bile razdvojene na tipove - svaka je vrijednost podataka zauzimala jednu riječ u memoriji, a odgovornost za razlikovanje, na primjer, cijelih brojeva i stvarnih brojeva, u potpunosti je pala na ramena programera.

Jezik C razvio je (na temelju B) Dennis Ritchie iz laboratorija Bell, a prvi je put implementiran 1972. godine na računalu DEC PDP-11. C je slavu stekao kao jezik UNIX OS-a. Gotovo svi glavni operativni sustavi danas napisani su na jeziku C i / ili C ++. Nakon dva desetljeća, C je dostupan na većini računala. Neovisan je o hardveru.

Krajem 1970-ih, C se razvio u ono što nazivamo "tradicionalnim C". 1983. godine Američki odbor za nacionalne standarde za računala i obradu informacija uspostavio je jedinstveni standard za ovaj jezik.

Zaključak

Na temelju ovog eseja možemo zaključiti da je naš život u potpunosti prožet računalnom tehnologijom. Otprilike to će proći malo vremena i računala će stajati gdje god je prisutnost neke osobe potrebna. No bez određenog znanja komunikacija s računalom bit će nemoguća. A da biste ga natjerali da radi za vas, morate ga poznavati jezik - jezik programiranje.

Popis korištene literature

1. Tom Swan “Ovladavanje turboasemblerom”, Dijalektika, Kijev, 1996

2. Berezin BI, Berezin S.B. " Početni tečaj programiranje ”, Dialogue MEPhI, Moskva, 1996

3. Predavanja Nine Viktorovne Komleve na temu "Programski jezici i metode prevođenja"

4.H.M.Detel, Kako programirati na C, Izdavačka kuća Binom, Moskva, 2000

Ovaj će članak pokriti osnove montažnog jezika u odnosu na arhitekturu win32. To je simboličan zapis strojnih kodova. U bilo kojem elektroničkom računalu razina hardvera je najniža. Ovdje se procesi kontroliraju naredbama ili uputama na strojnom jeziku. Ovdje je predviđeno da asembler radi.

Programiranje skladatelja

Pisanje programa na montažnom jeziku izuzetno je težak i skup postupak. Da biste stvorili učinkovit algoritam, potrebno vam je duboko razumijevanje rada računala, poznavanje detalja naredbi, kao i povećana pažnja i točnost. Učinkovitost je ključni parametar za programiranje na asemblerskom jeziku.

Glavna prednost asemblerskog jezika je što vam omogućuje stvaranje konciznih i brzi programi... Stoga se koristi u pravilu za rješavanje visokospecijaliziranih zadataka. Treba vam kôd koji učinkovito radi s hardverskim komponentama ili vam je potreban program koji zahtijeva memoriju ili vrijeme izvođenja.

Registri

Asemblerski registri su memorijske stanice smještene izravno na kristal s ALU (procesorom). Značajka ove vrste memorije je brzina pristupa, koja je puno brža RAM memorija RAČUNALO. Naziva se i superbrzom memorijom s slučajnim pristupom (SRAM ili SRAM).

Postoje sljedeće vrste registara:

  1. Registri opće namjene (RON).
  2. Zastave.
  3. Pokazivač naredbi.
  4. Registri segmenata.

Postoji 8 registara opće namjene, svaki veličine 32 bita.

Registrima EAX, ECX, EDX, EBX može se pristupiti u 32-bitnom načinu, 16-bitnom načinu - AX, BX, CX, DX, kao i 8-bitnom načinu - AH i AL, BH i BL, itd.

Slovo "E" u nazivima registara znači Prošireno (prošireno). Sama imena povezana su sa svojim imenima na engleskom:

  • Registar akumulatora (AX) - za aritmetičke operacije.
  • Registar brojača (CX) - za pomake i cikluse.
  • Registar podataka (DX) - za aritmetičke i ulazno / izlazne operacije.
  • Osnovni registar (BX) - za pokazivač na podatke.
  • Registar pokazivača stoga (SP) - za pokazivač na vrh stoga.
  • Registar osnovnog pokazivača stoga (BP) - za indikator dna stoga.
  • Registar izvornog indeksa (SI) - za indeks pošiljatelja (izvora).
  • Registar odredišnog indeksa (DI) - za primatelja.

RON-ova specijalizacija montažnog jezika je uvjetna. Mogu se koristiti u bilo kojoj operaciji. Međutim, neke upute mogu koristiti samo određene registre. Na primjer, naredbe petlje koriste ESX za spremanje vrijednosti brojača.

Registar zastava. To znači bajt koji može poprimiti vrijednosti 0 i 1. Kombinacija svih zastavica (ima ih oko 30) ukazuje na stanje procesora. Primjeri zastavica: Carry Flag (CF) - Carry flag, Overflow Flag (OF) - preljevi, ugniježđena zastava (NT) - zastavica za gniježđenje zadataka i mnogi drugi. Zastave su podijeljene u 3 skupine: država, kontrola i sustav.


Pokazivač uputa (EIP) Ovaj registar sadrži adresu naredbe koja će se sljedeće izvršiti, ako nije drugačije naznačeno.

Registri segmenata (CS, DS, SS, ES, FS, GS). Njihovu prisutnost u asembleru diktira posebno upravljanje RAM-om kako bi se povećala njegova upotreba u programima. Zahvaljujući njima bilo je moguće upravljati memorijom do 4 GB. U arhitekturi Win32 potreba za segmentima je nestala, ali su nazivi registara sačuvani i koriste se drugačije.

Stog

Ovo je područje memorije dodijeljeno za rad procedura. Posebnost stoga je u tome što su posljednji podaci koji su mu napisani dostupni za čitanje prvi. Ili drugim riječima: prvi unosi u hrpu pojavljuju se zadnji. Možete zamisliti ovaj postupak kao kulu od dame. Da biste dobili kockicu (donju kalupu u podnožju tornja ili bilo koju u sredini), prvo morate ukloniti sve što su na vrhu. I, u skladu s tim, posljednji ceker postavljen na tornju uklanja se prvo kada se toranj rastavi. Ovo načelo organiziranja pamćenja i rada s njim diktira njegova ekonomija. Snop se neprestano briše i u bilo kojem trenutku koristi se jedan postupak.


Identifikatori, cijeli brojevi, simboli, komentari, ekvivalencija

Identifikator u asemblerskom jeziku ima isto značenje kao i bilo koji drugi. Dopušteno je koristiti latinična slova, brojeve i simbole "_", ".", "?", "@", "$". U ovom su slučaju velika i mala slova ekvivalentna, a točka može biti samo prvi znak identifikatora.

Cijeli brojevi u asembleru mogu se navesti u referentnim sustavima baze 2, 8, 10 i 16. S bilo kojim drugim zapisom brojeva asemblerski kompajler će ih tretirati kao identifikator.

U zapisu podataka o znakovima možete koristiti i apostrofe i navodnike. Ako je jedan od njih potreban u nizu znakova, tada su sljedeća pravila:

  • u retku zatvorenom apostrofima citati se navode jednom, apostrofi - dva puta: "can" "t", "rekao je" biti ili ne biti "";
  • za niz zatvoren u navodnike pravilo je suprotno: navodnici se dupliciraju, apostrofi se navode kao što je: "couldn" t "," Moja omiljena traka je "" Black Cat "" ".

Za označavanje komentiranja na asemblerskom jeziku koristi se simbol sa zarezom ";". Dopušteno je koristiti komentare i na početku redaka i nakon naredbe. Komentar završava feedom retka.

Direktiva o ekvivalenciji koristi se na sličan način na koji su konstantni izrazi navedeni u drugim jezicima. Ekvivalencija je naznačena na sljedeći način:

Dakle, sve pojave u programu bit će zamijenjene, na mjestu kojih se može odrediti cijeli broj, adresa, niz ili drugo ime. Direktiva EQU u svom je radu slična #define u jeziku C ++.

Podaci smjernice

Upisuju se jezici visoke razine (C ++, Pascal). Odnosno, oni koriste podatke određenog tipa, postoje funkcije za njihovu obradu itd. U programskom jeziku asemblerskog jezika toga nema. Postoji samo 5 smjernica za definiranje podataka:

  1. DB - bajt: dodijeliti 1 bajt za varijablu.
  2. DW - Riječ: dodijeliti 2 bajta.
  3. DD - Dvostruka riječ: dodijeliti 4 bajta.
  4. DQ - četverokut: dodijeliti 8 bajtova.
  5. DT - Deset bajtova: dodijelite 10 bajtova za varijablu.

D označava Define.

Bilo koja se direktiva može koristiti za deklariranje bilo kakvih podataka i nizova. Međutim, DB se preporučuje za nizove.

Sintaksa:

Kao operand je dopušteno koristiti brojeve, simbole i upitnik - "?", Što označava varijablu bez inicijalizacije. Pogledajmo nekoliko primjera:

Real1 DD 12,34 char db "c" ar2 db "123456", 0; niz od 7 bajtova num1 db 11001001b; binarni broj num2 dw 7777o; oktalni broj num3 dd -890d; decimalni broj num4 dd 0beah; heksadecimalni broj var1 dd? ; varijabla bez početne vrijednosti ar3 dd 50 dup (0); niz od 50 inicijaliziranih elemenata ar4 dq 5 dup (0, 1, 1,25); niz od 15 elemenata, inicijaliziran ponavljanjem 0, 1 i 1,25

Naredbe (upute)

Sintaksa naredbi asemblera ili uputa za asembler je sljedeća.

:

Pošaljite svoje dobro djelo u bazu znanja jednostavno. Koristite donji obrazac

Studenti, diplomirani studenti, mladi znanstvenici koji koriste bazu znanja u svojim studijima i radu bit će vam vrlo zahvalni.

montaža programskog jezika

Uvod

Programski jezik montaže

Povijest jezika

Programiranje jezika skupštine

Prednosti i nedostaci jezika

Turbo sastavljač (TASM)

Sustav prekida programa

Mehanizam prekida

Rad mehanizma prekida

Zaključak

Bibliografija

primjena

Uvod

Napredak računalne tehnologije odredio je proces nastanka niza novih znakovnih sustava za pisanje algoritama - programskih jezika. Postoji mnogo programskih jezika, ali mi ćemo se usredotočiti na Assembler.

Unatoč činjenici da programer trenutno može koristiti velik broj programskih jezika koji su puno jednostavniji od Assemblera, znanje Assemblera i sposobnost programiranja na njemu nikada neće biti suvišni. Ovu činjenicu potvrđuju sljedeći argumenti:

1. U drugim programskim jezicima nije uvijek moguće napisati aplikaciju koja bi u potpunosti zadovoljila zahtjeve. A u nekim je slučajevima to potpuno nemoguće. Bilo koja aplikacija može biti napisana na programskom jeziku Assembler.

2. Ponekad programski jezici visoke razine ne mogu pružiti potrebne performanse. A aplikacija stvorena u Assembleru uvijek je brza.

3. Veličina aplikacija kreiranih na jezicima visoke razine je velika veće veličine nego aplikacije ugrađene u Assembler.

4. Montažni jezik omogućuje izravan rad s hardverom, što u nekim slučajevima programeru daje prednost i željeni rezultat. Aplikacija na jeziku visoke razine radi s hardverskim uređajima putem napisanih modula, odnosno neće dopustiti programeru da bilo što promijeni i, prema tome, postigne željeni rezultat.

5. Poznavanje skupštinskog jezika daje veću prednost u odnosu na one koji programiraju samo na jezicima visoke razine. Iskusni montažer poznaje i strukturu računala i strukturu hardverskih uređaja.

Svrha rada:

opisati programski jezik Assembler;

prepoznati prednosti i nedostatke jezika;

opisati Turbo Asembler;

upoznati se s mehanizmom prekida.

Programski jezik montaže

Povijest montažera

Programeri su već bili upoznati s konceptom potprograma: Grace Hopper i njezini kolege koristili su potprograme na Harvardu Mark 1 tijekom Drugog svjetskog rata, ali svaka je podprogram imala određeni zadatak.

Podprogrami su neovisni fragmenti računalnog programa koji se opetovano koriste i po potrebi pozivaju iz glavnog programa. Na primjer, jedna potprogram može izračunati kvadratni korijen, dok će druga uzrokovati da računalo prikazuje slovo na zaslonu.

Prvi programeri gotovo su uvijek imali bilježnice s evidencijom najčešće korištenih potprograma, tako da ih, ako je bilo potrebno, nisu sastavljali iznova. Problem je bio u tome što su se adrese mjesta naredbi i varijabli potprograma u memoriji mijenjale ovisno o njegovom položaju u potonjem. Postavljanje potprograma na određeno mjesto u memoriji očito je trebalo automatizaciju, a to je prvi put učinjeno na Edsaku. Programeri s Cambridgea započeli su pisanjem niza objedinjenih rutina koje su činile knjižnicu. Nakon toga bilo je dovoljno unijeti samo kratku naredbu - i računalo je odradilo sve poslove oko postavljanja i postavljanja potprograma unutar programa.

Maurice Wilkes nazvao je Edsackov sustav mnemotehničkih i podprogramskih biblioteka jer je okupljao sekvence potprograma.

Asembler (od engleskog. Assembler - asembler) - računalni program, sastavljač izvornog koda programa napisanog na asemblerskom jeziku u program na strojnom jeziku.

Montažni jezik na ruskom jeziku često se naziva jednostavno asemblerom. Prevoditelj s ovog jezika također se obično naziva jednostavno asemblerom, što u nekim slučajevima može stvoriti zabunu. Proces prevođenja iz asemblerskog jezika u strojni kod često se naziva montaža.

Upotreba izraza "skupštinski jezik" može dovesti do zablude o postojanju jedinstvenog jezika niska razina ili barem standard za takve jezike, što apsolutno nije istina. Stoga je pri imenovanju jezika na kojem je napisan određeni program poželjno navesti za koju je arhitekturu namijenjen i na kojem je dijalektu jezika napisan.

Programiranje jezika skupštine

Asembler je programski jezik niske razine koji je čitljiv format za pisanje strojnih uputa.

Upute na asemblerskom jeziku odgovaraju jedna na jednu s procesorskim uputama i zapravo predstavljaju prikladan simbolički oblik pisanja naredbi i njihovih argumenata. Također, asemblerski jezik pruža osnovne apstrakcije softvera: povezivanje dijelova programa i podataka putem naljepnica sa simboličkim imenima i direktivama.

Direktive o asembleru omogućuju vam uključivanje blokova podataka (izričito opisanih ili pročitanih iz datoteke) u program; ponoviti određeni fragment određeni broj puta; uslovno sastaviti fragment; postaviti adresu izvršenja fragmenta, promijeniti vrijednosti naljepnica tijekom postupka kompilacije; koristiti makronaredbe s parametrima itd.

Svaki model procesora, u principu, ima svoj set uputa i odgovarajući montažni jezik (ili dijalekt).

Programi asemblera mogu biti vrlo učinkoviti. Od programera s jednakim vještinama i sposobnostima koji rade na skupštinskom jeziku stvorite program koji je kompaktniji i brži od istog programa napisanog na jeziku visoke razine. To je slučaj za gotovo sve male i srednje programe. Nažalost, kako veličina raste, programi za montažni jezik gube neke od svojih prednosti. To je zbog pozornosti koja je potrebna detaljima u programu montaže. Kao što vidite, jezik skupštine zahtijeva da svaku radnju planirate na računalu. U malim programima to vam omogućuje optimizaciju izvedbe programa hardverom. Međutim, u velikim programima ogromna količina detalja može vas spriječiti u učinkovitom radu na samom programu, čak i ako se pojedine komponente programa pokažu vrlo dobrima. Naravno, programiranje na asemblerskom jeziku ne zadovoljava potrebe svakog programa.

Programi jezika za skupštinu vrlo su precizni. Budući da ovaj jezik programeru omogućuje izravan rad sa svim hardverom, program za montažu može raditi stvari koje ne može raditi nijedan drugi program. Nema sumnje da je u programiranju U / I uređaja, gdje je potrebna kontrola nad pojedinačnim bitovima registara uređaja, jedino prikladan izbor programiranje na montažnom jeziku.

Jasno je da učinkovitost i točnost skupštinskog jezika imaju određene prednosti. Ali njegova granularnost također stvara neke probleme. Kada biste trebali odabrati skupni jezik za programiranje?

Naravno, trebali biste koristiti programe za montažni jezik kad ne postoji drugi način za pisanje programa. Na primjer, IBM programeri su koristili Assembler rutine za pisanje svih I / O upravljačkih programa za IBM PC. Upravljanje I / O uređajima i sustavom prekida zahtijevali su preciznost montažnog jezika koju ne može pružiti nijedan drugi programski jezik. Isto tako, IBM je napisao dijagnostičke rutine za montažni jezik kako bi testirao svaki dio hardvera.

Jezik skupštine također je potreban u slučajevima kada je izvođenje programa od primarne važnosti. To može biti vrijeme izvođenja ili konačna veličina programa. Fortran Math Procedure Library je primjer programa koji zahtijeva dobre karakteristike, kako u pogledu vremena tako i veličine. Matematičke rutine dio su svakog Fortran programa, pa bi trebale zauzimati što manje prostora. Uz to, ovi postupci reguliraju sve matematičke funkcije u programu Fortran i često se koriste. Stoga se moraju brzo izvršiti.

Koji program nije prikladan za montažni jezik? Naravno, u njega možete napisati bilo koji program, ali s velikim programom bolje je raditi na jeziku visoke razine kao što je C ili C #. Ovi jezici omogućuju vam da se usredotočite na svoj problem. Ne morate se izravno baviti zamršenošću hardvera i procesora. Jezici visoke razine omogućuju vam korak unatrag i šumu kroz drveće.

Programiranjem na montažnom jeziku i samo pisanjem programa na ovoj razini detalja možete razumjeti kako stroj radi na najnižoj razini. Ako želite naučiti sve o računalu, morate biti upoznati s montažnim jezikom. Jedini način postići ovo: pisati programe na tom jeziku.

Najpopularniji paketi danas su Turbo Assembler (TASM) iz Borlanda, Macro Assembler za Windows32 (MASM32), koji je stvorio Hutch (zasnovan na starom MASM-u od Microsofta), kao i Flat Assembler (FASM) i Netwide Assembler (NASM) , razvio NASM-ov razvojni tim. Svi ovi sastavljači pružaju vrlo široke mogućnosti programeru. Mogu se koristiti za pisanje programa i za DOS i za Windows.

Postoje i mnoge druge vrste asemblera koji rastu u broju. Na primjer: CodeX Assembler, Gema Assembler, Light Macro Assembler (LASM), Lazy Assembler (LZASM), Table Driven Assembler (TDASM), NewBasic ++ Assembler (NBASM), TMA Macro Assembler itd.

Prednosti i nedostaci jezika

Prednosti

Kvalificirani programer obično je u stanju napisati učinkovitiji program asemblerskog jezika od programa koji generiraju prevoditelji s programskih jezika visoke razine, to jest programi asemblerskog jezika obično koriste manje uputa i pristupa memoriji, što omogućava veću brzinu i smanjenu veličinu programa ...

Maksimalno iskorištavanje specifičnih mogućnosti određene platforme, što vam također omogućuje stvaranje učinkovitijih programa s manje resursa.

Kada se programira na montažnom jeziku, moguć je izravan pristup hardveru, uključujući I / O priključke, registre procesora itd.

Asemblerski jezik koristi se za stvaranje upravljačkih programa hardvera i jezgre operacijskog sustava

Asemblerski jezik koristi se za stvaranje BIOS-ovog "firmwarea".

Asemblerski jezik koristi se za stvaranje kompajlera i tumača na visokoj razini te za implementaciju kompatibilnosti platforme.

Postoji mogućnost istrage drugih programa s nestalima izvorni kod pomoću rastavljača.

nedostaci

Glavna prednost asemblera gotovo je u potpunosti nadoknađena dobrom optimizacijom u modernim prevoditeljima jezika na visokoj razini.

Zbog strojne orijentacije ("niska" razina) osobi je teže u usporedbi s programskim jezicima visoke razine čitati i razumjeti program, sastoji se od premalo "malih" elemenata - strojnih uputa, u skladu s tim programiranje i otklanjanje pogrešaka se zakomplicira, intenzitet rada povećava, vjerojatnost uvođenja pogrešaka je velika ... Složenost suradničkog razvoja značajno se povećava.

Tipično je dostupno manje knjižnica u usporedbi s modernim industrijskim programskim jezicima.

Ne postoji prenosivost programa na računala s drugačijom arhitekturom i skupom uputa (osim binarno kompatibilnih).

Turbo Asembler (TASM)

Borland Turbo Assembler je višepropusni asembler s referentnom rezolucijom prema naprijed, brzinom sastavljanja do 48 000 linija u minuti (na modelu IBM PS / 2 60), kompatibilan s Microsoftovim MASM asemblerom i dodatnim načinom proširene sintakse. Bez obzira na vaše iskustvo u programiranju, nesumnjivo ćete cijeniti ove značajke, kao i brojne druge alate koji uvelike olakšavaju programiranje u Assembleru.

Među takvim alatima mogu se ukratko spomenuti:

puna podrška za procesor 80386;

poboljšana provjera vrste sintakse;

pojednostavljene smjernice za definiranje segmenta;

poboljšano upravljanje popisima;

proširenja POP i PUSH uputa;

proširena izjava CALL s argumentima i neobaveznim jezičnim parametrom;

lokalne oznake;

lokalni identifikatori na stogu i argumenti poziva u postupcima;

strukture i udruge;

ugniježđene direktive;

QUIRK način koji oponaša MASM;

otklanjanje pogrešaka na punoj razini s Turbo programom za uklanjanje pogrešaka;

Ugrađeni uslužni program za unakrsnu referencu (TCREF)

konfiguracijske datoteke i batch datoteke.

Turbo Assembler je moćan alat za naredbene retke koji uzima vaše izvorne datoteke (*. Asm * datoteke) i od njih stvara objektne module (*. Obj * datoteke). Tada možete koristiti Borlandov program povezivanja TLINK. EXE različit velike brzine link, za povezivanje rezultirajućih modula objekata i stvaranje izvršnih datoteka (datoteka s proširenjem *. exe *).

Turbo Assembler dizajniran je za rad s procesorima serije 80x86 i 80x87 (za više detalja, set uputa za procesore serije 80x86 / 80x87 opisan je u odgovarajućim Intelovim priručnicima).

Turbo Assembler, uz punu podršku za Microsoftov prevoditelj, ima i dodatne mogućnosti, kombinirani u načinu koji su programeri nazvali Idealno. Korištenje ovog načina omogućuje programeru početniku primjenu vizualnijeg i jednostavnijeg stila programiranja. Iskusniji programeri asemblera mogu koristiti značajke Ideal mode, kao što su ugniježđene strukture, spajanja.

Važna značajka načina Ideal je upotreba provjere vrste podataka, poput jezika visoke razine, koja vam omogućuje otkrivanje mnogih pogrešaka čak i u fazi prevođenja. Među mnogim drugim važnim blagodatima Ideal načina rada su sljedeće:

Sposobnost korištenja istih imena za određivanje članova različitih struktura;

Korištenje HIGH i LOW operatora;

Pre-evaluacija izraza EQU;

Ispravno upravljanje segmentima podataka kombiniranim u grupe;

Poboljšana uporaba direktiva;

Razumna upotreba zagrada u izrazima.

Turbo Assembler prosljeđuje argumente postupcima visoke razine na okviru steka, gurajući argumente na stog prije pozivanja procedure. Rutine napisane na jezicima visoke razine po potrebi čitaju argumente iz niza. Na izlazu, postupak može ukloniti argumente iz stoga ili prepustiti ovu operaciju pozivajućem postupku.

Tradicionalni način kombiniranja programa napisanih na C ++ i Assembler je odvojena kompilacija, a zatim povezivanje u jednu izvršnu datoteku. Možete koristiti kompajler Borland C ++ koji poziva Turbo Assembler za prevođenje programa asemblera.

Razvoj programa Turbo Assembler uključuje četiri faze:

1. faza. Priprema izvornog koda programa i njegov dizajn u obliku tekstualna datoteka(jedan ili više) uz pomoć nekog uređivača u DOS formatu s *. asm *.

2. faza. Sastavljanje programa pomoću prevoditelja Tasm čiji je rezultat objektna datoteka s *. obj *. Kada se program sastoji od nekoliko datoteka (modula), oni se sastavljaju neovisno jedna o drugoj. Ako se tijekom prevođenja pronađu pogreške, objektna datoteka se ne stvara, već se generira poruka o pogrešci. Greške se uklanjaju, nakon čega se emitiranje ponavlja. Objektna datoteka (binarno kodirani prikaz programa) ne može se pokrenuti za izvršenje jer ne sadrži informacije o učitavanju programskih segmenata u memoriju računala.

3. faza. Povezivanje programa izvodi povezivač (povezivač) Turbo Linker i sastoji se u kombiniranju objektnih modula u jednu izvršnu datoteku s dodjelom početne adrese programa. Izvršna datoteka ima nastavak *. exe *. Druga i treća faza određuju postupak pripreme izvršne datoteke programa, koja se naziva prijevod.

Četvrta faza sastoji se u otklanjanju pogrešaka u programu pomoću Turbo Debuggera, koji će biti glavni alat za proučavanje formata naredbi, njihovo kodiranje, kao i predstavljanje programskih varijabli u memoriji.

Sustav prekida programa

Jedna od temeljnih razlika između računala i bilo kojeg drugog stroja je u tome što je računalo sposobno reagirati na nepredvidive događaje tijekom rada. Ova sposobnost pruža se uz pomoć posebnog svojstva računala - uređaja za prekidanje. Prekid omogućuje računalu da zaustavi bilo koju od svojih radnji i prebaci se na drugu, ovisno o tome što uzrokuje prekid. Na primjer, pritiskom odgovarajuće tipke na tipkovnici.

Sposobnost prekida rješava naizgled složen problem učinkovitosti našeg računala. S jedne strane, želimo da računalo radi posao koji smo mu dali. S druge strane, potreban nam je da bismo odgovorili na bilo koju našu naredbu, na primjer s tipkovnice. Da je računalo bilo sposobno samo unaprijed izvršiti ono što mu je dodijeljeno, a da mu to ne odvrati pozornost, ne bi moglo pravovremeno odgovoriti na naše zahtjeve, bez stalnog praćenja aktivnosti tipkovnice. Sustav prekida omogućuje mu da reagira na signale koje šalje tipkovnica, kao i na druge signale koji zahtijevaju pažnju dok je računalo zauzeto nekim drugim poslom.

Mikroprocesor na našem računalu ima urođenu sposobnost prekida rada, ali ima i pouzdano sredstvo za pohranu prekinutog rada. Za to se koristi mikroprocesorski stog. Kad se dogodi prekid, zapis onoga što je računalo radilo u tom trenutku sprema se na stog, tako da se po završetku prekida možemo vratiti na mjesto s kojeg smo morali skrenuti misli. Ovo je jedna od nekoliko primjena za stog, ali je najvažnija. Bez stoga u koji možemo pohraniti podatke o poslu koji se izvodi, ni sama ideja prekida ne bi mogla biti ostvarena.

Mehanizam prekida

Prekid je signal koji obavještava procesor o pojavi događaja. U tom se slučaju izvršavanje trenutnog niza naredbi obustavlja, a kontrola se prenosi na obrađivač prekida koji reagira na događaj i služi mu, a zatim vraća kontrolu prekinutom kodu.

Softverski prekid je sinkroni prekid koji program može izvršiti pomoću posebne upute.

Mehanizam prekida najprikladniji je za rukovanje događajima koji se događaju asinkrono s obzirom na izvršavanje programa. Prekid se može promatrati kao neki poseban događaj u sustavu koji zahtijeva trenutni odgovor. Na primjer, dobro dizajnirani robusni sustavi koriste prekid nestanka struje za izvršavanje postupaka za upisivanje sadržaja registara i glavne memorije na magnetski medij, tako da se nakon obnavljanja struje može nastaviti s istog mjesta.

Čini se očitim da su mogući najrazličitiji prekidi iz različitih razloga. Stoga se prekid smatra ne samo takvim: uz njega je povezan broj, koji se naziva brojem tipa prekida ili jednostavno brojem prekida. Uz svaki broj prekida povezan je događaj. Sustav je u stanju prepoznati koji je prekid, s kojim brojem se dogodio, i započinje postupak koji odgovara tom broju.

Programi mogu sami nazvati prekide s danim brojem. Da bi to učinili, koriste naredbu INT. To su takozvani softverski prekidi. Softverski prekidi nisu asinkroni, kako se nazivaju unutar programa.

U x86 procesorima pruža se naredba Int za izričito pozivanje sinkronog prekida s brojem prekida (0 do 255) kao argumenta. Na računalima kompatibilnim s računalom IBM, nekim se prekidima bave BIOS rutine pohranjene u ROM, a to služi kao sučelje za pristup usluzi koju pruža BIOS. Također, uslugu prekida može preuzeti BIOS kartica za proširenje (na primjer, mrežne ili video kartice), operativni sustav, pa čak i obični (aplikacijski) programi koji su stalno u memoriji dok su pokrenuti drugi programi (tzv. Rezident programi). Za razliku od stvarnog načina rada, u zaštićenom načinu rada x86 procesora, uobičajeni programi ne mogu prekidati uslugu, ova je funkcija dostupna samo sistemskom kodu (operativnom sustavu).

MS-DOS koristi prekide numerirane od 20h do 3Fh za interakciju sa svojim modulima i aplikacijskim programima (brojevi su dati u heksadecimalnom zapisu, kao što je to uobičajeno u programiranju na x86 skupnom jeziku). Na primjer, pristup glavnom skupu MS-DOS funkcija vrši se izvršavanjem naredbe Int 21h (dok se broj funkcije i njezini argumenti prenose u registre). Ova distribucija prekidnih brojeva nije fiksirana u hardveru, a drugi programi mogu instalirati vlastite obrađivače prekida umjesto ili iznad postojećih obrađivača instaliranih od strane MS-DOS-a ili drugih programa, koji se u pravilu koristi za promjenu funkcionalnosti ili proširivanje popis sistemskih funkcija. Također, virusi koriste ovu priliku.

Rad mehanizma prekida

Svaki određeni prekid identificira se vlastitim brojem. Na primjer, timer, tipkovnica i pisač imaju svoj broj prekida. Što se tiče osnovnog I / O sustava, njegovi servisni programi podijeljeni su u skupine, s jednim brojem prekida koji je dodijeljen svim programima u grupi.

Kada se dogodi prekid, njegov broj iz tablice koristi se za omogućavanje odgovarajuće rutine prekida. Prije nego što takav program započne s radom, mikroprocesorski mehanizam odgovoran za rukovanje prekidima ostavlja u stogu zapis o tome što je posao izveden prije prekida. Tada se izvršava rutina prekida.

Voditelj prekida započinje s radom poduzimajući zaštitne mjere protiv daljnjih mogućih prekida u slučaju izvođenja vrlo važnih ili složenih operacija koje se ne mogu prekinuti. Ti programi obično uključuju promjenu registra segmenata koji kontrolira pristup memoriji, kao i spremanje dodatnih podataka o stanju na stogu, koji moraju biti pohranjeni uz onaj koji je automatski napisan na početku prekida.

Nakon završetka svojih operacija, rukovatelj prekidima može ponovno aktivirati druge vrste prekida i izvršiti se potreban rad... Kada su operacije prekida završene, rutina usluge prekida se obnavlja početno stanje stroj u kojem se nalazio prije prekida, a računalo nastavlja prekinut rad.

Na primjer, razmotrite program koji je izvršna datoteka *. exe datoteku, nakon čega se državna zastava Rusije povremeno pojavljuje na ekranu. Razdoblje pojavljivanja je približno 1 puta u 2 sekunde (vidi Dodatak). Ovaj program ima sljedeći algoritam rada (slika 1):

Objavljeno na http://www.allbest.ru/

Sl. 1. Algoritam programa.

Softverski poziv BIOS upravljačkom programu za video implementiran je pomoću prekida INT 10h. Kada se radi u tekstualnom načinu, obično se koriste sljedeće funkcije pokretačkog programa:

02h - postavljanje položaja kursora;

03h - dobiti položaj kursora;

05h - postavljanje video stranice;

06h - inicijalizirajte ili pomaknite prozor prema gore;

07h - inicijalizacija ili pomicanje prema dolje kroz prozor;

09h - prikaz simbola i atributa na položaju kursora;

0Ah - prikaz znaka na položaju kursora;

0Eh - prikaz znaka u teletapskom načinu;

10h, subfunkcija 3h - prebacivanje treperenja / bita svjetline;

13h - prikaz niza u načinu TTY.

Uz pomoć funkcija 06h i 07h stvaraju se pravokutni prozori u boji zadane veličine na određenom mjestu na zaslonu zaslona. Ako je u tim prozorima prikazan bilo kakav tekst, tada se pomoću ovih funkcija može pomicati gore-dolje.

Funkcije 09h, 0Ah, 0Eh i 13h koriste se za prikaz pojedinačnih znakova i nizova znakova (u petlji). Izlaz istog simbola pruža se određeni broj puta, koji se može koristiti za stvaranje okvira i drugih ukrasa.

Funkcija 0Eh reagira na kontrolne kodove izvođenjem odgovarajućih radnji. Kursor se pomiče nakon što se prikaže svaki znak.

Funkcija 13h namijenjena je izlazu nizova koji označavaju atribute svakog znaka pojedinačno i cijelog niza. Funkcija se može izvesti u četiri varijante, ovisno o kodu načina navedenom u registru AL.

Prilikom izlaza na zaslon pomoću upravljačkog programa BIOS-a, imajte na umu da unos tipkovnice Ctrl / C ne završava program. Trebali biste se čuvati beskrajnih ciklusa prikaza - iz njih se možete izvući samo ponovnim pokretanjem računala.

Vanjski hardverski prekidni signali (s timera, tipkovnice, diskova itd.) Ne ulaze izravno u procesor, već kroz kontroler prekida, koji je Intel 8259A čip. Rukovanje hardverskim prekidom nužno uključuje postupke za kontrolu prekidača. Organizacija sustava hardverskih prekida leži u činjenici da su izlazi uređaja na kojima se javljaju prekidni signali povezani na osam ulaznih pinova kontrolera. INT izlaz kontrolera spojen je na istoimeni mikroprocesorski ulaz. U tom slučaju, pored INT signala, koji pokreće postupak prekida u mikroprocesoru, kontroler putem podatkovnih vodova prenosi mikroprocesoru i broj vektora kroz koji treba pozvati program za obradu primljenog prekida. Preneseni vektorski broj formira se u kontroleru dodavanjem osnovnog broja zabilježenog u jedan od njegovih registara s brojem ulazne linije kroz koju je primljen zahtjev. Osnovni vektorski broj automatski se unosi u kontroler tijekom početnog pokretanja računala. Kontroler se programira kroz priključke 20h i 21h. Budući da je osnovni vektor uvijek 8, broj vektora dodijeljenih hardverskim prekidima je u rasponu 8h, ..., Fh.

U našem slučaju, također je potrebno uzeti u obzir prekide uzrokovane signalima iz tajmera sustava.

Prekidi su gotovi postupci koje računalo poziva za obavljanje određenog zadatka. Postoje hardverski i softverski prekidi. Hardverske prekide pokreće hardver, bilo s matične ploče ili s kartice za proširenje. Mogu biti uzrokovani signalom s vremenskog čipa, signalom s pisača, pritiskom tipke na tipkovnici i mnogim drugim razlozima. Hardverski prekidi nisu koordinirani sa softverom. Kada se pozove prekid, procesor napušta svoj rad, izvršava prekid i vraća se na prvobitno mjesto. Da bi se mogao vratiti točno na pravo mjesto u programu, adresa ovog mjesta (CS: IP) pohranjuje se u stog, zajedno s registrom zastavica. Tada se adresa obrađivača prekida učitava u CS: IP i na nju se prenosi kontrola. Rutine prekida ponekad se nazivaju pokretačima prekida. Uvijek se završavaju IRET (interrupt return) naredbom, koja završava postupak započet prekidom vraćanjem starih vrijednosti CS: IP i registra registra, omogućujući tako programu da nastavi izvršavanje iz istog stanja. Sva IBM računala koriste 8253 (ili 8254) timer chip za usklađivanje impulsa sa sistemskog takta. Broj ciklusa sistemskog sata pretvara se u jedan impuls, a slijed tih impulsa broji se kako bi se odredilo vrijeme ili se mogu poslati u zvučnik računala kako bi se stvorio zvuk na određenoj frekvenciji. Mikrokrug 8253 ima tri identična neovisna kanala, od kojih se svaki može programirati. Mikrokrug 8253 radi neovisno o procesoru. Procesor programira mikrovezje, a zatim se okreće drugim stvarima. Dakle, 8253 djeluje kao sat u stvarnom vremenu - broji svoje impulse bez obzira na to što se događa u računalu. Međutim, maksimalni programibilni interval je približno 1/12 sekunde. Neka druga sredstva potrebna su za izračunavanje vremenskih intervala u satima i minutama. Iz tog se razloga impulsi iz nultog kanala timerskog čipa akumuliraju u varijabli koja se nalazi u podatkovnom području BIOS-a. Ova nakupina se obično naziva brojanjem doba dana. 18. 2 puta u sekundi, izlaz kanala 0 obrađuje se hardverskim prekidom (timeer interrupt), koji nakratko zaustavlja procesor i povećava vrijeme brojača dana.

Broj 0 odgovara ponoći 12:00; kada brojač dosegne vrijednost koja odgovara 24 sata, vraća se na nulu. Ostala vremena tijekom dana lako je odrediti dijeljenjem brojača sa 18,2 za svaku sekundu. Brojač vremena koristi se u većini operacija povezanih s vremenom.

Zaključak

Asembler je simbolički analog strojnog jezika. Iz tog razloga, program napisan u asembleru mora odražavati sve značajke mikroprocesorske arhitekture: organizaciju memorije, metode adresiranja operanda, pravila za upotrebu registra itd. Zbog potrebe da se takve značajke uzmu u obzir, asembler je jedinstven za svaka vrsta mikroprocesora.

U ovom se predmetu proučava teorijski materijal o jeziku niske razine - asembleru, njegovim prednostima i nedostacima, glavnim fazama programiranja u asembleru. Razmatrana su načela rukovanja prekidima, izlaza i unosa informacija u grafičkom i tekstualnom načinu rada, obrade poruka sistemskog tajmera, implementiran je algoritam za izvršavanje zadatka i kôd je preveden u izvršnu datoteku.

Bibliografija

Kasvands E. G. Uvod u programiranje na jeziku Assembler. 1. dio - M .: JEDINSTVO - DANA, 2006.

Yurov V. Monter. Posebni priručnik. - SPb. : Peter, 2007 (monografija).

Što je asembler. [Elektronički izvor]. - Način pristupa: http://www.assembler.webservis.ru

Vaulin A.S. Programski jezici. knjiga 5 - M .: School-Press, 2008 (monografija).

E. A. Malyutin. Programski jezici. - M .: Obrazovanje, 2008 (monografija).

Abel P. Asemblerski jezik za IBM PC i programiranje / Per. s engleskog Yu. V. Salnikova - M .; Viša škola 2007. - 447 str. : bolesno.

Programiramo u asembleru. [Elektronički izvor]. - Način pristupa: http://www.kalashnikoff.ru

Zubkov S.V. Asembler za DOS, Windows i Unix. - M .: INFRA-M, 2009. (monografija).

Bogumirsky B. Učinkovit rad na IBM PC-u u Windows 95 okruženju St. Petersburg, "Peter", 2007.

Yurov V., Khoroshenko V. Monter - Tečaj obuke. - SPb. : Peter, 2007 (monografija).

primjena

Programski kod

; mov AX, podaci; inicijalizacija

mov DS, AX; registar segmenta DS

; Pročitajte i spremite izvorni sadržaj vektora 8

mov riječ ptr stari_08h, BX

mov riječ ptr staro_08h + 2, ES

; Instalirajte naš obrađivač prekida new_08h

mov DX, ofset novo_08h

gurati DS; Sačuvajmo DS neko vrijeme

gurati CS; Pošaljite CS sadržaj

int 21h; DOS poziv (funkcija 25h)

pop DS; Oporavi DS

; Simulirajmo radnje izvršene u roku od 3 sekunde jednostavnim petljanjem programa

; Druga grana programa aktivira se nakon 3 s

; bijela pruga

; plava pruga

; crvena pruga

mov CS: vrijeme, 20

; Primijenjeni rukovatelj prekida prekidača,

; aktivirano 18, 2 puta u sekundi

gurnuti AXE; Sačuvajmo dvije upotrijebljene

gurati BP; u obrađivaču registara

dec CS: ​​vrijeme; Dekrement vremenskog intervala

jnz outint; Još nije 0, prekid izlaza

; Sadržaj vremenske ćelije smanjio se na 0, izvedite prebacivanje programa

mov BP, SP; BP = trenutni vrh stoga

mov AX, pomak peraje; Pomicanje prijelazne točke

mov, AX; / Pošaljite ga u hrpu na IP mjestu

mov AX, segmentna peraja; / Točka prijelaza segmenta

mov, AX; / Gurnite ga na hrpu umjesto CS

outint: mov AL, 20h; / EOI naredba za kontroler

izlazak 20h, AL; / prekida

MOV SJEKIRA, 0600h; AH = 06 (pomicanje), AL = 00 (puni zaslon)

MOV BH, 07; normalni atribut

MOV CX, 0000; gornji lijevi položaj

MOV DX, 184Fh; donji desni položaj

INT 10h; prijenos kontrole u BIOS

MOV AH, 02; broj funkcije

MOV BH, 00; broj stranice

MOV DH, 00; redni broj

MOV DL, 00; broj stupca

INT 10h; postaviti kursor

pop BP; / Vratite oboje

pop sjekira; / spremljeni registri

iret; / Prekid izlaza

vrijeme dw 20; / Ćelija za mjerenje vremena

; / Polja podataka

old_08h dd 0; / Stanica za pohranu izvornog vektora

Objavljeno na Allbest.ru

...

Slični dokumenti

    Evolucija programskih jezika od niske do moderne ere. Programski jezici druge generacije - asembler. Imperativni, funkcionalni, logički i objektno orijentirani jezici. Neovisnost stroja. Paradigme programiranja.

    prezentacija dodana 14.10.2013

    Proučavanje nekih aspekata montažnog jezika i računala općenito. Izgradnja algoritama za rješavanje problema u programskim jezicima C, Assembler UM i IBM PC. Izrada blok dijagrama rješenja i pisanje programa na svakom od navedenih jezika.

    seminarski rad dodan 20.10.2014

    Učenje jezika niske razine sastavljanja za pisanje uzorka programa za 16-bitnu aplikaciju. Razvoj i primjena algoritma za oduzimanje brojeva do stupnja brojeva preko polja pomoću baze 2 (mod 2). Ilustracija tehnike za stvaranje DOS aplikacije.

    seminarski rad, dodan 08.11.2011

    Strojni kodovi i asembler. Prvi programski jezici visoke razine. Programski jezik FORTRAN. Za i protiv ALGOL-a. Znanstveni i računovodstveni softver. Osnovna načela koja su se slijedila pri stvaranju programskog jezika Basic.

    seminarski rad, dodan 21.06.2014

    Programski jezik kao formalni znakovni sustav za pisanje programa. Refal kao algoritamski jezik rekurzivnih funkcija. Lisp kao asembler strukturiran na popisu. Prolog: koncept, osnovna sredstva.

    prezentacija dodana 22.02.2014

    Značajke montažnog jezika - strojno orijentirani jezik niske razine koji se koristi za stvaranje jednostavne primjene... Povezivanje programa na različitim jezicima. Tipični format za pisanje naredbi, uputa i smjernica na asemblerskom jeziku. Razvoj igre "Zmija".

    seminarski rad dodan 20.07.2014

    Karakteristike programskih jezika: Pripovijetka, kronologija. Glavne vrste programskih jezika: asembler; Osnovni, temeljni. Stvorite i koristite formule u programu Excel. Korištenje operatora u formulama. Korištenje funkcija u Excelu. Početna stranica za odmor.

    izvješće o praksi, dodano 06/03/2011

    Unos i izlaz brojeva pomoću IO dodatka. Značajke rada s jednodimenzionalnim i dvodimenzionalnim nizovima. Ispitivanje stanja zastava. Načela i vještine rada s kompajlerom i programom za otklanjanje pogrešaka. Razvoj dijagrama programskog algoritma na montažnom jeziku.

    seminarski rad, dodan 02.02.2009

    Proučavajući značajke operativnog sustava, skupa programa koji kontroliraju rad aplikativnih programa i sistemske aplikacije... Opisi arhitekture i softvera suvremenih operativnih sustava. Prednosti programskog jezika Assembler.

    prezentacija dodana 22.04.2014

    Asembler kao simbolički analog strojnog jezika. Arhitektura mikroprocesora: organizacija memorije, metode adresiranja operanda, pravila korištenja registara. Tekst programa. Faze programiranja na montažnom jeziku, algoritmi za izvršavanje zadataka.

Asembler (asm, asembler); s engleskog assemble - sastaviti, montirati) - programski jezik niske razine, pomoćni program kao dio operativnog sustava za automatsko prevođenje izvornog programa koji se izvodi na računalu na strojni jezik; vrsta prevoditelja. Koncepti asemblera odražavaju arhitekturu elektroničkog računala. Asembler je simboličan zapis strojnog jezika čija upotreba olakšava pisanje strojnih programa. Za isto računalo mogu se razviti različiti montažni jezici. Za razliku od jezika na visokoj razini, u kojima su problemi implementacije algoritama skriveni od programera, asemblerski jezik usko je povezan s računalnim skupom uputa. Asembler omogućuje pristup registrima, specificirajući metode adresiranja i opisujući operacije u smislu uputa procesora. Može sadržavati sredstva više razine: ugrađene i definirane makronaredbe koje odgovaraju nekoliko strojnih uputa, automatski odabir naredbe ovisno o vrstama operanda, sredstva za opisivanje struktura podataka.

Značajke sastavljača

Asembler se naziva i kompajlerom od asemblerskog jezika do uputa strojnog jezika. Drugi naziv takvog kompajlera je mnemotehnički kod. Dizajniran je za prezentaciju u prikladnom (mnemotehničkom) obliku strojnih kodova uputa, osigurava učinkovito korištenje sistemskih resursa (procesor, memorija, periferne uređaje). Mnemocode se koristi na mjestima gdje su potrebne performanse, ograničene veličinom RAM-a. Asembler se ponekad naziva i skupom naredbi središnjeg procesora.

Postoji asembler za svaku arhitekturu procesora i za svaki operativni sustav. Unakrsni sastavljači omogućuju na strojevima s jednom arhitekturom sastavljanje programa za drugu arhitekturu ili za drugačiji operativni sustav. Asembler omogućuje pristup registrima, specificirajući metode adresiranja i opisujući operacije u smislu uputa procesora. Asembler može sadržavati alate visoke razine: ugrađene i definirane makronaredbe koje odgovaraju nekoliko strojnih uputa, automatski odabir naredbi ovisno o vrstama operanda, sredstva za opisivanje struktura podataka.

Upute za montažni jezik odgovaraju uputama procesora i napisane su u simboličnom obliku za upute i argumente. Asemblerski jezik omogućuje povezivanje dijelova programa i podataka putem naljepnica, izvedenih tijekom sastavljanja (za svaku naljepnicu izračunava se adresa, nakon čega se svaka pojava naljepnice zamjenjuje ovom adresom). Budući da se mikroprocesorski nastavni sustavi razlikuju, svaki procesor ima svoj vlastiti skup uputa za montažni jezik i sastavljače sklopova.

Obično su programi ili odjeljci koda napisani na montažnom jeziku u slučajevima kada programer treba optimizirati izvedbu (prilikom izrade upravljačkih programa), veličinu koda. Većina kompajlera omogućuje vam kombiniranje koda napisanog na različitim programskim jezicima u jednom programu. To vam omogućuje pisanje složenih programa korištenjem jezika visoke razine, bez gubitka performansi u vremenski važnim zadacima, koristeći za njih dijelove napisane na montažnom jeziku. Kombiniranje se postiže umetanjem fragmenata na asemblerskom jeziku u tekst programa (posebnim jezičnim smjernicama) ili pisanjem postupaka na asemblerskom jeziku. Ova se metoda koristi za jednostavne transformacije podataka, ali nije primjenjiva u punopravnom asemblerskom kodu s podacima i potprogramima s mnogim ulazima i izlazima koji nisu podržani od jezika visoke razine.

U ovom se slučaju koristi modularna kompilacija, kada se svaka programska datoteka prevede u objektni modul, a zatim se poveže (poveže) u gotov program. Datoteke objekata su blokovi strojnog koda i podataka, s nedefiniranim adresama referenci na podatke i postupke u drugim objektnim modulima, kao i popis njihovih postupaka i podataka. Veznik prikuplja kôd i podatke svakog objektnog modula u program, izračunava i popunjava adrese unakrsnih referenci između modula. U procesu povezivanja program se povezuje sa statičkim i dinamičkim knjižnicama (koje su arhive objektnih datoteka). Modularnom kompilacijom svaki objektni modul programa može biti napisan u svom programskom jeziku i kompiliran od vlastitog kompajlera (asembler ).

Programski jezik

Asembler je programski jezik niske razine koji je čitljiv format za pisanje strojnih uputa.

Upute na asemblerskom jeziku odgovaraju jedna na jednu s procesorskim uputama i zapravo predstavljaju prikladan simbolički oblik zapisa (mnemotehnički kod) naredbi i njihovih argumenata. Također, asemblerski jezik pruža osnovne apstrakcije softvera: povezivanje dijelova programa i podataka putem naljepnica sa simboličkim imenima i direktivama.

Direktive o asembleru omogućuju vam uključivanje blokova podataka (izričito opisanih ili pročitanih iz datoteke) u program; ponoviti određeni fragment određeni broj puta; uslovno sastaviti fragment; postaviti adresu izvršenja fragmenta, promijeniti vrijednosti naljepnica tijekom postupka kompilacije; koristiti makronaredbe s parametrima itd.

Svaki model procesora, u principu, ima svoj set uputa i odgovarajući montažni jezik (ili dijalekt).

Prednosti i nedostatci

  • minimalna količina suvišnog koda (koristeći manje uputa i pristupa memoriji). Kao rezultat - veća brzina i manja veličina programa
  • velike količine koda, veliki broj dodatni mali zadaci
  • slaba čitljivost koda, teško održavati (ispravljanje pogrešaka, dodavanje značajki)
  • poteškoća u primjeni paradigmi programiranja i bilo kojih drugih donekle složenih konvencija, poteškoća zajedničkog razvoja
  • manje dostupnih knjižnica, njihova slaba kompatibilnost
  • izravan pristup hardveru: I / O priključci, posebni registri procesora
  • sposobnost pisanja samo-modificirajućeg koda (tj. metaprogramiranja i bez potrebe za softverskim tumačem)
  • maksimalno "prilagođavanje" za željenu platformu (korištenje posebnih uputa, tehničke značajke "hardvera")
  • netolerancija prema drugim platformama (osim binarno kompatibilnih).

Sintaksa

Ne postoji univerzalno prihvaćen standard za sintaksu montažnih jezika. Međutim, postoje de facto standardi - tradicionalni pristupi koje koristi većina programera skupnih jezika. Glavni takvi standardi su Intelova sintaksa i AT&T sintaksa.

Općeniti format za pisanje uputa jednak je za oba standarda:

`[label:] opcode [operandi] [; komentar]`

Opcode je izravno mnemotehnička uputa procesoru. U njega se mogu dodati prefiksi (ponavljanja, promjena vrste adresiranja itd.). Operandi mogu biti konstante, nazivi registara, adrese u RAM-u itd. Razlike između standarda Intel i AT&T uglavnom se odnose na redoslijed nabrajanja operanda i njihovu sintaksu za različite metode adresiranja.

Mnemotehnika koja se koristi obično je ista za sve procesore iste arhitekture ili obitelji arhitektura (među nadaleko poznate su mnemotehnika Motorole, ARM, x86 procesora i kontrolera). Opisani su u specifikaciji procesora.

Na primjer, procesor Zilog Z80 naslijedio je skup naredbi Intel i8080, proširio ga i promijenio mnemotehniku ​​(i oznake registra) na svoj način. Na primjer, promijenio sam Intelov mov u ld. Procesori Motorola Fireball naslijedili su set uputa Z80, malo ga smanjivši. Istodobno, Motorola se službeno vratila u Intelovu mnemotehniku. i trenutno polovica alata za sastavljanje Fireball-a radi s Intelo-mnemotehnikom, a polovica s mnemotehnikama Zilog.

Direktive

Osim uputa, program može sadržavati i smjernice: naredbe koje se ne prevode izravno u strojne upute, već kontroliraju rad kompajlera. Njihov skup i sintaksa znatno se razlikuju i ne ovise o hardverskoj platformi, već o korištenom kompajleru (što dovodi do dijalekata jezika unutar iste obitelji arhitektura). Kao skup direktiva mogu se izdvojiti:

  • definicija podataka (konstante i varijable)
  • upravljanje organizacijom programa u memoriji i parametrima izlazne datoteke
  • postavljanje načina kompajlera
  • sve vrste apstrakcija (tj. elementi jezika visoke razine) - od dizajna postupaka i funkcija (radi pojednostavljenja provedbe paradigme proceduralnog programiranja) do uvjetnih struktura i petlji (za paradigmu strukturirano programiranje)
  • makronaredbe

Podrijetlo i kritika izraza "skupštinski jezik"

Ova vrsta jezika dobila je ime po imenu prevoditelja (kompajlera) s ovih jezika - asembler (engleski asembler). Ime potonjeg nastalo je zbog činjenice da na prvim računalima nije bilo jezika više razine, a jedina alternativa stvaranju programa pomoću asemblera bilo je programiranje izravno u kodovima.

Montažni jezik na ruskom jeziku često se naziva "asembler" (i nešto s tim u vezi - "asembler"), što je, prema engleskom prijevodu riječi, pogrešno, ali se uklapa u pravila ruskog jezika. Međutim, sam asembler (program) također se naziva jednostavno "asembler", a ne "asemblerski kompajler" itd.

Upotreba izraza "montažni jezik" također može dovesti do zablude da postoji jedan jezik niske razine ili barem standard za takve jezike. Pri imenovanju jezika na kojem je napisan određeni program, preporučljivo je navesti za koju je arhitekturu namijenjen i na kojem je dijalektu jezika napisan.

Sintaksni elementi:

Primjeri:

Pozdrav svijete !:

Primjer za verzije Intel x86 (IA32)

mov ax, cs mov ds, ax mov ah, 9 mov dx, offset Pozdrav int 21h xor sjekira, sjekira int 21h Pozdrav: db "Hello World!", 13, 10, "$"

Pozdrav svijete !:

Primjer za verzije Amiga

potez. l #DOS potez. l 4.w, a6 jsr - 0198 USD (a6); Premještanje OldOpenLibrary. l d0, a6 zapov. s. Van potez. l #HelloWorld, d1 A) moveq # 13, d2 jsr - $ 03AE (a6); WriteChars B) jsr - $ 03B4; PutStr premjesti. l a6, a1 potez. l 4.w, a6 jsr - 019EE (a6); CloseLibrary. Izlaz iz DOS-a dc. b "dos.library", 0 HelloWorld dc. b "Pozdrav svijetu!" , $ A, 0

Pozdrav svijete !:

Primjer za verzije AtariST

potez. l #helloworld, - (A7) potez # 9, - (A7) zamka # 1 addq. l # 6, A7 potez # 0, - (A7) zamka # 1 helloworld: dc. b "Pozdrav svijetu!", $ 0d, $ 0a, 0

Pozdrav svijete !:

Primjer za verzije Intel x86 (IA32)

NASM Linux, koristi Intelovu sintaksu. Sastavljanje i povezivanje:

  • nasm –f vilenjak –o zdravo.o zdravo.asm
  • ld -o zdravo zdravo.o

ODJELJAK. data msg db "Zdravo, svijete!", 0xa len equ $ - msg ODJELJAK. tekst globalni _start _start :; Točka ulaska u program mov eax, 4; "pisati" sistemski poziv mov ebx, 1 mov ecx, msg; Pokazivač na podatke mov edx, len; Količina podataka int 0x80; Poziv jezgre mov eax, 1; "_exit" sistemski poziv mov ebx, 0; Povratak 0 (sve je u redu) int 0x80; Prizivanje jezgre

Pozdrav svijete !:

Primjer za verzije PDP-8

/ - komentari.

/ Hello World u asembleru za DEC PDP - 8 * 200 pozdrav, cla cll tls / tls postavlja zastavicu za ispis. tad karakter / stvara indeksni registar dca ir1 / da bi dobio tad m6 znakova / postavi brojač za dca brojanje / unos znakova. dalje, tad i ir1 / dobiti karakter. jms tip / njegov tip. isz count / učiniti nešto drugo? jmp sljedeći / ne, unesite drugi znak hlt tipa, 0 / tip potprograma tsf jmp. - 1 tls cla jmp i type character ,. / koristi se kao početna vrijednost za ir1. 310 / V 305 / E 314 / D 314 / D 317 / O 254 /, 240/327 / Š 317 / O 322 / R 314 / D 304 / D 241 /! m6, - 15 brojanje, 0 ir1 = 10 $

Pozdrav svijete !:

Primjer za verzije PDP-11

Program je napisan u makro asembleru MACRO-11 Da biste kompilirali i pokrenuli ovaj program u OS RT-11, upotrijebite naredbu:

MAKRO POZDRAV

OTKRIVENE POGREŠKE: 0

LINK POZDRAV - Link. TRČI POZDRAV - Trči

NASLOV POZDRAV SVIJET; Titula. MCALL. TTOOUT ,. IZLAZI POZDRAV :: MOV #MSG, R1; Početna adresa retka 1 $: MOVB (R1) +, R0; Dobivamo sljedeći lik BEQ DONE; Ako je nula, izađite iz petlje. TTOOUT; Inače ispisujemo simbol BR 1 $; Ponavljanje petlje GOTOVO :. IZLAZ MSG :. ASCIZ / Zdravo, svijete! /; Niz Hello, world! ... KRAJ POZDRAV; Kraj programa HELLO

Pozdrav svijete !:

Primjer za verzije System / 360, System / 370

IBM System / 360/370/390 Osnovni jezik okupljača.

// IZVRŠI SKLOP POČETKA GLAVNI BALR 2, 0 KORIŠTENJEM *, 2 OTVORENA TISAK MVC BUF, HW PUT PRINT CLOSE PRINT EOJ HW DC CL132 "HELLO WORLD" BUF DS CL132 PRINT DTFPR IOAREA1 = BUF, DEVADDR = SYSLST, BLKS * UREĐAJ = 3203, CONTROL = DA, PRINTOV = DA KRAJ GLAVNO / * // EXEC LNKEDT // EXEC / * / &

Pozdrav svijete !:

Primjer za verzije Apple II

* POZDRAV SVIJET ZA 6502 JABUKA] [* ******************************** STROUT EQU $ DB3A LDY #> POZDRAV LDA #< HELLO JMP STROUT HELLO ASC "HELLO WORLD !", 00

Pozdrav svijete !:

Primjer za verzije PDP-10

CHTTYO - Svi se I / O izvode pomoću I / O kanala. Najbolje je napraviti simbolička imena za kanale koje koristite i pokrenuti ih s CH. Definirajte ta imena pomoću operatora MIDAS ==.

CALL je simbolična oznaka za pozivanje sistemskog poziva. Njegov je format .CALL.

OPEN otvara I / O kanal za upotrebu. Zahtijeva dva parametra - broj kanala i naziv uređaja u SIXBIT-u.

LOSE% LSFIL je sistemski poziv koji ispisuje I / O poruku pogreške ako se dogodi.

IOT je sistemski poziv koji se zapravo bavi I / O. Kao parametar trebate odrediti kanal i adresu koja sadrži kôd znaka za izlaz. Na primjer, „H predstavlja H.

NASLOV PRINTHELLO A = 1 CHTTYO == 1; Kanal za izlaz. POČETAK:; Otvaranje TTY kanala. ... POZOVI [SETZ? ŠESTBIT / OTVOREN / [. UAO, CHTTYO]? [SIXBIT / TTY /] ((SETZ))]. GUBITAK% LSFIL. IOT CHTTYO, ["H]; Ispiši POZDRAV SVIJET znak po znak .. IOT CHTTYO, [" E]. IOT CHTTYO, ["L]. IOT CHTTYO, [" L]. IOT CHTTYO, ["O]. IOT CHTTYO, [^ M]; Simbol nova linija... IOT CHTTYO, ["W]. IOT CHTTYO, [" O]. IOT CHTTYO, ["R]. IOT CHTTYO, [" L]. IOT CHTTYO, ["D]. VRIJEDNOST; Program, zaustavi :) KRAJ START

Fibonaccijevi brojevi:

Primjer za verzije MIPS32

Emulator MARS. Izlaz MARS konzole:

Fibonaccijevi brojevi su: 1 1 2 3 5 8 13 21 34 55 89 144 - program je završen s radom -

Program daje 15 Fibonaccijevih brojeva. Broj brojeva može se promijeniti u odjeljku .data.

Prostor podataka: .asciiz "" glava: .asciiz "Fibonaccijevi brojevi su: \ n" fib: .word 0: 15 veličina: .word 15 .text main: la $ t0, fib la $ t5, size lw $ t5, 0 ($ t5) li $ t2, 1 add.d $ f0, $ f2, $ f4 sw $ t2, 0 ($ t0) sw $ t2, 4 ($ t0) addi $ t1, $ t5, - 2 petlja: lw $ t3, 0 ($ t0) lw $ t4, 4 ($ t0) dodaj $ t2, $ t3, $ t4 sw $ t2, 8 ($ t0) addi $ t0, $ t0, 4 addi $ t1, $ t1, - 1 bgtz $ t1, loop la $ a0, fib move $ a1, $ t5 jal print li $ v0, 10 syscall print: dodaj $ t0, $ zero, $ a0 add $ t1, $ zero, $ a1 la $ a0, head li $ v0, 4 syscall out: lw $ a0, 0 ($ t0) li $ v0, 1 syscall la $ a0, razmak li $ v0, 4 syscall addi li $ v0, 1 la $ a0, ($ t2) syscall la $ a0, string1 li $ v0, 4 syscall mult $ t1, $ t2 mflo $ t1 li $ v0, 1 la $ a0, ($ t1) syscall la $ a0, string2 li $ v0, 4 syscall addiu $ t2, $ t2, 1 beq $ t2, 16, endloop j loop endloop: li $ v0, 10 syscall