Ohjelma assembly-kielellä. IBM-PC:n Assembler-kielen komentojärjestelmän yleiset ominaisuudet (komentojen perusjoukko, operandien osoitteiden perusmenetelmät). Ohjelmarakenne Assembler-kielellä. Kokoonpanokielen komennot

Yleistä tietoa koskien assembly-kieltä

Symbolinen kokoonpanokieli voi suurelta osin poistaa konekieliohjelmoinnin haitat.

Sen tärkein etu on, että assembly-kielellä kaikki ohjelman elementit esitetään symbolisessa muodossa. Symbolisten komentojen nimien muuntaminen binäärikoodeiksi on vastuulla erikoisohjelma- assembler, joka vapauttaa ohjelmoijan työvaltaisesta työstä ja eliminoi väistämättömät virheet.

Assembly-kielellä ohjelmoitaessa syötetyt symboliset nimet kuvastavat yleensä ohjelman semantiikkaa, ja komentojen lyhenne kuvastaa niiden päätehtävää. Esimerkiksi: PARAM - parametri, TABLE - taulukko, MASK - maski, ADD - yhteenlasku, ALI - vähennyslasku jne. jne. Ohjelmoijan on helppo muistaa tällaiset nimet.

Assembly-ohjelmointiin tarvitaan monimutkaisempia työkaluja kuin konekieliseen ohjelmointiin: tarvitaan mikrotietokoneeseen tai PC:hen perustuvia tietokonejärjestelmiä oheislaitteet(aakkosnumeerinen näppäimistö, merkkinäyttö, float-asema ja tulostuslaite), sekä vakio- tai ristiohjelmointijärjestelmät vaadituille mikroprosessoreille. Assembly-kielen avulla voit kirjoittaa ja korjata tehokkaasti paljon monimutkaisempia ohjelmia kuin konekieli (jopa 1–4 kt).

Kokoonpanokielet ovat konesuuntautuneita, eli riippuvat vastaavan mikroprosessorin konekielestä ja rakenteesta, koska niissä jokaiselle mikroprosessorin käskylle on annettu erityinen symbolinen nimi.

Assembly-kielet lisäävät merkittävästi ohjelmoijan tuottavuutta konekieliin verrattuna ja säilyttävät samalla mahdollisuuden käyttää kaikkia ohjelmiston käytettävissä olevia mikroprosessorin laitteistoresursseja. Tämän ansiosta pätevät ohjelmoijat voivat kirjoittaa ohjelmia, jotka voidaan suorittaa alle lyhyt aika ja vievät vähemmän muistia korkean tason kielellä luotuihin ohjelmiin verrattuna.

Tältä osin lähes kaikki ohjelmat syöttö-/tulostuslaitteiden (ohjaimien) ohjaamiseksi on kirjoitettu kokoonpanokielellä huolimatta melko suuresta valikoimasta korkean tason kieliä.

Assembly-kieltä käyttämällä ohjelmoija voi asettaa seuraavat parametrit:

kunkin mikroprosessorin konekielikomennon muistomerkit (symbolinen nimi);

vakiomuoto kokoonpanokielellä kirjoitetun ohjelman riveille;

muoto ilmoittamista varten eri tavoin osoite- ja komentomuunnelmat;

muoto merkkivakioiden ja kokonaislukuvakioiden määrittämiseksi eri numerojärjestelmissä;

pseudo-komennot, jotka ohjaavat ohjelman kokoamista (kääntämistä).

Assembly-kielessä ohjelma kirjoitetaan rivi riviltä, ​​eli kullekin komennolle on varattu yksi rivi.

Yleisimpien mikroprosessorityyppien pohjalta rakennetuissa mikrotietokoneissa assembly-kieltä voi olla useita muunnelmia, mutta yleensä yksi on käytännössä laajalti käytössä - tämä on ns. standardi assembly-kieli.

Ohjelmointi konekäskytasolla on minimitaso, jolla ohjelmia voidaan kirjoittaa. Koneen ohjejärjestelmän tulee olla riittävä suorittamaan vaaditut toimenpiteet antamalla ohjeita tietokonelaitteistolle.

Jokainen konekäsky koostuu kahdesta osasta:

· leikkaussali - "mitä tehdä" määrittäminen;

· Operandi - prosessointiobjektien määritteleminen, "mitä tehdä".

Mikroprosessorikoneen komento, joka on kirjoitettu kokoonpanokielellä, on yksi rivi, jolla on seuraava syntaktinen muoto:

otsikko komento/ohjeoperandi(t) ;kommentit

Tässä tapauksessa rivin pakollinen kenttä on komento tai käsky.

Tunniste, komento/käsky ja operandit (jos sellaisia ​​on) erotetaan vähintään yhdellä välilyönnillä tai sarkainmerkillä.

Jos komentoa tai käskyä on jatkettava seuraavalle riville, käytetään kenoviivaa: \.

Oletusarvoisesti kokoonpanokieli ei tee eroa isojen ja pienten kirjainten välillä komentoja tai käskyjä kirjoitettaessa.

Suora osoitus: Tehokas osoite määräytyy suoraan konekäskyn offset-kentän perusteella, joka voi olla 8, 16 tai 32 bitin kokoinen.

mov eax, summa ; eax = summa

Assembler korvaa summan vastaavalla datasegmenttiin tallennetulla osoitteella (oletusarvoisesti ds-rekisterin osoite) ja sijoittaa summaan tallennetun arvon eax-rekisteriin.

Epäsuora osoitus sillä on puolestaan ​​seuraavat tyypit:

· epäsuora perusosoite (rekisteri);

· epäsuora perusosoite (rekisteri) offsetilla;

· epäsuora indeksiosoitus;

· epäsuora perusindeksiosoitus.

Epäsuora perus (rekisteri-) osoitus. Tällä osoituksella operandin tehollinen osoite voi sijaita missä tahansa yleiskäyttöisessä rekisterissä paitsi sp/esp ja bp/ebp (nämä ovat erityisiä rekistereitä pinosegmentin kanssa työskentelemistä varten). Syntaktisesti komennossa tämä osoitetila ilmaistaan ​​liittämällä rekisterin nimi sisään hakasulkeet.

mov eax, ; eax = *esi; *esi arvo osoitteessa esi

Johdanto.

Kieli, jolla se on kirjoitettu alkuperäinen ohjelma, nimeltään Sisäänkäynti kieli, ja kieli, jolle se käännetään suorittimen suorittamista varten vapaapäivinä kieli. Prosessia, jossa syöttökieli muunnetaan tulostuskieleksi, kutsutaan lähettää. Koska prosessorit pystyvät suorittamaan ohjelmia binäärisellä konekielellä, jota ei käytetä ohjelmointiin, kaikki lähdeohjelmat on käännettävä. Tunnettu kaksi tapaa lähetykset: kokoaminen ja tulkinta.

klo kokoelma lähdeohjelma käännetään ensin kokonaan vastaavaksi ohjelmaksi lähtökielellä, ns esine ohjelma ja suoritettiin sitten. Tämä prosessi toteutetaan käyttämällä erityistä ohjelmat, nimeltään kääntäjä. Kääntäjä, jonka syöttökieli on symbolinen muoto binäärikoodien konekielistä (tulostus) edustamisesta, on ns. kokoaja.

klo tulkintoja Jokainen lähdeohjelman tekstirivi analysoidaan (tulkitaan) ja siinä määritetty komento suoritetaan välittömästi. Tämän menetelmän toteuttaminen on uskottu tulkki ohjelma. Tulkinta kestää kauan. Tehokkuuden lisäämiseksi tulkki muuntaa ensin kaikki jokaisen rivin käsittelyn sijaan tiimi merkkijonot (

). Luotua symbolisarjaa käytetään suorittamaan alkuperäiselle ohjelmalle määrätyt toiminnot.

Alla käsitelty kokoonpanokieli toteutetaan kääntämisen avulla.

Kielen ominaisuudet.

Kokoonpanon pääominaisuudet:

● binäärikoodien sijaan kieli käyttää symbolisia nimiä - muistitekniikka. Esimerkiksi summauskomennolle (

) käytetään muistomerkkejä

Vähennykset (

kertolasku (

Divisioonat (

jne. Symbolisia nimiä käytetään myös osoittamaan muistisoluja. Ohjelmoidaksesi kokoonpanokielellä binäärikoodien ja osoitteiden sijaan sinun on tiedettävä vain symboliset nimet, jotka assembler kääntää binäärikoodeiksi;

jokainen väite vastaa yksi konekäsky(koodi), ts. konekäskyjen ja operaattorien välillä on yksi yhteen vastaavuus kokoonpanokieliohjelmassa;

● kieli tarjoaa pääsyn kaikkiin esineisiin ja joukkueet. Korkean tason kielillä ei ole tätä kykyä. Esimerkiksi kokoonpanokielen avulla voit tarkistaa lippurekisterin bitit ja korkean tason kielen (esim.

) ei ole tätä kykyä. Huomaa, että järjestelmän ohjelmointikielet (esimerkiksi C) ovat usein väliasemassa. Saavutettavuuden kannalta ne ovat lähempänä assembly-kieltä, mutta niissä on korkean tason kielen syntaksi;

● kokoonpanokieli ei ole universaali kieli. Jokaisella tietyllä mikroprosessoriryhmällä on oma kokoajansa. Korkean tason kielillä ei ole tätä haittaa.

Toisin kuin korkean tason kielet, ohjelman kirjoittaminen ja virheenkorjaus asennuskielellä vie paljon aikaa. Tästä huolimatta kokoonpanokieli on saanut laaja käyttö seuraavien olosuhteiden vuoksi:

● Assembly-kielellä kirjoitettu ohjelma on kooltaan huomattavasti pienempi ja toimii paljon nopeammin kuin korkean tason kielellä kirjoitettu ohjelma. Joissakin sovelluksissa näillä indikaattoreilla on ensisijainen rooli, esimerkiksi monissa järjestelmäohjelmat(mukaan lukien kääntäjät), ohjelmat luottokorteilla, Kännykät, laiteohjaimet jne.;

● jotkin menettelyt vaativat täysi pääsy laitteistoon, mikä on yleensä mahdotonta tehdä korkean tason kielellä. Tämä kotelo sisältää keskeytykset ja keskeytyskäsittelijät käyttöjärjestelmissä sekä laiteohjaimet sulautetuissa reaaliaikaisissa järjestelmissä.

Useimmissa ohjelmissa vain pieni prosenttiosuus koodin kokonaismäärästä on vastuussa suuresta prosenttiosuudesta ohjelman suoritusajasta. Tyypillisesti 1 % ohjelmasta on vastuussa 50 % suoritusajasta ja 10 % ohjelmasta 90 % suoritusajasta. Siksi tietyn ohjelman kirjoittamiseen todellisissa olosuhteissa käytetään sekä assembleria että yhtä korkean tason kieliä.

Operaattorin muoto assembly-kielellä.

Kokoonpanokieliohjelma on luettelo komentoista (lausekkeet, lauseet), joista jokainen on erillisellä rivillä ja sisältää neljä kenttää: nimikekenttä, operaatiokenttä, operandikenttä ja kommenttikenttä. Jokaisella kentällä on erillinen sarake.

Etikettikenttä.

Tarrakenttään on varattu sarake 1. Tarra on symbolinen nimi tai tunniste, osoitteita muisti. Se on välttämätöntä, jotta voit:

● tehdä ehdollinen tai ehdoton siirtyminen komentoon;

● päästä käsiksi paikkaan, johon tiedot on tallennettu.

Tällaiset lausunnot on varustettu etiketillä. Nimen ilmoittamiseen käytetään englannin aakkosten (isoja) kirjaimia ja numeroita. Nimen alussa tulee olla kirjain ja lopussa kaksoispiste. Kaksoispistenimike voidaan kirjoittaa erilliselle riville ja opcode voidaan kirjoittaa sarakkeen 2 seuraavalle riville, mikä yksinkertaistaa kääntäjän työtä. Kaksoispisteen puuttuminen ei mahdollista tarran erottamista toimintakoodista, jos ne sijaitsevat eri riveillä.

Joissakin kokoonpanokielen versioissa kaksoispisteet sijoitetaan vain ohjetarrojen jälkeen, ei tietotarrojen jälkeen, ja tarran pituus voi olla rajoitettu 6 tai 8 merkkiin.

Tarrakentässä ei saa olla samoja nimiä, koska tarra liittyy komentoosoitteisiin. Jos ohjelman suorituksen aikana ei tarvitse kutsua komentoa tai dataa muistista, etikettikenttä jää tyhjäksi.

Toimintakoodikenttä.

Tämä kenttä sisältää komennon tai pseudo-komennon muistokoodin (katso alla). Komentomuistikoodin valitsevat kielen kehittäjät. Assembly-kielellä

muistomerkki on valittu lataamaan rekisteri muistista

), ja tallentaa rekisterin sisältö muistiin - muistomerkki

). Assembly-kielillä

molemmissa toiminnoissa voit käyttää samaa nimeä

Jos muistonimien valinta voi olla mielivaltainen, niin kahden konekäskyn käyttötarve määräytyy prosessorin arkkitehtuurista

Rekisterien muistiinpanot riippuvat myös assembler-versiosta (taulukko 5.2.1).

Operandi kenttä.

Tässä sijaitsee lisäinformaatio, joita tarvitaan toimenpiteen suorittamiseen. Hyppykomentojen operandikentässä ilmoitetaan osoite, johon hyppy on tehtävä, sekä osoitteet ja rekisterit, jotka ovat konekäskyn operandeja. Esimerkkinä annamme operandit, joita voidaan käyttää 8-bittisille prosessoreille

● numeeriset tiedot,

esitetään eri numerojärjestelmissä. Käytettävän numerojärjestelmän osoittamiseksi vakiota seuraa yksi seuraavista Latinalaiset kirjaimet: SISÄÄN,

Vastaavasti binääri-, oktaali-, heksadesimaali- ja desimaalilukujärjestelmät (

Sinun ei tarvitse kirjoittaa sitä ylös). Jos heksadesimaaliluvun ensimmäinen numero on A, B, C,

Sitten eteen lisätään merkityksetön 0 (nolla);

● sisäisten mikroprosessorirekisterien ja muistisolujen koodit

M (informaation lähteet tai vastaanottajat) kirjainten A, B, C muodossa,

M tai niiden osoitteet missä tahansa numerojärjestelmässä (esimerkiksi 10B - rekisteriosoite

binäärijärjestelmässä);

● tunnisteet,

ilma-alusparien rekisteröintiä varten,

Ensimmäiset kirjaimet ovat B,

N; akun ja ominaisuusrekisterin parille -

; ohjelmalaskuria varten -

;pinoosoittimelle -

● tarrat, jotka osoittavat operandien osoitteet tai seuraavat ehtolauseen käskyt

(jos ehto täyttyy) ja ehdottomia siirtymiä. Esimerkiksi operandi M1 komennossa

tarkoittaa tarvetta siirtyä ehdottomaan komentoon, jonka osoite tarrakentässä on merkitty tunnisteella M1;

● ilmaisuja,

jotka muodostetaan yhdistämällä edellä käsitellyt tiedot aritmeettisten ja loogisten operaattoreiden avulla. Huomaa, että datatilan varaustapa riippuu kieliversiosta. Assembly-kielen kehittäjät for

Määritä sana) ja syötä se myöhemmin Vaihtoehtoinen vaihtoehto.

joka oli alusta lähtien prosessorien kielellä

Kieliversiossa

käytetty

Määritä vakio).

Prosessorit käsittelevät eripituisia operandeja. Sen määrittämiseksi kokoajien kehittäjät tekivät erilaisia ​​päätöksiä, esimerkiksi:

Eripituisilla II-rekistereillä on eri nimet: EAX - 32-bittisten operandien sijoittamiseen (tyyppi

); AX - 16-bittiselle (tyyppi

ja AN - 8-bittiselle (tyyppi

● prosessoreille

Suffiksit lisätään jokaiseen toimintakoodiin: suffiksi

Tyyppiä varten

; tyypin pääte ".B".

erilaisia ​​opkoodeja käytetään eripituisille operandeille, esimerkiksi lataamaan tavu, puolisana (

) ja sanat 64-bittiseen rekisteriin opkoodeja käyttäen

vastaavasti.

Kommentit-kenttä.

Tämä kenttä sisältää selitykset ohjelman toiminnoista. Kommentit eivät vaikuta ohjelman toimintaan ja on tarkoitettu ihmisille. Niitä voidaan tarvita ohjelman muokkaamiseen, mikä ilman tällaisia ​​kommentteja voi olla täysin käsittämätön jopa kokeneille ohjelmoijille. Kommentti alkaa symbolilla ja sitä käytetään selittämään ja dokumentoimaan ohjelmia. Kommentin aloitusmerkki voi olla:

● puolipiste (;) yrityksen prosessorien kielillä

Huutomerkki(!) kielillä

Jokaista erillistä kommenttiriviä edeltää johtava merkki.

Pseudo-komennot (käskyt).

Assembly-kielessä on kaksi päätyyppiä komentoja:

perus ohjeet, jotka vastaavat suorittimen konekoodia. Nämä komennot suorittavat kaiken ohjelman tarkoittaman käsittelyn;

pseudo-komennot tai käskyjä, suunniteltu palvelemaan ohjelman kääntämistä koodiyhdistelmäkielelle. Esimerkkinä taulukossa. 5.2.2 näyttää joitain pseudo-komentoja assembleriltä

perheen puolesta

.

Ohjelmoinnissa on tilanteita, joissa algoritmin mukaan sama komentoketju on toistettava monta kertaa. Päästäksesi pois tilanteesta voit:

● kirjoittaa vaadittu komentosarja aina kun se tapahtuu. Tämä lähestymistapa johtaa ohjelman määrän kasvuun;

● Järjestä tämä sekvenssi proseduuriksi (alirutiiniksi) ja kutsu se tarvittaessa. Tällä lähdöllä on haittapuolensa: joka kerta, kun joudut suorittamaan eja paluukäskyn, jotka lyhyen ja usein käytetyn sekvenssin aikana voivat vähentää ohjelman nopeutta huomattavasti.

Yksinkertaisin ja tehokas menetelmä komentoketjun toistuva toisto koostuu käytöstä makro, joka voidaan esittää pseudo-komentona, joka on suunniteltu kääntämään uudelleen ohjelmassa usein esiintyvä komentoryhmä.

Makrolle tai makrokomennolle on ominaista kolme näkökohtaa: makromäärittely, makroinversio ja makrolaajennus.

Makro määritelmä

Tämä on toistuvasti toistuvan ohjelman komentosarjan nimitys, jota käytetään ohjelman tekstin viittauksiin.

Makromääritelmällä on seuraava rakenne:

Luettelo ilmaisuista; Makro määritelmä

Annetussa makromääritelmän rakenteessa voidaan erottaa kolme osaa:

● otsikko

makro, mukaan lukien nimi

Pseudo-komento

ja joukko parametreja;

● merkitty pisteillä kehon makro;

● joukkue

valmistumisen

makron määritelmät.

Makromäärittelyparametrijoukko sisältää luettelon kaikista valitun käskyryhmän operandikentässä annetuista parametreista. Jos nämä parametrit on annettu aiemmin ohjelmassa, niitä ei tarvitse ilmoittaa makromäärittelyn otsikossa.

Valitun komentoryhmän kokoamiseksi uudelleen käytetään nimestä koostuvaa vetoomusta

makrokomennot ja parametrien luettelo muilla arvoilla.

Kun kokoaja kohtaa makromäärityksen käännösprosessin aikana, se tallentaa sen makromäärittelytaulukkoon. Myöhemmissä esiintymisissä nimen ohjelmassa (

) makrosta, kokoaja korvaa sen makron rungolla.

Makron nimen käyttäminen opkoodina kutsutaan makron kääntäminen(makrokutsu) ja korvaamalla sen makron rungolla - makrolaajennus.

Jos ohjelma esitetään merkkijonona (kirjaimet, numerot, välilyönnit, välimerkit ja rivinvaihdot siirtyäksesi uudelle riville), makrolaajennus koostuu joidenkin tämän sarjan ketjujen korvaamisesta muilla ketjuilla.

Makrolaajennus tapahtuu kokoonpanoprosessin aikana, ei ohjelman suorituksen aikana. Merkkijonojen käsittelymenetelmät on määritetty makro tarkoittaa.

Kokoonpanoprosessi suoritetaan kahdessa erässä:

● Ensimmäisellä kerralla kaikki makromääritykset säilyvät ja makrokutsut laajennetaan. Tässä tapauksessa alkuperäinen ohjelma luetaan ja muunnetaan ohjelmaksi, jossa kaikki makromääritykset poistetaan ja jokainen makrokutsu korvataan makron rungolla;

● toinen vaihe käsittelee tuloksena olevan ohjelman ilman makroja.

Makrot parametreillä.

Jotta voit työskennellä toistuvien komentosarjojen kanssa, joiden parametrit voivat saada eri arvoja, tarjotaan makromääritykset:

● kanssa todellinen parametrit, jotka sijoitetaan makrokutsun operandikenttään;

● kanssa muodollinen parametrit. Makrolaajennuksen aikana jokainen makron rungossa esiintyvä muodollinen parametri korvataan vastaavalla todellisella parametrilla.

käyttämällä makroja parametrien kanssa.

Ohjelma 1 sisältää kaksi samanlaista komentosarjaa, jotka eroavat siinä, että ensimmäinen vaihtaa P ja

Ja toinen

Ohjelma 2 sisältää makron, jossa on kaksi muodollista parametria P1 ja P2. Makron laajennuksen aikana jokainen P1-merkki makron rungossa korvataan ensimmäisellä todellisella parametrilla (P,

), ja symboli P2 korvataan toisella todellisella parametrilla (

) ohjelmasta nro 1. Makrokutsussa

ohjelma 2 on merkitty: P,

Ensimmäinen todellinen parametri,

Toinen todellinen parametri.

Ohjelma 1

Ohjelma 2

MOV EBX,Q MOV EAX,Pl

MOV Q, EAX MOV EBX, P2

MOV P, EBX MOV P2, EAX

Laajennetut ominaisuudet.

Katsotaanpa joitain edistyneitä kieliominaisuuksia

Jos makroa, joka sisältää ehdollisen hyppykomennon ja tunnisteen, johon hypätään, kutsutaan kaksi kertaa tai useammin, otsikko monistuu (katso otsikkoongelma), mikä aiheuttaa virheen. Siksi jokainen puhelu määrittää erillisen nimen parametriksi (ohjelmoijalta). Kielessä

etiketti on ilmoitettu paikalliseksi (

) ja edistyneiden ominaisuuksien ansiosta kokoaja luo automaattisesti erilaisen tunnisteen joka kerta, kun makroa laajennetaan.

voit määrittää makroja muiden makrojen sisällä. Tämä edistynyt ominaisuus on erittäin hyödyllinen yhdessä ohjelman ehdollisen linkityksen kanssa. Harkitsemme

IF WORDSIZE GT 16 M2 MAKRO

M2-makro voidaan määritellä käskyn molemmissa osissa

Määritelmä riippuu kuitenkin siitä, millä prosessorilla ohjelma on koottu: 16-bittiselle vai 32-bittiselle. Jos M1:tä ei kutsuta, makroa M2 ei määritellä ollenkaan.

Toinen edistynyt ominaisuus on, että makrot voivat kutsua muita makroja, mukaan lukien itseään - rekursiivinen puhelu. Jälkimmäisessä tapauksessa loputtoman silmukan välttämiseksi makron on välitettävä itselleen parametri, joka muuttuu jokaisen laajennuksen myötä, ja myös tarkistaa tämä parametri ja lopeta rekursio, kun parametri saavuttaa tietyn arvon.

Makrovälineiden käytöstä assemblerissä.

Makroja käytettäessä kokoajan on kyettävä suorittamaan kaksi toimintoa: tallentaa makromääritykset Ja laajentaa makrohaasteita.

Tallennetaan makromääritelmiä.

Kaikki makrojen nimet tallennetaan taulukkoon. Jokaisen nimen mukana on osoitin vastaavaan makroon, jotta sitä voidaan kutsua tarvittaessa. Joillakin kokoajilla on erillinen taulukko makronimille, toisissa yleinen taulukko, jossa makronimien ohella kaikki koneen ohjeet ja käskyt sijaitsevat.

Kun kohtaat makron kokoonpanon aikana on luotu:

uusi pöytäelementti makron nimellä, parametrien lukumäärällä ja osoittimella toiseen makromäärittelytaulukkoon, johon makron runko tallennetaan;

● luettelo muodollinen parametrit.

Tämän jälkeen makron runko, joka on yksinkertaisesti merkkijono, luetaan ja tallennetaan makron määritelmätaulukkoon. Silmukan rungossa esiintyvät muodolliset parametrit on merkitty erikoishahmo.

Makron sisäinen esitys

yllä olevasta esimerkistä ohjelmalle 2 (s. 244) on:

MOV EAX, MOV EBX, MOV MOV &

jossa puolipistettä käytetään rivinvaihtomerkkinä ja et-merkkiä & käytetään muodollisena parametrimerkkinä.

Makropuheluiden laajentaminen.

Aina kun makromäärittely kohdataan kokoonpanon aikana, se tallennetaan makrotaulukkoon. Kun makroa kutsutaan, kokoaja lopettaa tilapäisesti syöttötietojen lukemisen syöttölaitteelta ja alkaa lukea tallennettua makrorunkoa. Makrorungosta poimitut muodolliset parametrit korvataan todellisilla parametreilla ja ne tarjotaan kutsulla. Et- ja ennen -parametrit antavat kokoajan tunnistaa ne.

Huolimatta siitä, että assembler-versioita on monia, kokoonpanoprosesseilla on yhteisiä piirteitä ja ne ovat monella tapaa samanlaisia. Kaksivaiheisen kokoajan toimintaa käsitellään alla.

Kaksivaiheinen kokoaja.

Ohjelma koostuu useista lauseista. Siksi näyttää siltä, ​​​​että kokoamisen aikana voit käyttää seuraavaa toimintosarjaa:

● kääntää se konekielelle;

● siirtää tuloksena oleva konekoodi tiedostoon ja vastaava osa listauksesta toiseen tiedostoon;

● toista lueteltuja toimenpiteitä, kunnes koko ohjelma on käännetty.

Tämä lähestymistapa ei kuitenkaan ole tehokas. Esimerkkinä on niin sanottu ongelma eteenpäin linkki. Jos ensimmäinen lause on hyppy lauseeseen P, joka sijaitsee aivan ohjelman lopussa, kokoaja ei voi kääntää sitä. Hänen on ensin määritettävä operaattorin P osoite, ja tätä varten hänen on luettava koko ohjelma. Jokaista lähdeohjelman täydellistä lukemista kutsutaan kulku. Katsotaanpa, kuinka voit ratkaista ennakoiva linkkiongelman käyttämällä kahta kulkua:

ensimmäisellä läpikäynnillä sinun pitäisi kerätä ja tallenna kaikki symbolimääritykset (mukaan lukien tarrat) taulukkoon, ja toisella läpikäynnillä lue ja kokoa jokainen operaattori. Tämä menetelmä on suhteellisen yksinkertainen, mutta toinen läpikulku alkuperäisen ohjelman läpi vaatii lisäaikaa I/O-toimintoihin;

● ensimmäisellä kierroksella sinun pitäisi muuntaa ohjelman välimuotoon ja tallenna se taulukkoon ja suorita toinen läpikulku ei alkuperäisen ohjelman, vaan taulukon mukaan. Tämä kokoonpanomenetelmä säästää aikaa, koska toinen läpikulku ei suorita I/O-toimintoja.

Ensimmäinen läpimeno.

Ensimmäinen maali- rakentaa symbolitaulukko. Kuten edellä todettiin, ensimmäisen vaiheen toinen tavoite on säilyttää kaikki makromääritykset ja laajentaa kutsuja sellaisina kuin ne ilmestyvät. Näin ollen sekä symbolien määrittely että makrolaajennus tapahtuvat yhdellä kertaa. Symboli voi olla kumpi tahansa etiketti, tai merkitys, jolle on annettu tietty nimi komennolla -you:

;Arvo - puskurin koko

Määrittämällä symbolisille nimille merkityksen komennon otsikkokentässä kokoaja määrittää olennaisesti osoitteet, jotka jokaisella komennolla on ohjelman suorittamisen aikana. Tätä tarkoitusta varten kokoaja varastoi kokoonpanon aikana ohjeiden osoitelaskuri(

) erikoismuuttujana. Ensimmäisen läpimenon alussa erikoismuuttujan arvoksi asetetaan 0 ja sitä lisätään jokaisen käsitellyn komennon jälkeen kyseisen komennon pituudella. Esimerkkinä taulukossa. 5.2.3 näyttää ohjelmafragmentin, joka ilmaisee komentojen pituuden ja laskurin arvot. Ensimmäisellä läpikäynnillä luodaan taulukot symbolisia nimiä, ohjeita Ja toimintakoodit, ja tarvittaessa kirjaimellinen pöytä. Literaali on vakio, jolle kokoaja varaa automaattisesti muistia. Huomaa heti, että nykyaikaiset prosessorit sisältävät ohjeet välittömillä osoitteilla, joten niiden kokoajat eivät tue literaaleja.

Symbolien nimitaulukko

sisältää yhden elementin jokaiselle nimelle (taulukko 5.2.4). Jokainen symbolisen nimitaulukon elementti sisältää itse nimen (tai osoittimen siihen), sen numeerisen arvon ja joskus joitain lisätietoja, jotka voivat sisältää:

● symboliin liittyvän tietokentän pituus;

● muistin uudelleenallokointibitit (jotka osoittavat, muuttuuko symbolin arvo, jos ohjelma ladataan eri osoitteeseen kuin assembler tarkoitti);

● tiedot siitä, voidaanko symbolia käyttää toimenpiteen ulkopuolelta.

Symboliset nimet ovat etikettejä. Ne voidaan määrittää käyttämällä operaattoreita (esim.

Direktiivin taulukko.

Tässä taulukossa luetellaan kaikki käskyt tai pseudo-komennot, jotka kohdataan ohjelmaa koottaessa.

Toimintakooditaulukko.

Taulukossa on jokaiselle operaatiokoodille erilliset sarakkeet: operaatiokoodin nimi, operandi 1, operandi 2, operaatiokoodin heksadesimaaliarvo, komennon pituus ja komentotyyppi (taulukko 5.2.5). Operaatiokoodit on jaettu ryhmiin operandien lukumäärän ja tyypin mukaan. Komentotyyppi määrittää ryhmän numeron ja prosessin, jota kutsutaan käsittelemään kaikki kyseisen ryhmän komennot.

Toinen passi.

Toisen syötön maali- objektiohjelman luominen ja tarvittaessa kokoonpanoprotokollan tulostaminen; tuottavat tiedot, joita linkittäjä tarvitsee linkittääkseen eri aikoina kootut proseduurit yhdeksi suoritettavaksi tiedostoksi.

Toisessa läpikäynnissä (kuten ensimmäisessä) lauseet sisältävät rivit luetaan ja käsitellään yksitellen. Alkuperäinen operaattori ja lähtöoperaattori johdettiin siitä heksadesimaalimuodossa esine Koodi voidaan tulostaa tai laittaa puskuriin myöhempää tulostusta varten. Kun komentoosoitelaskuri on nollattu, komento kutsutaan seuraava lausunto.

Lähdeohjelma voi sisältää virheitä, esimerkiksi:

annettua symbolia ei ole määritelty tai se on määritelty useammin kuin kerran;

● operaatiokoodia edustaa virheellinen nimi (kirjoitusvirheen vuoksi), siinä ei ole tarpeeksi operandeja tai siinä on liian monta operandia;

● ei operaattoria

Jotkut kokoajat voivat havaita määrittelemättömän symbolin ja korvata sen. Useimmissa tapauksissa, kun kokoaja havaitsee virheilmoituksen, se näyttää virheilmoituksen näytöllä ja yrittää jatkaa kokoonpanoprosessia.

Assembly-kielelle omistettuja artikkeleita.

Aihe 2.5 Prosessoriohjelmoinnin perusteet

Ohjelman pituuden kasvaessa eri toimintojen koodien muistaminen on yhä vaikeampaa. Mnemoniikka auttaa tässä asiassa.

Symbolinen komentokoodauskieli kutsutaan kokoaja.

Kokoonpanokieli on kieli, jossa jokainen ilmaisu vastaa täsmälleen yhtä koneen komentoa.

Kokoonpano kutsutaan ohjelman muuntamista kokoonpanokielestä, eli ohjelman valmistamista konekielellä korvaamalla symboliset operaatioiden nimet konekoodeilla ja symboliset osoitteet absoluuttisilla tai suhteellisilla luvuilla, sekä kirjastoohjelmien sisällyttämistä ja symbolisten käskyjen sekvenssien generointia määrittämällä tiettyjä parametreja. mikrotiimeissä. Tämä ohjelma sijaitsevat yleensä ROMissa tai syötetään RAM-muistiin jostain ulkoisesta tietovälineestä.

Assembly-kielellä on useita ominaisuuksia, jotka erottavat sen korkean tason kielistä:

1. Tämä on yksi yhteen vastaavuus kokoonpanokielen lausekkeiden ja konekäskyjen välillä.

2. Assembly-ohjelmoijalla on pääsy kaikkiin kohdekoneessa oleviin objekteihin ja ohjeisiin.

Ohjelmoinnin perusteiden ymmärtäminen konesuuntautuneilla kielillä on hyödyllistä:



PC-arkkitehtuurin parempi ymmärtäminen ja tietokoneiden osaavampi käyttö;

Kehittää rationaalisempia algoritmien rakenteita sovellusten ongelmien ratkaisuohjelmille;

Mahdollisuus tarkastella ja korjata suoritettavia ohjelmia laajennuksilla .exe ja .com, jotka on koottu mistä tahansa korkean tason kielistä, jos lähdeohjelmat katoavat (kutsumalla määritettyjä ohjelmia DEBUG-ohjelman debuggerissa ja purkamalla niiden näyttö kokoonpanossa Kieli);

Ohjelmien kokoaminen kriittisimpien ongelmien ratkaisemiseen (konesuuntautuneella kielellä kirjoitettu ohjelma on yleensä tehokkaampi - lyhyempi ja nopeampi 30-60 prosenttia korkean tason kielistä kääntämisen tuloksena saaduista ohjelmista)

Toteuttaa pääohjelmaan sisältyviä proseduureja erillisten fragmenttien muodossa, mikäli niitä ei voida toteuttaa käytetyllä korkean tason kielellä tai käyttöjärjestelmän palveluproseduureja käyttäen.

Assembly-kielinen ohjelma voi toimia vain yhdessä tietokoneperheessä, kun taas korkean tason kielellä kirjoitettu ohjelma voi toimia eri koneissa.

Kokoonpanokielen aakkoset koostuvat ASCII-merkeistä.

Luvut ovat vain kokonaislukuja. On:

Binääriluvut päättyvät kirjaimeen B;

Desimaaliluvut, jotka päättyvät kirjaimeen D;

Heksadesimaaliluvut päättyvät kirjaimeen H.

RAM, rekisterit, tietojen esittäminen

Tietylle MP-sarjalle käytetään yksilöllistä ohjelmointikieltä - kokoonpanokieltä.

Kokoonpanokieli on konekoodien ja korkean tason kielten välissä. Ohjelmointi tällä kielellä on helpompaa. Assembly-kielinen ohjelma hyödyntää tehokkaammin tietyn koneen (tarkemmin MP:n) ominaisuuksia kuin korkean tason kielen ohjelma (joka on ohjelmoijalle yksinkertaisempi kuin assemblerille). Katsotaanpa ohjelmoinnin perusperiaatteita konesuuntautuneilla kielillä MP KR580VM80:n kokoonpanokielen esimerkin avulla. Kielellä ohjelmoinnissa käytetään yleistä metodologiaa. Erityiset tekniset tekniikat ohjelmien tallentamiseen liittyvät kohdeMP:n arkkitehtuurin ja komentojärjestelmän ominaisuuksiin.

Ohjelmistomalli MP KR580VM80:een perustuva mikroprosessorijärjestelmä

Kuvan 1 mukainen MPS:n ohjelmistomalli

MP-porttien muisti

S Z A.C. P C

Kuva 1

Ohjelmoijan näkökulmasta MP KR580VM80:ssä on seuraavat ohjelmakäyttöiset rekisterit.

A– 8-bittinen akkurekisteri. Se on kansanedustajan päärekisteri. Kaikki ALU:ssa suoritettavat toiminnot sisältävät yhden prosessoitavista operandeista sijoittamisen akkuun. ALU:n toiminnon tulos tallennetaan yleensä myös A:hun.

B, C, D, E, H, L– 8-bittiset yleiskäyttöiset rekisterit (GPR). Sisäinen muisti MP. Suunniteltu tallentamaan käsiteltyä tietoa sekä toiminnan tuloksia. Käsiteltäessä 16-bittisiä sanoja rekisterit muodostavat pareja BC, DE, HL ja kaksoisrekisteriä kutsutaan ensimmäiseksi kirjaimeksi - B, D, H. Rekisteriparissa korkein on ensimmäinen rekisteri. Rekistereillä H ja L on erityinen ominaisuus, jota käytetään sekä tiedon tallentamiseen että RAM-solujen 16-bittisten osoitteiden tallentamiseen.

FL– lippurekisteri (merkkirekisteri) 8-bittinen rekisteri, johon on tallennettu viisi etumerkkiä MP:n aritmeettisten ja loogisten operaatioiden tuloksesta. FL-muoto kuvan mukaan

Bitti C (CY - carry) - siirto, aseta arvoksi 1, jos tavun korkeasta järjestyksestä tuli siirto aritmeettisia operaatioita suoritettaessa.

Bitti P (pariteetti) – pariteetti, asetetaan 1:ksi, jos tuloksen bittien ykkösten määrä on parillinen.

AC-numero on ylimääräinen siirto, joka on suunniteltu tallentamaan siirtoarvo tuloksen matalan kertaluvun tetradista.

Bitti Z (nolla) – aseta arvoksi 1, jos operaation tulos on 0.

Bitti S (merkki) – asetetaan arvoon 1, jos tulos on negatiivinen, ja arvoon 0, jos tulos on positiivinen.

SP– pinoosoitin, 16-bittinen rekisteri, joka on suunniteltu tallentamaan sen muistisolun osoite, johon viimeinen pinoon lisätty tavu kirjoitettiin.

RS– ohjelmalaskuri (ohjelmalaskuri), 16-bittinen rekisteri, joka on suunniteltu tallentamaan seuraavan suoritettavan käskyn osoite. Ohjelmalaskurin sisältö kasvaa automaattisesti yhdellä välittömästi seuraavan käskytavun hakemisen jälkeen.

Alkumuistialue osoitteella 0000Н – 07FF sisältää ohjausohjelman ja esittelyohjelmat. Tämä on ROM-alue.

0800 – 0AFF - osoitealue tutkittavien ohjelmien tallentamista varten. (RAM).

0В00 – 0ВВ0 - osoitealue tietojen kirjoittamista varten. (RAM).

0ВВ0 – pinon aloitusosoite. (RAM).

Pino on erityisesti järjestetty RAM-alue, joka on tarkoitettu tietojen tai osoitteiden väliaikaiseen tallentamiseen. Viimeinen pinoon kirjoitettu numero pompataan ensin. Pinoosoitin tallentaa viimeisen pinosolun osoitteen, johon tiedot on kirjoitettu. Kun aliohjelma kutsutaan, pääohjelman paluuosoite tallennetaan automaattisesti pinoon. Pääsääntöisesti jokaisen aliohjelman alussa pinoon tallennetaan kaikkien sen suorittamiseen osallistuvien rekisterien sisältö ja aliohjelman lopussa ne palautetaan pinosta.

Assembly-kielen tietomuoto ja komentorakenne

MP KR580VM80:n muisti on joukko 8-bittisiä sanoja, joita kutsutaan tavuiksi. Jokaisella tavulla on oma 16-bittinen osoite, joka määrittää sen sijainnin muistisolujen järjestyksessä. MP voi osoittaa 65536 tavua muistia, joka voi olla sekä ROM- että RAM-muistissa.

Tietojen muoto

Tiedot tallennetaan muistiin 8-bittisinä sanoina:

D7 D6 D5 D4 D3 D2 D1 D0

Vähiten merkitsevä bitti on bitti 0, tärkein bitti on bitti 7.

Komennolle on tunnusomaista sen muoto eli sille varattu bittien määrä, jotka jaetaan tavu tavulta tiettyihin toimintakenttiin.

Komentomuoto

MP KR580VM80 -komennot ovat yhden, kahden tai kolmen tavun muotoisia. Monitavuiset komennot on sijoitettava vierekkäisille kielille. Komennon muoto riippuu suoritettavan toiminnon erityispiirteistä.

Komennon ensimmäinen tavu sisältää toimintakoodin, joka on kirjoitettu muistomuodossa.

Se määrittää komentomuodon ja toiminnot, jotka MP:n on suoritettava tiedoille suorituksen aikana, sekä osoitusmenetelmän, ja se voi sisältää myös tietoa tietojen sijainnista.

Toinen ja kolmas tavu voivat sisältää dataa, jolle toiminnot suoritetaan, tai osoitteita, jotka osoittavat datan sijainnin. Tietoja, joille toiminnot suoritetaan, kutsutaan operandeiksi.

Yksitavuinen komentomuoto kuvan 2 mukaan

Kuva 4

Assembly-kielen komennoissa toimintakoodilla on lyhennetty englanninkielisten sanojen kirjoitusmuoto - muistomerkintä. Mnemoniikka (kreikan sanasta mnemoniikka - muistamisen taito) helpottaa komentojen muistamista niiden toiminnallisen tarkoituksen perusteella.

Ennen suoritusta lähdeohjelma käännetään käännösohjelmalla, jota kutsutaan assembleriksi koodiyhdistelmien kielelle - konekielelle, tässä muodossa se sijoitetaan MP:n muistiin ja sitä käytetään sitten komentoa suoritettaessa.


Osoitusmenetelmät

Kaikki operandikoodit (tulo ja lähtö) on sijoitettava jossain. Ne voivat sijaita MP:n sisäisissä rekistereissä (kätevin ja nopea vaihtoehto). Ne voivat sijaita sisällä järjestelmämuisti(yleisin vaihtoehto). Lopuksi ne voivat sijaita I/O-laitteissa (harvinaisin tapaus). Operandien sijainti määräytyy ohjekoodin mukaan. Olla olemassa erilaisia ​​menetelmiä, jolla käskykoodi voi määrittää, mihin tulooperandi viedään ja mihin lähtöoperandi sijoitetaan. Näitä menetelmiä kutsutaan osoitemenetelmiksi.

MP KR580VM80:lle on olemassa seuraavat osoitusmenetelmät:

Suoraan;

Rekisteröidy;

epäsuora;

Pinottu.

Suoraan osoitus olettaa, että (syöte)operandi sijaitsee muistissa välittömästi käskykoodin jälkeen. Operandi on yleensä vakio, joka on lähetettävä jonnekin, lisättävä johonkin jne. data sisältyy komennon toiseen tai toiseen ja kolmanteen tavuun, ja datan alhainen tavu sijaitsee komennon toisessa tavussa, ja korkea tavu kolmannessa komentotavussa.

Suoraan (alias absoluuttinen) osoitus olettaa, että operandi (tulo tai lähtö) sijaitsee muistissa osoitteessa, jonka koodi sijaitsee ohjelman sisällä välittömästi käskykoodin jälkeen. Käytetään kolmen tavun komentoissa.

Rekisteröidy osoitus olettaa, että operandi (tulo tai lähtö) on MP:n sisäisessä rekisterissä. Käytetään yksitavuisissa komentoissa

Epäsuora (implisiittinen) osoitus olettaa, että MP:n sisäinen rekisteri ei sisällä itse operandia, vaan sen osoite muistissa.

Pino Osoittaminen olettaa, että komento ei sisällä osoitetta. Muistisolujen osoittaminen käyttämällä 16-bittisen SP-rekisterin sisältöä (pinoosoitin).

Komentojärjestelmä

MP-komentojärjestelmä on täydellinen luettelo perustoiminnoista, joita MP pystyy suorittamaan. Näillä komentoilla ohjattu MP suorittaa yksinkertaisia ​​toimintoja, kuten alkeellisia aritmeettisia ja loogisia operaatioita, tiedonsiirtoa, kahden arvon vertailua jne. MP KR580VM80:n komentojen määrä on 78 (muutoksia 244 huomioiden).

Seuraavat komentoryhmät erotetaan toisistaan:

Tiedonsiirto;

Aritmeettinen;

Brain teaser;

Hyppykomennot;

Input/output, control ja pino komennot.


Symbolit ja lyhenteet, joita käytetään kuvattaessa komentoja ja laadittaessa ohjelmia

Symboli Vähentäminen
OSOITE 16-bittinen osoite
TIEDOT 8-bittinen data
TIEDOT 16 16-bittinen data
PORT 8-bittinen I/O-laitteen osoite
TAVU 2 Komennon toinen tavu
TAVU 3 Kolmas komennon tavu
R, R1, R2 Yksi rekistereistä: A, B, C, D, E, H, L
R.P. Yksi rekisteripareista: B - määrittää parin BC; D - määrittää DE-parin; H – määrittää HL-parin
RH Parin ensimmäinen rekisteri
R.L. Parin toinen rekisteri
Λ Looginen kertolasku
V Looginen lisäys
Lisäys modulo kaksi
M Muistisolu, jonka osoite määrittää rekisteriparin HL sisällön, eli M = (HL)

1. PC-arkkitehtuuri…………………………………………………………………………………5

    1.1. Rekisterit.

    1.1.1 Yleiskäyttöiset rekisterit.

1.1.2. Segmenttirekisterit

1.1.3 Lippurekisteri

1.2. Muistin organisointi.

1.3. Datan esitys.

1.3.1 Tietotyypit

1.3.2 Merkkien ja merkkijonojen esitys

2. Ohjelmalausekkeet assemblerissä ………………………………………

    1. Kokoonpanokielen komennot

2.2. Osoitusmuodot ja konekäskymuodot

3. Pseudooperaattorit……………………………………………………….

3.1 Tietojen määrittelyohjeet

3.2 Assembler-ohjelman rakenne

3.2.1 Ohjelmaosat. olettaa ohjetta

3.2.3 Yksinkertaistettu segmentointidirektiivi

4. Ohjelman kokoaminen ja laatiminen …………………………….

5. Tiedonsiirtokomennot……………………………………………….

    5.1 Yleiset komennot

    5.2 Pinoa komennot

5.3 I/O-komennot

5.4 Osoitteiden edelleenlähetyskomennot

5.5 Merkitse edelleenlähetyskomennot

6. Aritmeettiset komennot……………………………………………….

    6.1 Aritmeettiset operaatiot binäärisille kokonaisluvuille

6.1.1 Yhteen- ja vähennyslasku

6.1.2 Komennot lisätä ja pienentää vastaanotinta yhdellä

6.2 Kerto- ja jakolasku

6.3 Merkin vaihto

7. Loogiset operaatiot……………………………………………….

8. Vaihdot ja sykliset siirrot…………………………………………………………

9. Merkkijonooperaatiot………………………………………………………….

10. Ohjelmien logiikka ja organisaatio………………………………………

10.1 Ehdottomat hyppyt

10.2 Ehdolliset hyppyt

10.4 Toimenpiteet asennuskielellä

10.5 INT keskeytykset

10.6 Järjestelmäohjelmisto

10.6.1.1 Näppäimistön lukeminen.

10.6.1.2 Merkkien näyttäminen näytöllä

10.6.1.3 Ohjelmien lopettaminen.

10.6.2.1 Näyttötilojen valitseminen

11. Levymuisti………………………………………………………………..

11.2 Tiedostojen jakelutaulukko

11.3 Levyn I/O-toiminnot

11.3.1 Tiedoston kirjoittaminen levylle

11.3.1.1 ASCIIZ-tiedot

11.3.1.2 Tiedoston numero

11.3.1.3 Levytiedoston luominen

11.3.2 Levytiedoston lukeminen

Johdanto

Assembly-kieli on konekielen symbolinen esitys. Kaikki prosessit henkilökohtaisessa tietokoneessa (PC) alimmalla laitteistotasolla ohjataan vain konekielisten komentojen (ohjeiden) avulla. On mahdotonta todella ratkaista laitteistoon liittyviä ongelmia (tai jopa laitteistosta riippuvia, kuten ohjelman nopeuden lisäämistä) ilman kokoajan tuntemusta.

Assembler on kätevä komentomuoto suoraan PC-komponenteille, ja se vaatii tietoa näitä komponentteja sisältävän integroidun piirin, nimittäin PC-mikroprosessorin, ominaisuuksista ja ominaisuuksista. Siten kokoonpanokieli liittyy suoraan tietokoneen sisäiseen organisaatioon. Eikä ole sattumaa, että melkein kaikki korkean tason kielenkääntäjät tukevat pääsyä ohjelmoinnin kokoonpanotasolle.

Ammattiohjelmoijan koulutuksen osa on välttämättä kokoajan opiskelu. Tämä johtuu siitä, että kokoonpanokielen ohjelmointi edellyttää PC-arkkitehtuurin tuntemusta, jonka avulla voit luoda tehokkaampia ohjelmia muilla kielillä ja yhdistää niitä kokoonpanokieliohjelmiin.

Käsikirja käsittelee ohjelmointia assembly-kielellä Intelin mikroprosessoreihin perustuville tietokoneille.

Tämä opetusohjelma on tarkoitettu kaikille, jotka ovat kiinnostuneita prosessoriarkkitehtuurista ja ohjelmoinnin perusteista Assembly-kielellä, ensisijaisesti ohjelmistotuotekehittäjille.

    PC-arkkitehtuuri.

Tietokonearkkitehtuuri on abstrakti esitys tietokoneesta, joka heijastaa sen rakenteellista, piirejä ja loogista organisaatiota.

Kaikilla nykyaikaisilla tietokoneilla on joitain yhteisiä ja yksilöllisiä arkkitehtonisia ominaisuuksia. Yksittäiset ominaisuudet ovat yksilöllisiä tietylle tietokonemallille.

Tietokonearkkitehtuurin käsite sisältää:

    tietokoneen lohkokaavio;

    välineet ja menetelmät päästä käsiksi tietokoneen lohkokaavion elementteihin;

    rekisterien asettaminen ja saatavuus;

    osoituksen järjestäminen ja menetelmät;

    tietokonedatan esitys- ja muotomenetelmä;

    joukko tietokoneen koneen ohjeita;

    koneen opetusmuodot;

    keskeytä käsittely.

Tietokonelaitteiston pääelementit: järjestelmäyksikkö, näppäimistö, näyttölaitteet, levyasemat, tulostuslaitteet (tulostin) ja erilaiset viestintälaitteet. Järjestelmän yksikkö koostuu emolevystä, virtalähteestä ja lisäkorttien laajennuskennoista. Emolevy sisältää mikroprosessorin, vain lukumuistin (ROM), RAM(RAM) ja apuprosessori.

      Rekisterit.

Mikroprosessorin sisällä tiedot sisältyvät 32 rekisterin ryhmään (16 käyttäjää, 16 järjestelmää), joka on tavalla tai toisella ohjelmoijan käytettävissä. Koska käsikirja on omistettu 8088-i486-mikroprosessorin ohjelmointiin, on loogisinta aloittaa tämä aihe keskustelemalla mikroprosessorin sisäisistä rekistereistä, jotka ovat käyttäjän käytettävissä.

Ohjelmoija käyttää käyttäjärekistereitä ohjelmien kirjoittamiseen. Näihin rekistereihin kuuluvat:

    kahdeksan 32-bittistä rekisteriä (yleiskäyttörekisterit) EAX/AX/AH/AL, EBX/BX/BH/BL, ECX/CX/CH/CL, EDX/DX/DLH/DL, EBP/BP, ESI/SI, EDI/DI, ESP/SP;

    kuusi 16-bittistä segmenttirekisteriä: CS, DS, SS, ES, FS, GS;

    tila- ja ohjausrekisterit: EFLAGS/FLAGS-lippurekisteri ja EIP/IP-komentoosoitinrekisteri.

Yhden 32-bittisen rekisterin osat on merkitty kauttaviivalla. Etuliite E (Extended) osoittaa 32-bittisen rekisterin käyttöä. Tavujen kanssa työskentelyyn käytetään rekistereitä, joissa on etuliitteet L (low) ja H (high), esimerkiksi AL, CH - osoittavat rekisterien 16-bittisten osien alhaisia ​​ja korkeita tavuja.

        Yleiskäyttöiset rekisterit.

EAX/AX/AH/AL (akkurekisteri) – akku. Käytetään kerto- ja jakolaskussa, I/O-operaatioissa ja joissakin merkkijonooperaatioissa.

EBX/BX/BH/BL – perusrekisteri(perusrekisteri), jota käytetään usein osoitettaessa tietoja muistissa.

ECX/CX/CH/CL – laskuri(laskentarekisteri), jota käytetään laskurina silmukan toistojen lukumäärälle.

EDX/DX/DH/DL – tietorekisteri(tietorekisteri), jota käytetään välitietojen tallentamiseen. Joissakin ryhmissä sen käyttö on pakollista.

Kaikki tämän ryhmän rekisterit sallivat pääsyn "alaosiin". Vain alempia 16- ja 8-bittisiä osia näistä rekistereistä voidaan käyttää itseosoitteeseen. Näiden rekistereiden 16 ylempää bittiä eivät ole käytettävissä itsenäisinä objekteina.

Seuraavia käytetään tukemaan merkkijonojen käsittelykomentoja, jotka mahdollistavat 32, 16 tai 8 bitin pituisten elementtiketjujen peräkkäisen käsittelyn:

ESI/SI (lähdeindeksirekisteri) – indeksi lähde. Sisältää nykyisen lähdeelementin osoitteen.

EDI/DI (kohdeindeksirekisteri) – indeksi vastaanotin(vastaanottaja). Sisältää nykyisen osoitteen kohderivillä.

Mikroprosessoriarkkitehtuurissa tietorakennetta – pinoa – tuetaan laitteisto- ja ohjelmistotasolla. Pinon kanssa työskentelemiseen on erityisiä ohjeita ja erityisrekisterit. On huomattava, että pino täytetään pienempiä osoitteita kohti.

ESP/SP (pinoosoitinrekisteri) – rekisteröidy osoitin pino. Sisältää osoittimen pinon yläosaan nykyisessä pinosegmentissä.

EBP/BP (base pointer register) – pinon perusosoittimen rekisteri. Suunniteltu järjestämään pinon sisällä olevien tietojen satunnainen pääsy.

1.1.2. Segmenttirekisterit

Mon kuusi segmenttirekisterit: CS, SS, DS, ES, GS, FS. Niiden olemassaolo johtuu Intelin mikroprosessorien RAM-muistin erityisestä organisoinnista ja käytöstä. Mikroprosessorilaitteisto tukee ohjelman rakenteellista organisointia, joka koostuu segmenttejä. Osoittaa saatavilla olevat segmentit Tämä hetki segmenttirekisterit on tarkoitettu. Mikroprosessori tukee seuraavia segmenttityyppejä:

    Koodisegmentti. Sisältää ohjelmakomennot. Päästäksesi tähän segmenttiin, käytä CS-rekisteriä (koodisegmenttirekisteri) - segmenttikoodirekisteri. Se sisältää sen konekäskysegmentin osoitteen, johon mikroprosessorilla on pääsy.

    Datasegmentti. Sisältää ohjelman käsittelemiä tietoja. Päästäksesi tähän segmenttiin, käytä DS (datasegmenttirekisteri) -rekisteriä - segmenttitietorekisteri, joka tallentaa nykyisen ohjelman datasegmentin osoitteen.

    Pino segmentti. Tämä segmentti on muistialue, jota kutsutaan pinoksi. Mikroprosessori järjestää pinon periaatteen mukaan - ensin "sisään", ensin "ulos". Päästäksesi pinoon, käytä SS (stack segment register) -rekisteriä - pinon segmenttirekisteri, joka sisältää pinosegmentin osoitteen.

    Lisätietosegmentti. Käsitellyt tiedot voidaan sijoittaa kolmeen lisätietosegmenttiin. Oletuksena tietojen oletetaan olevan datasegmentissä. Lisätietosegmenttejä käytettäessä niiden osoitteet on määritettävä eksplisiittisesti käyttämällä komennon erityisiä segmentin ohitusetuliiteitä. Lisätietosegmenttien osoitteet on sisällytettävä ES-, GS-, FS-rekistereihin (laajennusdatasegmenttirekistereihin).

        Ohjaus- ja tilarekisterit

Mikroprosessori sisältää useita rekistereitä, jotka sisältävät tietoa sekä itse mikroprosessorin tilasta että sen ohjelman tilasta, jonka komennot ovat parhaillaan ladattuna liukuhihnaan. Tämä:

EIP/IP Instruction Pointer Register;

    lippurekisteri EFLAGS/FLAGS.

Näiden rekistereiden avulla voit saada tietoa komennon suorittamisen tuloksista ja vaikuttaa itse mikroprosessorin tilaan.

EIP/IP (käskyosoitinrekisteri) – osoitin joukkueet. EIP/IP-rekisteri on 32-bittinen tai 16-bittinen ja sisältää seuraavan suoritettavan käskyn siirtymän suhteessa CS-segmenttirekisterin sisältöön nykyisessä käskysegmentissä. Tämä rekisteri ei ole suoraan käytettävissä, mutta sitä voidaan muuttaa hyppyohjeiden avulla.

EFLAGS/FLAGS (lippurekisteri) – rekisteröidy liput. Bittikoko 32/16 bittiä. Tämän rekisterin yksittäisillä biteillä on tietty toiminnallinen tarkoitus, ja niitä kutsutaan lipuiksi. Lippu on bitti, joka saa arvon 1 ("lippu asetettu"), jos jokin ehto täyttyy, ja arvon 0 ("lippu tyhjennetty") muussa tapauksessa. Tämän rekisterin alaosa on täysin samanlainen kuin i8086:n FLAGS-rekisteri.

1.1.3 Lippurekisteri

Lippurekisteri on 32-bittinen ja sen nimi on EFLAGS (kuva 1). Rekisterin yksittäisillä biteillä on tietty toiminnallinen tarkoitus, ja niitä kutsutaan lipuiksi. Jokaiselle niistä on määritetty tietty nimi (ZF, CF jne.). EFLAGS:n alemmat 16 bittiä edustavat 16-bittistä FLAGS-lippurekisteriä, jota käytetään suoritettaessa i086- ja i286-mikroprosessoreille kirjoitettuja ohjelmia.

Kuva 1 Lippurekisteri

Joitakin lippuja kutsutaan yleisesti ehtolippuiksi; ne muuttuvat automaattisesti komentoja suoritettaessa ja tallentavat tuloksensa tietyt ominaisuudet (esimerkiksi onko se yhtä suuri kuin nolla). Muita lippuja kutsutaan valtion lipuiksi; ne muuttuvat ohjelmasta ja vaikuttavat prosessorin jatkokäyttäytymiseen (esim. estävät keskeytykset).

Kuntomerkit:

CF (carry flag) - kantaa lippua. Saa arvon 1, jos kokonaislukuja lisättäessä ilmaantui siirtoyksikkö, joka ei "sopinut" bittiruudukkoon, tai jos etumerkittömiä lukuja vähennettäessä ensimmäinen niistä oli pienempi kuin toinen. Vaihtokäskyissä bittiruudukon ulkopuolella oleva bitti syötetään CF:ään. CF kaappaa myös kertolaskukäskyn piirteet.

OF (ylivuodon lippu) - ylivuoto lippu. Aseta arvoksi 1, jos etumerkillisiä kokonaislukuja lisättäessä tai vähennettäessä tulos on absoluuttisena sallitun arvon ylittävä tulos (mantissa ylivuoto ja se "kiipesi" etumerkkinumeroon).

ZF (nolla lippu) - nolla lippu. Aseta arvoksi 1, jos komennon tulos on 0.

SF (Sign flag) - lippu merkki. Aseta arvoksi 1, jos etumerkittyjen lukujen toiminto tuottaa negatiivisen tuloksen.

PF (pariteettilippu) - lippu pariteetti. Yhtä kuin 1, jos seuraavan komennon tulos sisältää parillisen määrän binäärilukuja. Yleensä otetaan huomioon vain I/O-toiminnoissa.

AF (auxiliary carry flag) - ylimääräinen kantolippu. Korjaa binääristen desimaalilukujen toimintojen suorittamisen ominaisuudet.

Valtion liput:

DF (suuntalippu) - suunnan lippu. Asettaa viivojen katselun suunnan rivikäskyissä: kun DF=0, viivoja katsotaan "eteenpäin" (alusta loppuun), kun DF=1 - vastakkaiseen suuntaan.

IOPL (tulo/lähtöoikeustaso) – I/O-oikeustaso. Käytetään mikroprosessorin suojatussa tilassa ohjaamaan pääsyä I/O-komentoihin tehtävän oikeuksista riippuen.

NT (sisäkkäinen tehtävä) – tehtävän sisäkkäinen lippu. Käytetään mikroprosessorin suojatussa tilassa tallentamaan se tosiasia, että yksi tehtävä on sisäkkäinen toisen sisällä.

Järjestelmän lippu:

JOS (keskeytyslippu) - keskeytyslippu. Kun IF=0, prosessori lakkaa vastaamasta tuleviin keskeytyksiin; kun IF=1, keskeytyksen esto poistetaan.

TF (ansalippu) - jäljittää lippu. Kun TF=1, prosessori tekee jokaisen komennon suorittamisen jälkeen keskeytyksen (numerolla 1), jota voidaan käyttää ohjelman jäljittämisessä.

RF (jatkamisen lippu) – jatkaa lippua. Käytetään kun käsitellään keskeytyksiä virheenkorjausrekistereistä.

VM (virtuAL 8086 -tila) – virtuaalinen 8086 lippu. 1-prosessori toimii virtuaalitilassa 8086. 0-prosessori toimii reaali- tai suojatussa tilassa.

AC (ALiignment check) – kohdistuksen ohjauslippu. Suunniteltu mahdollistamaan kohdistuksen hallinnan muistia käytettäessä.

      Muistin organisointi.

Fyysistä muistia, johon mikroprosessorilla on pääsy, kutsutaan RAM ( tai käyttömuisti - RAM). RAM on tavuketju, jolla on oma yksilöllinen osoite (sen numero), jota kutsutaan fyysistä. Fyysisten osoitteiden arvoalue on 0 - 4 Gt. Muistinhallintamekanismi on kokonaan laitteisto.

Mikroprosessorilaitteisto tukee useita RAM-muistin käyttömalleja:

    segmentoitu malli. Tässä mallissa ohjelmien muisti on jaettu vierekkäisiin muistialueisiin (segmentteihin), ja ohjelma itse voi käyttää vain näissä segmenteissä olevaa dataa;

    sivun malli. Tässä tapauksessa RAM-muistia pidetään sarjana lohkoja, joiden kiinteä koko on 4 kt. Tämän mallin pääsovellus liittyy organisaatioon virtuaalinen muisti, jonka avulla ohjelmat voivat käyttää enemmän muistitilaa kuin fyysinen muisti. Pentium-mikroprosessorilla mahdollisen virtuaalimuistin koko voi olla 4 TB.

Näiden mallien käyttö ja toteutus riippuu mikroprosessorin toimintatilasta:

    Todellinen osoitetila (todellinen tila). Tila on samanlainen kuin i8086-prosessorin toiminta. Välttämätön varhaisille prosessorimalleille kehitettyjen ohjelmien toiminnan kannalta.

    Suojattu tila. Suojattu tila mahdollistaa usean tehtävän tietojenkäsittely, muistin suojaus käyttämällä nelitasoista etuoikeusmekanismia ja sen hakuorganisaatiota.

    Virtuaalinen 8086-tila. Tässä tilassa on mahdollista ajaa useita ohjelmia i8086:lle. Tässä tapauksessa reaalitilan ohjelmat voivat toimia.

Segmentointi on osoitemekanismi, joka varmistaa useiden itsenäisten osoiteavaruuksien olemassaolon. Segmentti on itsenäinen, laitteistotuettu muistilohko.

Jokainen ohjelma voi yleensä koostua mistä tahansa määrästä segmenttejä, mutta sillä on suora pääsy kolmeen pääsegmenttiin: koodiin, dataan ja pinoon - sekä yhdestä kolmeen lisätietosegmenttiin. Käyttöjärjestelmä sijoittaa ohjelmasegmentit RAM-muistiin tiettyihin fyysisiin osoitteisiin ja sijoittaa sitten näiden osoitteiden arvot asianmukaisiin rekistereihin. Segmentin sisällä ohjelma hakee osoitteita suhteessa segmentin alkuun lineaarisesti, eli alkaen osoitteesta 0 ja päättyen osoitteeseen, joka on yhtä suuri kuin segmentin koko. Suhteellinen osoite tai puolueellisuus, jota mikroprosessori käyttää segmentin tietoihin pääsyyn kutsutaan nimellä tehokas.

Fyysisen osoitteen muodostaminen reaalitilassa

Reaalitilassa fyysisen osoitteen muutosalue on 0 - 1 MB. Segmentin enimmäiskoko on 64 kt. Kun otat yhteyttä tiettyyn fyysinen osoite RAM määräytyy segmentin alun osoitteen ja segmentin sisäisen siirtymän perusteella. Segmentin aloitusosoite otetaan vastaavasta segmenttirekisteristä. Tässä tapauksessa segmenttirekisteri sisältää vain segmentin alun fyysisen osoitteen merkittävimmät 16 bittiä. 20-bittisen osoitteen puuttuvat neljä bittiä saadaan siirtämällä segmenttirekisterin arvoa vasemmalle 4 bittiä. Vaihtotoiminto suoritetaan laitteistossa. Tuloksena oleva 20-bittinen arvo on segmentin alkua vastaava todellinen fyysinen osoite. Tuo on fyysinen osoite on määritetty "segment:offset"-pariksi, jossa "segmentti" on ensimmäiset 16 bittiä sen muistisegmentin aloitusosoitteesta, johon solu kuuluu, ja "offset" on tämän solun 16-bittinen osoite laskettuna tämän muistisegmentin alku (arvo 16 * segmentti + offset antaa solun absoluuttisen osoitteen). Jos esimerkiksi CS-rekisteri tallentaa arvon 1234h, niin osoitepari 1234h:507h määrittelee absoluuttisen osoitteen, joka on yhtä suuri kuin 16*1234h+507h =12340h+507h = 12847h. Tällainen pari kirjoitetaan kaksoissanana ja (kuten numerot) "käänteisessä" muodossa: ensimmäinen sana sisältää siirtymän ja toinen - segmentin, ja jokainen näistä sanoista puolestaan ​​​​on esitetty "käänteinen" muoto. Esimerkiksi pari 1234h:5678h kirjoitettaisiin näin:| 78 | 56| 34 | 12|.

Tämä fyysisen osoitteen generointimekanismi mahdollistaa ohjelmiston siirtämisen, toisin sanoen riippumattoman RAM-muistin tietyistä latausosoitteista.

Ohjelmointi konekäskytasolla on minimitaso, jolla ohjelmia voidaan kirjoittaa. Koneen ohjejärjestelmän tulee olla riittävä suorittamaan vaaditut toimenpiteet antamalla ohjeita tietokonelaitteistolle.

Jokainen konekäsky koostuu kahdesta osasta:

  • toiminnallinen - "mitä tehdä" määrittäminen;
  • operandi - prosessointiobjektien määritteleminen, "mitä tehdä."

Mikroprosessorikoneen komento, joka on kirjoitettu kokoonpanokielellä, on yksi rivi, jolla on seuraava syntaktinen muoto:

komento/ohjenimike operandi(t) ;kommentit

Tässä tapauksessa rivin pakollinen kenttä on komento tai käsky.

Tunniste, komento/käsky ja operandit (jos sellaisia ​​on) erotetaan vähintään yhdellä välilyönnillä tai sarkainmerkillä.

Jos komentoa tai käskyä on jatkettava seuraavalle riville, käytetään kenoviivaa: \.

Oletusarvoisesti kokoonpanokieli ei tee eroa isojen ja pienten kirjainten välillä komentoja tai käskyjä kirjoitettaessa.

Esimerkki koodiriveistä:

Laske db 1 ;Nimi, käsky, yksi operandi
mov eax,0 ;Komento, kaksi operandia
cbw ; Tiimi

Tunnisteet

Label asennuskielellä voi sisältää seuraavat symbolit:

  • kaikki latinalaisten aakkosten kirjaimet;
  • numerot 0-9;
  • erikoismerkit: _, @, $, ?.

Pistettä voidaan käyttää tarran ensimmäisenä merkkinä, mutta jotkut kääntäjät eivät suosittele tämän merkin käyttöä. Varattuja Assembler-nimiä (direktiivejä, operaattoreita, komentojen nimiä) ei voi käyttää nimikkeinä.

Tarran ensimmäisen merkin on oltava kirjain tai erikoismerkki (mutta ei numero). Suurin pituus tunnisteet – 31 merkkiä. Kaikkien tarrojen, jotka on kirjoitettu riville, joka ei sisällä assembler-ohjetta, on päätyttävä kaksoispisteeseen: .

Joukkueet

Tiimi kertoo kääntäjälle, mitä toimintoa mikroprosessorin tulee suorittaa. Tietosegmentissä komento (tai käsky) määrittää kentän, työtilan tai vakion. Koodisegmentissä komento määrittää toiminnon, kuten siirron (mov) tai lisäämisen (add).

direktiivit

Kokoonpanijassa on useita operaattoreita, joiden avulla voit hallita kokoamis- ja listausprosessia. Näitä operaattoreita kutsutaan direktiivit . Ne toimivat vain ohjelman kokoamisprosessin aikana eivätkä, toisin kuin komennot, luo konekoodia.

Operandit

Operandi – objekti, jolle suoritetaan koneen komento tai ohjelmointikielen käsky.
Käskyssä voi olla yksi tai kaksi operandia tai ei ollenkaan operandia. Operandien lukumäärä määritellään implisiittisesti käskykoodilla.
Esimerkkejä:

  • Ei operandeja ret ;Return
  • Yksi operandi inc ecx ;Kasvata ecx
  • Kaksi operandia add eax,12 ;Add 12 to eax

Nimikkeen, komennon (direktiivin) ja operandin ei tarvitse alkaa tietystä kohdasta rivillä. On kuitenkin suositeltavaa kirjoittaa ne sarakkeeseen, jotta ohjelman lukeminen olisi helpompaa.

Operandit voivat olla

  • tunnisteet;
  • merkkijonot, jotka on suljettu lainausmerkkeihin tai lainausmerkkeihin;
  • kokonaisluvut binääri-, oktaali-, desimaali- tai heksadesimaalilukujärjestelmissä.
Tunnisteet

Tunnisteet – kelvollisia merkkijonoja, joita käytetään osoittamaan ohjelmaobjekteja, kuten toimintakoodeja, muuttujien nimiä ja nimiön nimiä.

Tunnisteiden tallentamista koskevat säännöt.

  • Tunniste voi koostua yhdestä tai useammasta merkistä.
  • Symboleina voit käyttää latinalaisten aakkosten kirjaimia, numeroita ja joitain erikoismerkkejä: _, ?, $, @.
  • Tunniste ei voi alkaa numeromerkillä.
  • Tunnisteen pituus voi olla enintään 255 merkkiä.
  • Kääntäjä hyväksyy tunnisteen ensimmäiset 32 ​​merkkiä ja jättää muut huomioimatta.
Kommentit

Kommentit erotetaan suoritettavasta rivistä merkillä; . Tässä tapauksessa kaikki puolipisteen jälkeen kirjoitettu rivin loppuun asti on kommentti. Kommenttien käyttäminen ohjelmassa parantaa sen selkeyttä, varsinkin jos komentojoukon tarkoitus on epäselvä. Kommentti voi sisältää mitä tahansa tulostettavia merkkejä, mukaan lukien välilyönnit. Kommentti voi kattaa koko rivin tai seurata komentoa samalla rivillä.

Kokoonpanoohjelman rakenne

Assembly-kielellä kirjoitettu ohjelma voi koostua useista osista, joita kutsutaan moduulit . Jokaiselle moduulille voi olla määritetty yksi tai useampi data-, pino- ja koodisegmentti. Jokaisen täydellisen kokoonpanoohjelman tulee sisältää yksi pää- tai päämoduuli, josta sen suoritus alkaa. Moduuli voi sisältää koodisegmenttejä, datasegmenttejä ja pinosegmenttejä, jotka on ilmoitettu asianmukaisilla ohjeilla. Ennen segmenttien ilmoittamista sinun on määritettävä muistimalli .MODEL-direktiivin avulla.

Esimerkki "tee mitään" -ohjelmasta assembly-kielellä:

686P
.MODEL FLAT, STDCALL
.DATA
.KOODI
ALKAA:

RET
LOPETA ALOITUS

Tämä ohjelma sisältää vain yhden mikroprosessorikomennon. Tämä komento on RET. Se varmistaa, että ohjelma päättyy oikein. Yleensä tätä komentoa käytetään proseduurista poistumiseen.
Loput ohjelmasta koskevat kääntäjän toimintaa.
.686P - Pentium 6 (Pentium II) suojatun tilan komennot ovat sallittuja. Tämä ohje valitsee tuetut kokoonpanokäskyt, jotka osoittavat prosessorimallin. Direktiivin lopussa oleva P-kirjain ilmoittaa kääntäjälle, että prosessori toimii suojatussa tilassa.
.MODEL FLAT, stdcall - litteä muistimalli. Tätä muistimallia käytetään leikkaussalissa Windows-järjestelmä. stdcall
.DATA on dataa sisältävä ohjelmasegmentti.
.CODE on koodia sisältävä ohjelmalohko.
START - etiketti. Assemblerissa tageilla on suuri rooli, mitä ei voi sanoa nykyaikaisista korkean tason kielistä.
END START - ohjelman loppu ja viesti kääntäjälle, että ohjelman suorittamisen tulee alkaa START-tunnisteella.
Jokaisessa moduulissa on oltava END-käsky, joka merkitsee loppua lähdekoodi ohjelmia. Kaikki rivit, jotka seuraavat END-direktiiviä, ohitetaan. Jos ohitat END-käskyn, syntyy virhe.
END-käskyn jälkeen määritetty nimiö kertoo kääntäjälle sen päämoduulin nimen, josta ohjelman suoritus alkaa. Jos ohjelma sisältää yhden moduulin, END-käskyn jälkeinen nimiö voidaan jättää pois.




Ylös