Assembly-kielen komentorakenne sisältää: Komentorakenne assembly-kielitason ohjelmoinnissa. Assembly-kielen tietomuoto ja komentorakenne

Assembly-kielen komennot (luento)

LUENTTOSUUNNITELMA

1. Toiminnan pääryhmät.

Pentium.

1. Toiminnan pääryhmät

Mikroprosessorit suorittavat joukon komentoja, jotka toteuttavat seuraavat päätoimintoryhmät:

Huolintatoiminnot

Aritmeettiset operaatiot,

Loogiset operaatiot

Vaihtotoiminnot

Vertailu- ja testaustoiminnot

Bittitoiminnot

Ohjelman hallintatoiminnot;

Prosessorin ohjaustoiminnot.

2. Prosessorikomentojen muistokoodit Pentium

Komentojen kuvauksessa käytetään yleensä niiden muistomerkintöjä (mnemonisia koodeja), joilla määritellään komento kokoonpanokielellä ohjelmoitaessa. Assemblerin eri versioissa joidenkin komentojen muistikoodit voivat vaihdella. Esimerkiksi komentoon kutsua aliohjelma käytetään muistokoodiaPUHELU tai JSR ("Hypätä Aliohjelma"). Useimpien mikroprosessorien päätyyppien komentojen muistokoodit ovat kuitenkin samat tai eroavat hieman, koska ne ovat lyhenteitä vastaavista englanninkielisistä sanoista, jotka määrittelevät suoritettavan toiminnon. Katsotaanpa prosessoreille hyväksyttyjä komentomuistokoodeja Pentium.

Edelleenlähetyskomennot. Tämän ryhmän pääjoukkue on joukkueMOV , joka mahdollistaa tiedonsiirron kahden rekisterin välillä tai rekisterin ja muistisolun välillä. Jotkut mikroprosessorit toteuttavat siirtoja kahden muistisolun välillä sekä useiden rekisterien sisällön joukkosiirtoja muistista. Esimerkiksi 68-perheen mikroprosessorit Motorola xxx suorita komentoLIIKKUA , joka tarjoaa siirron muistisolusta toiseen, ja komentoMOVEM , joka kirjoittaa muistiin tai lataa muistista tietyn rekisterijoukon sisällön (enintään 16 rekisteriä). TiimiXCHG vaihtaa keskenään kahden prosessorirekisterin tai rekisterin ja muistisolun sisältöä.

Syötä komennot SISÄÄN ja lähtö OUT toteuttaa tietojen lähettämisen prosessorirekisteristä ulkoiseen laitteeseen tai tiedon vastaanottamisen ulkoisesta laitteesta rekisteriin. Nämä komennot määrittelevät liitäntälaitteen numeron (tulo/lähtöportti), jonka kautta dataa siirretään. Huomaa, että monilla mikroprosessoreilla ei ole erityisiä komentoja ulkoisten laitteiden käyttämiseen. Tässä tapauksessa tietojen syöttö ja tulostus järjestelmään suoritetaan komennollaMOV , joka määrittää tarvittavan liitäntälaitteen osoitteen. Tällöin ulkoinen laite osoitetaan muistisoluna ja osoiteavaruudessa on varattu tietty osa, jossa järjestelmään kytkettyjen liitäntälaitteiden (porttien) osoitteet sijaitsevat.

Aritmeettisten operaatioiden komennot. Tämän ryhmän tärkeimmät komennot ovat yhteen-, vähennys-, kerto- ja jakoläskyt, joissa on useita vaihtoehtoja. Lisäyskomennot LISÄTÄ ja vähennys SUB suorittaa vastaavat toiminnotckahden rekisterin, rekisterin ja muistipaikan, hallussa tai välitöntä operandia käyttämällä. Joukkueet ILMOITUS C , S.B. B suorittaa yhteen- ja vähennyslaskuja ottaen huomioon attribuutin arvonC, asetettu muodostettaessa siirtoa edellisen toiminnon suorittamisen aikana. Näillä komennoilla toteutetaan operandien peräkkäinen lisääminen, joiden bittien määrä ylittää prosessorin kapasiteetin. Tiimi N.E.G. muuttaa operandin etumerkkiä muuntaen sen kahden komplementiksi.

Kerto- ja jakooperaatiot voidaan suorittaa etumerkityille luvuille (komennotminä MUL, minä DIV ) tai allekirjoittamaton (komennot MUL, DIV Yksi operandeista sijaitsee aina rekisterissä, toinen voi olla rekisterissä, muistisolussa tai välitön operandi. Toimenpiteen tulos löytyy rekisteristä. Kerrottaessa (komennotMUL , IMUL ) tulos on kaksoisbittinen, jolle käytetään kahta rekisteriä. Jakaessaan (komennotDIV , IDIV ) osinkona käytetään kaksinkertaista operandia, joka sijoitetaan kahteen rekisteriin, ja sen seurauksena osamäärä ja jäännös kirjoitetaan kahteen rekisteriin.

Loogiset toimintakomennot . Melkein kaikki mikroprosessorit suorittavat loogisia operaatioita AND, OR, Exclusive OR, jotka suoritetaan samoille operandibiteille komentojen avulla JA TAI, X TAI . Toiminnot suoritetaan kahden rekisterin, rekisterin ja muistipaikan, sisällölle tai välittömällä operandilla. Tiimi EI kääntää operandin jokaisen bitin arvon.

Vaihto-komennot. Mikroprosessorit suorittavat osoitettujen operandien aritmeettisia, loogisia ja syklisiä siirtoja yhdellä tai useammalla bitillä. Siirrettävä operandi voi olla rekisterissä tai muistipaikassa, ja siirtobittien lukumäärä määräytyy käskyn sisältämän välittömän operandin tai määritellyn rekisterin sisällön mukaan. Siirtomerkki on yleensä mukana siirtymän toteuttamisessaCtilarekisterissä (S.R. tai LIPUT), joka sisältää rekisteristä tai muistisolusta poistetun operandin viimeisen bitin.

Vertailu- ja testauskomennot . Operandien vertailu tehdään yleensä komennollaCMP , joka vähentää operandit ja asettaa ominaisuusarvot N, Z, V, C tilarekisterissä saadun tuloksen mukaan. Tässä tapauksessa vähennyksen tulosta ei tallenneta, eivätkä operandien arvot muutu. Saatujen ominaisarvojen myöhempi analyysi antaa meille mahdollisuuden määrittää suhteellinen arvo (>,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Jotkut mikroprosessorit suorittavat testikomennon TST , joka on yhden operandin versio vertailukäskystä. Kun tämä komento suoritetaan, merkit asetetaan N, Z osoitetun operandin etumerkin ja arvon (nolla tai nollasta poikkeava) mukaan.

Bitin käyttöohjeet . Nämä komennot asettavat attribuutin arvonCtilarekisteriin testattavan bitin arvon mukaisestimiljardia osoitetussa operandissa. Joissakin mikroprosessoreissa attribuutti asetetaan bittitestauksen tuloksen perusteellaZ. Testibitin numeronmääritetään joko komennossa määritellyn rekisterin sisällön tai välittömän operandin mukaan.

Tämän ryhmän komennot toteuttavat erilaisia ​​vaihtoehtoja testattavan bitin vaihtamiseen BT pitää tämän bitin arvon ennallaan.Komento B T S jälkitesti asettaa arvon miljardia=1 ja komento B T C - merkitys miljardia=0. Joukkue B T C kääntää bitin bn arvon testauksen jälkeen.

Ohjelman hallintatoiminnot. Ohjelman ohjaamiseen käytetään suurta määrää komentoja, joiden joukossa ovat:

- ehdottoman ohjauksen siirtokomennot;

- ehdolliset hyppykomennot;

- tiimit ohjelmasyklien järjestämiseen;

- keskeyttää komennot;

- komennot määritteiden muuttamiseen.

Ohjauksen ehdoton siirto suoritetaan komennollaJMP , joka latautuu ohjelmalaskuriinPCuusi sisältö, joka on seuraavan suoritettavan komennon osoite. Tämä osoite on joko suoraan määritetty komennossaJMP (suora osoite) tai lasketaan nykyisen sisällön summanaPCja komennossa määritetty offset, joka on etumerkillinen numero (suhteellinen osoitus). KoskaPCsisältää seuraavan ohjelmakomennon osoitteen, jälkimmäinen menetelmä määrittää hyppyosoitteen, siirtymä seuraavaan osoitteeseen tietyllä tavumäärällä. Positiivisella siirtymällä siirrytään ohjelman seuraaviin komentoihin, negatiivisella siirtymällä - aikaisempiin.

Aliohjelmaa kutsutaan myös siirtämällä ohjausta ehdoitta komennollaPUHELU (tai JSR ). Kuitenkin tässä tapauksessa ennen lataamistaPC uutta sisältöä, joka määrittää aliohjelman ensimmäisen komennon osoitteen, sen nykyinen arvo (seuraavan komennon osoite) on tallennettava, jotta varmistetaan paluu pääohjelmaan aliohjelman suorittamisen jälkeen (tai edelliseen). aliohjelma sisäkkäisten aliohjelmien yhteydessä). Ehdolliset hyppykomennot (ohjelman haarat) latautuvat sisäänPCuutta sisältöä, jos tietyt ehdot täyttyvät, jotka yleensä asetetaan tilarekisterin eri attribuuttien nykyisen arvon mukaan. Jos ehto ei täyty, suoritetaan seuraava ohjelmakomento.

Ominaisuuden ohjauskomennot mahdollistavat kirjoittamisen - tilarekisterin sisällön lukemisen, johon ominaisuuksia on tallennettu, sekä yksittäisten ominaisuuksien arvojen muuttamisen. Esimerkiksi Pentium-prosessorit toteuttavat komennot LAHF Ja SAHF , jotka lataavat merkit sisältävän matalan tavun tilarekisteristä EFLAG rekisterin alimmalle tavulle EAX ja täytetään alhainen tavu LIPUT rekisteristä E AX.. Joukkueet CLC, STC Suorita siirtomerkin CF=0, CF=1 ja komennon arvojen asettaminen CMC aiheuttaa tämän attribuutin arvon käänteisen. Koska attribuutit määräävät ohjelman suorituksen kulun ehdollisten siirtymien aikana, ohjelman ohjaamiseen käytetään yleensä attribuuttien muutoskomentoja.

Prosessorin ohjauskomennot . Tämä ryhmä sisältää pysäytyskomennot, ei toimintokomennot ja joukon komentoja, jotka määrittävät prosessorin tai sen yksittäisten lohkojen toimintatilan. TiimiHLT pysäyttää ohjelman suorittamisen ja asettaa prosessorin pysäytystilaan, josta poistutaan, kun keskeytys- tai uudelleenkäynnistyssignaali vastaanotetaan ( Nollaa). Tiimi NOP ("tyhjä" komento), joka ei aiheuta toimintojen suorittamista, käytetään toteuttamaan ohjelmaviiveitä tai täyttämään ohjelmaan muodostuneita aukkoja.

Erikoisryhmät CLI, STI estää ja sallia keskeytyspyyntöjen palvelun. Prosessoreissa Pentium tähän käytetään ohjausbittiä (lippua).JOS rekisterissä LIPUT.

Monet nykyaikaiset mikroprosessorit antavat tunnistuskomennon, jonka avulla käyttäjä tai muut laitteet voivat saada tietoa tietyssä järjestelmässä käytetyn prosessorin tyypistä. Prosessoreissa Pentuim komento tähän on CPUID , jonka aikana tarvittavat tiedot prosessorista tulevat rekistereihin EAXEBXECXEDX ja sitten käyttäjä tai käyttöjärjestelmä voi lukea ne.

Prosessorin toteuttamista toimintatiloista ja määritetyistä käsiteltävän datan tyypeistä riippuen suoritettavien komentojen joukkoa voidaan laajentaa merkittävästi.

Jotkut prosessorit suorittavat aritmeettisia operaatioita binääri-desimaaliluvuilla tai suorittavat erityiskäskyjä tuloksen korjaamiseksi käsitellessään tällaisia ​​lukuja. Monet korkean suorituskyvyn prosessorit sisältävät FPU - numeronkäsittelyyksikkö c "liukupiste".

Useat nykyaikaiset prosessorit toteuttavat useiden kokonaislukujen tai lukujen ryhmäkäsittelyn c "liukupiste" yhdellä komennolla periaatteen mukaisesti SIMD ("Yksittäinen ohje – useita tietoja" ) - "Yksi komento – paljon dataa." Samanaikainen toimintojen suorittaminen useilla operandiilla parantaa merkittävästi prosessorin suorituskykyä, kun työskennellään video- ja äänidatan kanssa. Tällaisia ​​toimintoja käytetään laajalti kuvien, äänisignaalien ja muiden sovellusten käsittelyyn. Näiden toimintojen suorittamiseksi prosessoreihin on lisätty erityisiä lohkoja, jotka toteuttavat vastaavat käskysarjat, jotka erityyppisissä prosessoreissa ( Pentium, Athlon) sai nimenMMX (“ Milti- Medialaajennus ”) – Multimedialaajennus,SSE("Streaming SIMD Extension") – Suoratoisto SIMD - laajennus, “3 DLaajennus– Kolmiulotteinen laajennus.

Yrityksen prosessoreille tyypillinen piirre Intel 80286-mallista alkaen, on prioriteettiohjaus käytettäessä muistia, joka tarjotaan, kun prosessori toimii suojattujen virtuaaliosoitteiden tilassa - " Suojattu tila ” (suojattu tila). Tämän tilan toteuttamiseksi käytetään erityisiä komentoryhmiä, jotka järjestävät muistin suojauksen hyväksytyn prioriteettikäyttöalgoritmin mukaisesti.

Komentorakenne kokoonpanokielellä Ohjelmointi konekäskyjen tasolla on minimitaso, jolla tietokoneohjelmointi on mahdollista. Koneen ohjausjärjestelmän tulee olla riittävä toteuttamaan vaaditut toimenpiteet antamalla ohjeita konelaitteistolle. Jokainen konekäsky koostuu kahdesta osasta: operatiivisesta, joka määrittää "mitä tehdä" ja operandista, joka määrittää prosessointiobjektit, eli "mitä tehdä". Mikroprosessorin konekäsky, joka on kirjoitettu kokoonpanokielellä, on yksi rivi, jolla on seuraava muoto: nimikomento/komentooperandit; kommentit Otsikko, komento/käsky ja operandi erotetaan vähintään yhdellä välilyönnillä tai sarkainmerkillä. Komennon operandit erotetaan pilkuilla.

Assembly Language -komentorakenne Assembly-komento kertoo kääntäjälle, mitä toimintoa mikroprosessorin tulee suorittaa. Kokoonpanokäskyt ovat ohjelmatekstissä määritettyjä parametreja, jotka vaikuttavat kokoonpanoprosessiin tai tulostiedoston ominaisuuksiin. Operandi määrittää datan alkuarvon (tietosegmentissä) tai elementtien, joille komentotoiminto suoritetaan (koodisegmentissä). Käskyssä voi olla yksi tai kaksi operandia tai ei yhtään operandia. Operandien lukumäärä määritellään implisiittisesti käskykoodilla. Jos komentoa tai käskyä on jatkettava seuraavalle riville, käytetään kenoviivaa: "" . Oletusarvoisesti assembler ei erota isoja ja pieniä kirjaimia kirjoittaessaan komentoja ja käskyjä. Esimerkkejä direktiiveistä ja komennoista Count db 1 ; Nimi, käsky, yksi operandi mov eax, 0 ; Komento, kaksi operandia

Tunnisteet ovat kelvollisia merkkijonoja, joita käytetään merkitsemään muuttujien nimiä ja nimiön nimiä. Tunniste voi koostua yhdestä tai useammasta seuraavista merkeistä: kaikki latinalaisten aakkosten kirjaimet; numerot 0-9; erikoismerkit: _, @, $, ? . Pistettä voidaan käyttää tarran ensimmäisenä merkkinä. Varattuja assembler-nimiä (käskyt, operaattorit, komentojen nimet) ei voi käyttää tunnisteina. Tunnisteen ensimmäisen merkin on oltava kirjain tai erikoismerkki. Suurin pituus Tunnisteessa on 255 merkkiä, mutta kääntäjä hyväksyy ensimmäiset 32 ​​ja jättää muut huomioimatta. Kaikkien tarrojen, jotka on kirjoitettu riville, joka ei sisällä assembler-ohjetta, on päätyttävä kaksoispisteeseen ":". Nimikkeen, komennon (direktiivin) ja operandin ei tarvitse alkaa tietystä kohdasta rivillä. On suositeltavaa kirjoittaa ne sarakkeeseen ohjelman luettavuuden parantamiseksi.

Tarrat Kaikkien tarrojen, jotka on kirjoitettu riville, joka ei sisällä assembler-ohjetta, tulee päättyä kaksoispisteeseen ":". Nimikkeen, komennon (direktiivin) ja operandin ei tarvitse alkaa tietystä kohdasta rivillä. On suositeltavaa kirjoittaa ne sarakkeeseen ohjelman luettavuuden parantamiseksi.

Kommentit Kommenttien käyttäminen ohjelmassa parantaa sen selkeyttä, varsinkin kun komentojoukon tarkoitus on epäselvä. Kommentit alkavat millä tahansa rivillä lähdemoduulissa puolipisteellä (;). Kaikki ";n" oikealla puolella olevat merkit; " rivin loppuun on kommentti. Kommentti voi sisältää mitä tahansa tulostettavia merkkejä, mukaan lukien välilyönnit. Kommentti voi kattaa koko rivin tai seurata komentoa samalla rivillä.

Assembly Language -ohjelman rakenne Assembly-kielellä kirjoitettu ohjelma voi koostua useista osista, joita kutsutaan moduuleiksi, joista jokainen voi määrittää yhden tai useamman datan, pinon ja koodisegmentin. Jokaisen kokoonpanokielen täydellisen ohjelman tulee sisältää yksi pää- tai päämoduuli, josta sen suoritus alkaa. Moduuli voi sisältää ohjelma-, data- ja pinosegmenttejä, jotka on ilmoitettu asianmukaisilla käskyillä.

Muistimallit Ennen segmenttien ilmoittamista on määritettävä muistimalli käskyn avulla. MODEL-muunnin muistimalli, kutsumiskäytäntö, OS_tyyppi, pinoparametri Peruskokoonpanokielen muistimallit: Muistimalli Koodiosoitus Tietojen osoitus Käyttöjärjestelmä Koodin ja tiedon lomittelu PIENI LÄHELLÄ MS-DOS:ia Hyväksyttävä PIENI LÄHELLÄ MS-DOS:ia, Windowsia Ei KESKIPÄÄ LÄHELLÄ Ei MS-DOSia, Windowsia KOMPAKTI LÄHELLÄ KAUKAAN MS-DOS, Windows Ei SUURI MS-DOS, Windows Ei SUURI MS-DOS, Windows Ei LÄHELLÄ Windows 2000, Windows XP, Windows Hyväksyttävä FLAT LÄHELLÄ NT,

Muistimallit Pieni malli toimii vain 16-bittisissä MS-DOS-sovelluksissa. Tässä mallissa kaikki tiedot ja koodi sijaitsevat yhdessä fyysisessä segmentissä. Ohjelmatiedoston koko ei tässä tapauksessa ylitä 64 kt. Pieni malli tukee yhtä koodisegmenttiä ja yhtä datasegmenttiä. Data ja koodi osoitetaan mahdollisimman lähelle tätä mallia käytettäessä. Keskikokoinen malli tukee useita koodisegmenttejä ja yhtä datasegmenttiä, jolloin kaikki viittaukset koodisegmenteissä katsotaan oletuksena kaukana ja datasegmentin viittaukset lähellä. Kompakti malli tukee useita datasegmenttejä, jotka käyttävät etäosoitteita (far), ja yhtä koodisegmenttiä, joka käyttää lähiosoitetta (lähellä). Suuri malli tukee useita koodisegmenttejä ja useita datasegmenttejä. Oletuksena kaikki viittaukset koodiin ja tietoihin katsotaan pitkälle. Valtava malli vastaa melkein suurta muistimallia.

Muistimallit Litteässä mallissa oletetaan segmentoimatonta ohjelmakokoonpanoa, ja sitä käytetään vain 32-bittisissä käyttöjärjestelmissä. Tämä malli on samanlainen kuin pieni malli siinä mielessä, että tiedot ja koodi sijaitsevat yhdessä segmentissä, mutta se on 32-bittinen. Laaditaan ohjelma tasaiselle mallille ennen direktiiviä. malliasuntoon tulee sijoittaa jokin direktiiveistä: . 386, . 486, . 586 tai. 686. Prosessorin valintadirektiivin valinta määrää ohjelmia kirjoitettaessa käytettävissä olevien käskyjen joukon. P-kirjain prosessorin valintadirektiivin jälkeen tarkoittaa suojattua toimintatilaa. Tietojen ja koodien osoitus on lähellä, ja kaikki osoitteet ja osoittimet ovat 32-bittisiä.

Muistimallit. MODEL-muunnin muistimalli, kutsumiskäytäntö, käyttöjärjestelmän_tyyppi, pinoparametri Muokkausparametria käytetään segmenttityyppien määrittämiseen ja se voi saada seuraavat arvot: use 16 (valitun mallin segmenttejä käytetään 16-bittisinä) use 32 (valitun mallin segmenttejä käytetään 32-bittisenä). Calling_convention-parametria käytetään määrittämään parametrien välitystapa kutsuttaessa proseduuria muista kielistä, mukaan lukien korkean tason kielistä (C++, Pascal). Parametrilla voi olla seuraavat arvot: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

Muistimallit. MODEL-muunnin memory_model, calling_convention, OS_type, pinoparameter OS_type-parametri on oletuksena OS_DOS, ja se on tällä hetkellä tämän parametrin ainoa tuettu arvo. Parametri stack_parameter asetetaan seuraavasti: NEARSTACK (SS-rekisteri on yhtä suuri kuin DS, data- ja pinoalueet sijaitsevat samassa fyysisessä segmentissä) FARSTACK (SS-rekisteri ei ole sama kuin DS, data- ja pinoalueet sijaitsevat eri fyysisissä segmenteissä). Oletusarvo on NEARSTACK.

Esimerkki ohjelmasta, joka ei tee mitään. 686 P. MALLI FLAT, STDCALL. TIEDOT. KOODI START: RET END START RET - mikroprosessorikomento. Se varmistaa, että ohjelma päättyy oikein. Loput ohjelmasta koskevat kääntäjän toimintaa. . 686 P - Pentium 6 (Pentium II) suojatun tilan komennot ovat sallittuja. Tämä ohje valitsee tuetut kokoonpanokäskyt, jotka osoittavat prosessorimallin. . MALLI FLAT, stdcall - litteä muistimalli. Tätä muistimallia käytetään leikkaussalissa Windows-järjestelmä. stdcall - käytetty menettelyn kutsukäytäntö.

Esimerkki ohjelmasta, joka ei tee mitään. 686 P. MALLI FLAT, STDCALL. TIEDOT. KOODI START: RET END START. DATA on dataa sisältävä ohjelmasegmentti. Tämä ohjelma ei käytä pinoa, joten segmenttiä. STACK puuttuu. . KOODI on koodia sisältävä ohjelmasegmentti. START - etiketti. END START - ohjelman loppu ja sanoma kääntäjälle, että ohjelman suoritus alkaa START-tunnisteella. Jokaisen ohjelman tulee sisältää END-käsky, joka merkitsee lopun lähdekoodi ohjelmia. Kaikki END-käskyä seuraavat rivit jätetään huomioimatta.. END-käskyn jälkeen määritetty etiketti 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.

Assembly-kääntäjät Kääntäjä on ohjelma tai tekninen työkalu, joka muuntaa jollain ohjelmointikielellä esitellyn ohjelman kohdekielen ohjelmaksi, jota kutsutaan objektikoodiksi. Koneohjauksen muiston tukemisen lisäksi jokaisella kääntäjällä on omat direktiivit ja makrotyökalut, jotka eivät usein ole yhteensopivia minkään muun kanssa. Assembly-kielen kääntäjien päätyypit: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - vapaasti jaettu monivaiheinen kokoaja, jonka on kirjoittanut Tomasz Gryshtar (puola), NASM (Netwide Assembler) - ilmainen. Kokoonpanija Intel x -arkkitehtuurille 86, jonka loi Simon Tatham yhdessä Julian Hallin kanssa, ja sitä kehittää parhaillaan pieni Sourcen kehittäjäryhmä. Forge. netto.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="Ohjelman kääntäminen Microsoft Visual Studio 2005:ssä 1) Luo projekti valitsemalla Tiedosto->Uusi- >Projektivalikko Ja"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="Ohjelman kääntäminen Microsoft Visual Studio 2005:ssä 2) Projektipuussa (View->Solution Explorer) lisätä"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Ohjelman kääntäminen Microsoft Visual Studio 2005:ksi 3) Valitse Code C++ -tiedostotyyppi, mutta määritä nimi ja tunniste. asm:

Ohjelman kääntäminen Microsoft Visual Studio 2005:ksi 5) Aseta kääntäjän parametrit. Napsauta hiiren kakkospainikkeella projektitiedoston mukautetut koontisäännöt -valikkoa...

Käännä ohjelma Microsoft Visual Studio 2005:een ja valitse Microsoft Macro Assembler avautuvasta ikkunasta.

Ohjelman käännös Microsoft Visual Studio 2005:ssä Tarkista oikeanpuoleisella painikkeella tiedostossa hello. asm-projektipuu Ominaisuudet-valikosta ja asenna General->Tool: Microsoft Macro Assembler.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="Ohjelman kääntäminen Microsoft Visual Studio 2005:ssä 6) Käännä tiedosto valitsemalla Build->Build hello. prj."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Ohjelmointi Windows-käyttöjärjestelmässä Ohjelmointi Windows-käyttöjärjestelmässä perustuu API-toimintojen käyttöön (Application Program Interface eli ohjelmistosovellusliittymä). Niiden määrä on 2000. Windows-ohjelma koostuu suurelta osin tällaisista puheluista. Kaikki vuorovaikutukset ulkoisia laitteita ja käyttöjärjestelmän resurssit esiintyvät yleensä tällaisten toimintojen kautta. Windows-käyttöjärjestelmä käyttää litteää muistia. Minkä tahansa muistisolun osoitteen määrää yhden 32-bittisen rekisterin sisältö. Windowsille on olemassa kolmenlaisia ​​ohjelmarakenteita: dialogi (pääikkuna on dialogi), konsoli tai ikkunaton rakenne, klassinen rakenne (ikkunallinen, kehys).

Puhelu Windowsin toiminnot API Ohjetiedostossa mikä tahansa API-funktio esitetään muodossa funktion_nimi tyyppi (FA 1, FA 2, FA 3) Tyyppi – palautusarvon tyyppi; FAx – luettelo muodollisista argumenteista niiden esiintymisjärjestyksessä, esimerkiksi int Message. Laatikko (HWND h. Wnd, LPCTSTR lp. Teksti, LPCTSTR lp. Kuvateksti, UINT u. Tyyppi); Tämä toiminto näyttää ikkunan, jossa on viesti ja poistumispainike (tai -painikkeet). Parametrien merkitys: h. Wnd on sen ikkunan kuvaaja, jossa viesti-ikkuna tulee näkyviin, lp. Teksti - teksti, joka tulee näkyviin ikkunaan, lp. Kuvateksti - teksti ikkunan otsikossa, u. Tyyppi - ikkunan tyyppi; erityisesti voit määrittää poistumispainikkeiden lukumäärän.

Windows API int Message -toimintojen kutsuminen. Laatikko (HWND h. Wnd, LPCTSTR lp. Teksti, LPCTSTR lp. Kuvateksti, UINT u. Tyyppi); Melkein kaikki API-funktion parametrit ovat itse asiassa 32-bittisiä kokonaislukuja: HWND on 32-bittinen kokonaisluku, LPCTSTR on 32-bittinen osoitin merkkijonoon, UINT on 32-bittinen kokonaisluku. Suffiksi "A" lisätään usein funktion nimeen siirtyäkseen funktion uudempiin versioihin.

Windows API int Message -toimintojen kutsuminen. Laatikko (HWND h. Wnd, LPCTSTR lp. Teksti, LPCTSTR lp. Kuvateksti, UINT u. Tyyppi); MASM:ia käytettäessä nimen loppuun on lisättävä @N N - tavumäärä, jonka välitetyt argumentit vievät pinossa. Win 32 API -funktioissa tämä luku voidaan määritellä argumenttien lukumääräksi n kerrottuna 4:llä (tavua kussakin argumentissa): N=4*n. Voit kutsua funktion käyttämällä assembler CALL -ohjetta. Tässä tapauksessa kaikki funktion argumentit välitetään sille pinon kautta (PUSH-komento). Argumenttien välityssuunta: VASEMALTA OIKEALLE - ALALLA YLÖS. Argumentti u työnnetään pinoon ensin. Tyyppi. Kutsu määritetylle funktiolle näyttää tältä: CALL Message. Laatikko. A@16

Windows API int Message -toimintojen kutsuminen. Laatikko (HWND h. Wnd, LPCTSTR lp. Teksti, LPCTSTR lp. Kuvateksti, UINT u. Tyyppi); Minkä tahansa API-funktion suorittamisen tulos on yleensä kokonaisluku, joka palautetaan EAX-rekisteriin. OFFSET-direktiivi edustaa "poikkeamaa segmentissä" tai korkean tason kielen termeiksi käännettynä "osoitinta" rivin alkuun. EQU-direktiivi, kuten SI:n #define, määrittelee vakion. EXTERN-direktiivi kertoo kääntäjälle, että funktio tai tunniste on tämän moduulin ulkopuolinen.

Esimerkki "Hei kaikille!" -ohjelmasta . 686 P. MALLI FLAT, STDCALL. PINO 4096. DATA MB_OK EQU 0 STR 1 DB "Ensimmäinen ohjelmani", 0 STR 2 DB "Hei kaikille!", 0 HW DD ? ULKOINEN viesti. Laatikko. A@16: LÄHELLÄ. KOODI ALOITUS: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Viesti. Laatikko. A@16 RET END START

INVOKE-direktiivi MASM-kielikääntäjä mahdollistaa myös funktiokutsujen yksinkertaistamisen makrotyökalun avulla - INVOKE-direktiivi: INVOKE-funktio, parametri1, parametri2, ... Funktiokutsuun ei tarvitse lisätä @16; parametrit kirjoitetaan täsmälleen siinä järjestyksessä, jossa ne on annettu funktion kuvauksessa. Kääntäjän makron avulla parametrit sijoitetaan pinoon. INVOKE-direktiivin käyttämiseksi sinulla on oltava PROTO-direktiiviä käyttävän toiminnon prototyypin kuvaus muodossa: Viesti. Laatikko. PROTO: DWORD, : DWORD Jos ohjelma käyttää monia Win 32 API -funktioita, on suositeltavaa käyttää include-direktiiviä C: masm 32includeuser 32. inc

Rakenteet assembly-kielellä

Edellä tarkastelemamme taulukot ovat kokoelma samantyyppisiä elementtejä. Mutta usein sovelluksissa on otettava huomioon tietty tietojoukko erilaisia ​​tyyppejä kuin yksittäinen tyyppi.

Tämä on erittäin tärkeää esimerkiksi tietokantaohjelmille, joissa on tarpeen liittää yhteen objektiin kokoelma erityyppisiä tietoja.

Tarkastelimme esimerkiksi aiemmin listaa 4, jossa työskentelimme kolmitavuisten elementtien joukon kanssa. Jokainen elementti puolestaan ​​koostui kahdesta eri tyyppisestä elementistä: yksitavuisesta laskurikentästä ja kaksitavuisesta kentästä, jotka saattoivat kuljettaa muutakin tallennusta ja käsittelyä varten tarpeellista tietoa. Jos lukija tuntee jonkin korkean tason kielistä, hän tietää, että tällainen objekti kuvataan yleensä käyttämällä erityistä tietotyyppiä - rakenteet.

Assembly-kielen käytettävyyden parantamiseksi otettiin siihen myös tämä tietotyyppi.

A-priory rakenne on tietotyyppi, joka koostuu kiinteästä määrästä erityyppisiä elementtejä.

Jotta voit käyttää rakenteita ohjelmassa, sinun on suoritettava kolme vaihetta:

    Aseta rakennemalli .

    Pohjimmiltaan tämä tarkoittaa uuden tietotyypin määrittelyä, jota voidaan myöhemmin käyttää tämän tyyppisten muuttujien määrittämiseen.

    Määritellä rakenteen esimerkki .

    Tämä vaihe sisältää tietyn muuttujan alustamisen ennalta määritetyllä (mallipohjaisella) rakenteella.

    Järjestää pääsy rakenteen elementteihin .

On erittäin tärkeää, että ymmärrät alusta alkaen, mikä ero on kuvaus ohjelman ja sen rakenteet määritelmä.

Kuvaile ohjelman rakenne tarkoittaa yksinkertaisesti sen ääriviivan tai kuvion osoittamista; muistia ei ole varattu.

Tätä mallia voidaan pitää vain tiedoksi kääntäjälle kenttien sijainnista ja oletusarvosta.

Määritellä rakenne tarkoittaa kääntäjän ohjeistamista varaamaan muistia ja antamaan symbolisen nimen tälle muistialueelle.

Rakenne voidaan kuvata ohjelmassa vain kerran, mutta määritellä kuinka monta kertaa tahansa.

Rakennemallin kuvaus

Rakennemallin kuvauksessa on seuraava syntaksi:

rakenteen_nimi RAKENNE

rakenteen_nimi ENDS

Tässä on sarja datan kuvausohjeita db, dw, dd, dq Ja dt.

Niiden operandit määrittävät kenttien koon ja tarvittaessa alkuarvot. Nämä arvot todennäköisesti alustavat vastaavat kentät rakennetta määriteltäessä.

Kuten olemme jo todenneet mallia kuvattaessa, muistia ei varata, koska tämä on vain tietoa kääntäjälle.

Sijainti Ohjelmassa oleva malli voi olla mielivaltainen, mutta sen tulee yksivaiheisen kääntäjän logiikkaa noudattaen sijaita ennen paikkaa, jossa määritetään tietyn rakenteen tyyppinen muuttuja. Eli kun kuvataan muuttujaa tietyn rakenteen tyyppisellä datasegmentillä, sen malli tulee sijoittaa datasegmentin alkuun tai sen eteen.

Harkitsemme työskentelyä rakenteiden kanssa käyttämällä esimerkkiä mallintamalla tietokanta tietyn osaston työntekijöistä.

Yksinkertaisuuden vuoksi, jotta vältytään tietojen muuntamisesta syötettäessä, sovimme, että kaikki kentät ovat merkkikenttiä.

Määritetään tämän tietokannan tietuerakenne seuraavalla mallilla:

Tietojen määrittäminen rakennetyypillä

Jotta voit käyttää mallilla kuvattua rakennetta ohjelmassa, sinun on määritettävä muuttuja tämän rakenteen tyypin mukaan. Tätä varten käytetään seuraavaa syntaktista rakennetta:

[muuttujan nimi] rakenteen_nimi

    muuttujan nimi- tämän rakennetyypin muuttujan tunniste.

    Muuttujan nimen määrittäminen on valinnaista. Jos et määritä sitä, muistialue, jonka koko on yhtä suuri kuin kaikkien pituuksien summa rakenneosia.

    arvoluettelo- luettelo rakenneosien alkuarvoista kulmasuluissa pilkuilla erotettuna.

    Hänen tehtävänsä on myös vapaaehtoista.

    Jos luetteloa ei ole määritetty kokonaan, kaikki tämän muuttujan rakenteen kentät alustetaan arvoilla mallista, jos sellaisia ​​on määritetty.

    Yksittäiset kentät on mahdollista alustaa, mutta tässä tapauksessa puuttuvat kentät on erotettava pilkuilla. Pois jätetyt kentät alustetaan rakennemallin arvoilla. Jos määrittäessämme uutta muuttujaa tietyn rakenteen tyypillä hyväksymme kaikki sen mallin kenttäarvot (eli oletuksena määritetyt), meidän on vain kirjoitettava kulmasulkeet.

    Esim: voittajan työntekijä.

Määritellään esimerkiksi useita muuttujia, joilla on edellä kuvattu rakenne.

Menetelmät rakenteen kanssa työskentelyyn

Ajatus strukturoidun tyypin tuomisesta mihin tahansa ohjelmointikieleen on yhdistää erityyppisiä muuttujia yhdeksi objektiksi.

Kielellä on oltava keino päästä näihin muuttujiin rakenteen tietyssä esiintymässä. Jotta komennossa viitataan jonkin rakenteen omaavaan kenttään, käytetään erityistä operaattoria - symboli". " (piste). Sitä käytetään seuraavassa syntaksissa:

    osoite_lauseke- jonkin rakennetyypin tai lausekkeen muuttujan tunniste suluissa alla esitettyjen syntaksisääntöjen mukaisesti (kuva 1);

    rakenne_kentän_nimi- kentän nimi rakennemallista.

    Tämä on itse asiassa myös osoite tai pikemminkin kentän siirtymä rakenteen alusta.

Siten operaattori " . " (piste) arvioi lausekkeen

Riisi. 5. Osoitelausekkeen syntaksi rakennekentän käyttöoperaattorissa

Havainnollistetaan käyttämällä määrittelemämme rakenteen esimerkkiä. työntekijä joitain tekniikoita rakenteiden kanssa työskentelyyn.

Poimi esimerkiksi kirves kentän arvot iän mukaan. Koska on epätodennäköistä, että työssäkäyvän henkilön ikä on yli 99 vuotta, tämän merkkikentän sisällön sijoittamisen jälkeen rekisteriin kirves Se on kätevää muuntaa se binääriesitykseen komennolla aad.

Ole varovainen, koska tiedon tallennusperiaatteen vuoksi "matala tavu matalassa osoitteessa" iän korkein numero sijoitetaan al, ja nuorin - sisään Ah.

Jos haluat tehdä säätöjä, käytä komentoa xchg al, ah:

mov ax,sana ptr sotr1.age ;in al age sotr1

tai voit tehdä sen näin:

Jatkotyöt rakenneryhmän kanssa suoritetaan samalla tavalla kuin yksiulotteisen taulukon kanssa. Tässä herää useita kysymyksiä:

Mitä tehdä taulukon elementtien koolle ja miten järjestää indeksointi?

Kuten muutkin ohjelmassa määritellyt tunnisteet, kääntäjä antaa rakennetyypin nimelle type-attribuutin ja rakennetyypin nimelle muuttujan nimen. Tämän attribuutin arvo on tämän rakenteen kenttien käyttämä koko tavuina. Voit hakea tämän arvon käyttämällä operaattoria tyyppi.

Kun rakenneinstanssin koko tiedetään, indeksoinnin järjestäminen rakenteiden joukkoon ei ole erityisen vaikeaa.

Esim:

Kuinka kopioida kenttä yhdestä rakenteesta toisen rakenteen vastaavaan kenttään? Tai kuinka kopioida koko rakenne? Kopioidaan kenttä nam alan kolmas työntekijä nam viides työntekijä:

mas_sotr työntekijä 10 dup()

mov bx,offset mas_sotr

mov si,(tyyppi työntekijä)*2 ;si=77*2

mov di,(tyyppi työntekijä)*4 ;si=77*4

Minusta näyttää siltä, ​​että ohjelmoijana oleminen saa ihmisen näyttämään ennemmin tai myöhemmin hyvältä kotiäidiltä. Hän, kuten hän, etsii jatkuvasti, mistä säästää jotain, leikata ja tehdä upea lounas minimimäärästä. Ja jos tämä onnistuu, moraalinen tyydytys, jonka saat, ei ole vähemmän, ja ehkä jopa enemmän, kuin upeasta illallisesta kotiäidin kanssa. Tämän tyytyväisyyden aste vaikuttaa minusta riippuvan siitä, kuinka suuri rakkaus ammattiaan kohtaan on.

Toisaalta onnistumiset ohjelmistojen ja laitteistojen kehityksessä rentouttavat ohjelmoijaa jonkin verran, ja melko usein havaitaan tilanne, joka on samanlainen kuin tunnettu sananlasku kärpäsestä ja norsusta - pienen ongelman ratkaisemiseksi käytetään raskaita työkaluja, joiden tehokkuus on yleensä merkittävä vain suhteellisen suuria hankkeita toteutettaessa.

Seuraavien kahden tyyppisten tietojen esiintyminen kielessä selittyy luultavasti "kotiäidin" halulla käyttää pöydän työaluetta (RAM) mahdollisimman tehokkaasti ruoan valmistuksessa tai tuotteiden asettamisessa (ohjelmatiedot) ).

Komennot voidaan erottaa tarkoituksen mukaan (esimerkkejä IBM PC Assembler -komentojen muistokoodeista on annettu suluissa):

l aritmeettisten operaatioiden suorittaminen (ADD ja ADC - yhteen- ja yhteenlasku siirrolla, SUB ja SBB - vähennys ja vähennys lainaamalla, MUL ja IMUL - etumerkitön ja etumerkillinen kertolasku, DIV ja IDIV - etumerkitön ja etumerkillinen jako, CMP - vertailut jne.);

l suorittaa loogisia operaatioita (OR, AND, NOT, XOR, TEST jne.);

l tiedonsiirto (MOV - eteenpäin, XCHG - vaihto, IN - sisääntulo mikroprosessoriin, OUT - lähtö mikroprosessorista jne.);

l ohjauksen siirto (ohjelman haarat: JMP - ehdoton hyppy, CALL - proseduurikutsu, RET - paluu proseduurista, J* - ehdollinen hyppy, LOOP - silmukan ohjaus jne.);

l prosessoi merkkijonoja (MOVS - siirrot, CMPS - vertailut, LODS - lataa, SCAS - skannaukset. Näitä komentoja käytetään yleensä etuliitteen (toistomuunnos) -REP kanssa;

l ohjelman keskeytykset (INT - ohjelmistokeskeytykset, INTO - ehdollinen keskeytys ylivuodon yhteydessä, IRET - paluu keskeytyksestä);

l mikroprosessoriohjaus (ST* ja CL* - lippujen asetus ja nollaus, HLT - pysäytys, WAIT - odottaa, NOP - tyhjäkäynti jne.).

KANSSA täydellinen lista Asennuskomennot löytyvät töistä.

Tiedonsiirtokomennot

l MOV dst, src - tiedonsiirto (siirrä - lähetä src:stä dst:hen).

Siirtää: yhden tavun (jos src ja dst ovat tavumuodossa) tai yhden sanan (jos src ja dst ovat sanamuodossa) rekistereiden välillä tai rekisterin ja muistin välillä ja kirjoittaa suoran arvon rekisteriin tai muistiin.

Operandeilla dst ja src on oltava sama muoto - tavu tai sana.

Src voi olla seuraavaa tyyppiä: r (rekisteri) - rekisteri, m (muisti) - muisti, i (impedanssi) - välitön arvo. Dst voi olla tyyppiä r, m. Et voi käyttää seuraavia operandeja yhdessä komennossa: rsegm yhdessä i:n kanssa; kaksi operandia tyyppiä m ja kaksi operandia tyyppiä rsegm). i-operandi voi olla myös yksinkertainen lauseke:

mov AX, (152 + 101B) / 15

Ilmaisun arviointi suoritetaan vain kääntämisen aikana. Ei vaihda lippuja.

l PUSH src - sanan työntäminen pinoon (push - puskea läpi; työnnä pinoon src:stä). Sijoittaa src:n sisällön - minkä tahansa 16-bittisen rekisterin (segmenttirekisteri mukaan lukien) tai kaksi muistisolua, jotka sisältävät 16-bittisen sanan - pinon yläosaan. Liput eivät muutu;

l POP dst - ponnahtaa sana pinosta (pop - pop; laske pinosta dst:hen). Poistaa sanan pinon yläosasta ja sijoittaa sen dst:hen - mihin tahansa 16-bittiseen rekisteriin (mukaan lukien segmenttirekisteri) tai kahteen muistisoluun. Liput eivät muutu.

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). Tarran enimmäispituus on 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 käyttöjärjestelmä Windows. 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.
Jokaisen moduulin tulee sisältää END-käsky, joka merkitsee ohjelman lähdekoodin loppua. 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äosa