Programma montāžas valodā. IBM-PC Assembler valodas komandu sistēmas vispārīgie raksturlielumi (komandu pamatkopa, operandu adresācijas pamatmetodes). Programmas struktūra Assembler valodā. Montāžas valodas komandas

Galvenā informācija par montāžas valodu

Simboliskā montāžas valoda lielā mērā var novērst mašīnvalodas programmēšanas trūkumus.

Tās galvenā priekšrocība ir tā, ka montāžas valodā visi programmas elementi tiek parādīti simboliskā formā. Par simbolisko komandu nosaukumu pārveidošanu to binārajos kodos ir atbildīgs īpaša programma- montētājs, kas atbrīvo programmētāju no darbietilpīga darba un novērš neizbēgamās kļūdas.

Simboliskie nosaukumi, kas ievadīti, programmējot montāžas valodā, parasti atspoguļo programmas semantiku, un komandu saīsinājums atspoguļo to galveno funkciju. Piemēram: PARAM - parametrs, TABLE - tabula, MASK - maska, ADD - saskaitīšana, SUB - atņemšana utt. uc Tādus nosaukumus programmētājam ir viegli atcerēties.

Programmēšanai montāžas valodā ir nepieciešami sarežģīti rīki nekā programmēšanai mašīnvalodā: nepieciešamas datorsistēmas, kuru pamatā ir mikrodators vai dators ar komplektu perifērijas ierīces(burtciparu tastatūra, rakstzīmju displejs, peldošais diskdzinis un drukas iekārta), kā arī pastāvīgas vai krusteniskās programmēšanas sistēmas nepieciešamajiem mikroprocesoru tipiem. Montāžas valoda ļauj efektīvi rakstīt un atkļūdot daudz sarežģītākas programmas nekā mašīnvaloda (līdz 1–4 KB).

Montāžas valodas ir orientētas uz mašīnu, t.i., atkarīgas no attiecīgā mikroprocesora mašīnas valodas un struktūras, jo tajās katrai mikroprocesora instrukcijai tiek piešķirts konkrēts simbolisks nosaukums.

Montāžas valodas nodrošina ievērojamu programmētāja produktivitātes pieaugumu salīdzinājumā ar mašīnu valodām un tajā pašā laikā saglabā iespēju izmantot visus programmatūrai pieejamos mikroprocesora aparatūras resursus. Tas ļauj kvalificētiem programmētājiem rakstīt programmas, kuras var izpildīt mazāk nekā īsu laiku un aizņem mazāk atmiņas, salīdzinot ar programmām, kas izveidotas augsta līmeņa valodā.

Šajā sakarā gandrīz visas ievades/izvades ierīču (draiveru) vadības programmas ir rakstītas montāžas valodā, neskatoties uz to, ka ir diezgan liels augsta līmeņa valodu klāsts.

Izmantojot montāžas valodu, programmētājs var iestatīt šādus parametrus:

katras mikroprocesora mašīnas valodas komandas mnemonika (simboliskais nosaukums);

standarta formātu programmas rindiņām, kas rakstītas montāžas valodā;

norādīšanas formāts dažādos veidos adresācijas un komandu varianti;

formāts rakstzīmju konstantu un veselu skaitļu konstantu norādīšanai dažādās skaitļu sistēmās;

pseido komandas, kas kontrolē programmas salikšanas (tulkošanas) procesu.

Asamblejas valodā programma tiek rakstīta pēc rindas, tas ir, katrai komandai tiek atvēlēta viena rinda.

Mikrodatoriem, kas būvēti, pamatojoties uz izplatītākajiem mikroprocesoru veidiem, var būt vairāki montāžas valodas varianti, taču parasti praksē plaši tiek izmantots viens - tā ir tā sauktā standarta montāžas valoda.

Programmēšana mašīnas instrukciju līmenī ir minimālais līmenis, kurā var rakstīt programmas. Mašīnas instrukciju sistēmai jābūt pietiekamai, lai veiktu nepieciešamās darbības, izdodot instrukcijas datora aparatūrai.

Katra mašīnas komanda sastāv no divām daļām:

· operāciju zāle – “ko darīt” noteikšana;

· operands - apstrādes objektu definēšana, “ko darīt”.

Mikroprocesora mašīnas komanda, kas rakstīta montāžas valodā, ir viena rinda ar šādu sintaktisko formu:

etiķetes komanda/direktīvas operands(-i) ;komentāri

Šajā gadījumā obligātais lauks rindā ir komanda vai direktīva.

Iezīme, komanda/direktīva un operandi (ja tādi ir) ir atdalīti ar vismaz vienu atstarpi vai tabulēšanas rakstzīmi.

Ja komanda vai direktīva jāturpina nākamajā rindā, tiek izmantota atpakaļvērstā slīpsvītra: \.

Pēc noklusējuma montāžas valoda neatšķir lielos un mazos burtus, rakstot komandas vai direktīvas.

Tiešā adresācija: efektīvo adresi nosaka tieši mašīnas instrukcijas nobīdes lauks, kas var būt 8, 16 vai 32 biti liels.

mov eax, summa ; eax = summa

Montētājs aizstāj summu ar atbilstošo adresi, kas saglabāta datu segmentā (pēc noklusējuma to adresē ds reģistrs) un ievieto summā saglabāto vērtību eax reģistrā.

Netiešā adresācija savukārt ir šādi veidi:

· netiešā pamata (reģistra) adresācija;

· netiešā pamata (reģistra) adresācija ar nobīdi;

· netiešā indeksa adresācija;

· netiešā pamata indeksa adresācija.

Netiešā pamata (reģistra) adresācija. Izmantojot šo adresēšanu, operanda efektīvā adrese var atrasties jebkurā no vispārējas nozīmes reģistriem, izņemot sp/esp un bp/ebp (tie ir specifiski reģistri darbam ar steka segmentu). Sintaktiski komandā šis adresācijas režīms tiek izteikts, iekļaujot reģistra nosaukumu kvadrātiekavās.

mov eax, ; eax = *esi; *esi vērtība adresē esi

Ievads.

Valoda, kurā tas ir uzrakstīts oriģinālā programma, zvanīja ieeja valoda, un valoda, kurā tas tiek tulkots, lai procesors to izpildītu brīvdienās mēle. Tiek saukts ievades valodas pārvēršanas process izvades valodā pārraide. Tā kā procesori spēj izpildīt programmas binārā mašīnvalodā, kas netiek izmantota programmēšanai, ir nepieciešama visu avota programmu tulkošana. Zināms divos veidos raidījumi: kompilācija un interpretācija.

Plkst kompilācija avota programma vispirms tiek pilnībā pārtulkota līdzvērtīgā programmā izvades valodā, ko sauc objektu programmu un pēc tam izpildīts. Šis process tiek īstenots, izmantojot īpašu programmas, sauca kompilators. Tiek saukts kompilators, kuram ievades valoda ir simboliska bināro kodu mašīnvalodas (izvades) attēlošanas forma. montētājs.

Plkst interpretācijas Katra teksta rindiņa avota programmā tiek analizēta (interpretēta) un uzreiz tiek izpildīta tajā norādītā komanda. Šīs metodes īstenošana ir uzticēta tulku programma. Interpretācija aizņem ilgu laiku. Lai palielinātu tā efektivitāti, tulks vispirms pārveido visu tā vietā, lai apstrādātu katru rindiņu komanda rakstzīmju virknes (

). Ģenerētā simbolu secība tiek izmantota, lai veiktu oriģinālajai programmai piešķirtās funkcijas.

Tālāk aprakstītā montāžas valoda tiek ieviesta, izmantojot kompilāciju.

Valodas iezīmes.

Galvenās montāžas funkcijas:

● bināro kodu vietā valoda izmanto simboliskus nosaukumus - mnemonika. Piemēram, pievienošanas komandai (

) tiek izmantota mnemonika

Atņemšanas (

reizināšana (

Divīzijas (

uc Simboliskie nosaukumi tiek izmantoti arī, lai adresētu atmiņas šūnas. Lai programmētu montāžas valodā, bināro kodu un adrešu vietā ir jāzina tikai simbolisks nosaukumi, kurus montētājs pārvērš bināros kodos;

katrs apgalvojums atbilst viena mašīnas komanda(kods), t.i., ir savstarpēja atbilstība starp mašīnu komandām un operatoriem montāžas valodas programmā;

● valoda nodrošina piekļuvi uz visiem objektiem un komandas. Augsta līmeņa valodām šādas iespējas nav. Piemēram, montāžas valoda ļauj pārbaudīt karoga reģistra bitus un augsta līmeņa valodu (piemēram,

) nav šīs iespējas. Ņemiet vērā, ka sistēmu programmēšanas valodas (piemēram, C) bieži ieņem starpposmu. Pieejamības ziņā tās ir tuvākas montāžas valodai, taču tām ir augsta līmeņa valodas sintakse;

● montāžas valoda nav universāla valoda. Katrai konkrētai mikroprocesoru grupai ir savs montētājs. Augsta līmeņa valodām šī trūkuma nav.

Atšķirībā no augsta līmeņa valodām, programmas rakstīšana un atkļūdošana montāžas valodā aizņem daudz laika. Neskatoties uz to, montāžas valoda ir saņemta plaša izmantošanašādu apstākļu dēļ:

● programma, kas rakstīta montāžas valodā, ir ievērojami mazāka izmēra un darbojas daudz ātrāk nekā programma, kas rakstīta augsta līmeņa valodā. Dažos lietojumos šiem rādītājiem ir galvenā nozīme, piemēram, daudziem sistēmas programmas(ieskaitot kompilatorus), programmas uz kredītkartēm, mobilos tālruņus, ierīču draiveri utt.;

● nepieciešamas dažas procedūras pilna piekļuve aparatūrai, ko parasti nav iespējams izdarīt augsta līmeņa valodā. Šajā gadījumā ir iekļauti pārtraukumu un pārtraukumu apstrādātāji operētājsistēmās, kā arī ierīču kontrolleri iegultās reāllaika sistēmās.

Lielākajā daļā programmu tikai neliela daļa no kopējā koda ir atbildīga par lielu programmas izpildes laika procentuālo daļu. Parasti 1% programmas ir atbildīgi par 50% no izpildes laika, un 10% no programmas ir atbildīgi par 90% no izpildes laika. Tāpēc, lai rakstītu konkrētu programmu reālos apstākļos, tiek izmantots gan montētājs, gan viena no augsta līmeņa valodām.

Operatora formāts montāžas valodā.

Montāžas valodas programma ir komandu (paziņojumu, teikumu) saraksts, no kurām katra aizņem atsevišķu rindu un satur četrus laukus: etiķetes lauks, darbības lauks, operanda lauks un komentāru lauks. Katram laukam ir atsevišķa kolonna.

Etiķetes lauks.

Etiķetes laukam ir piešķirta 1. sleja. Etiķete ir simbolisks nosaukums vai identifikators, adreses atmiņa. Tas ir nepieciešams, lai jūs varētu:

● veikt nosacītu vai beznosacījumu pāreju uz komandu;

● piekļūt vietai, kur dati tiek glabāti.

Šādi paziņojumi ir nodrošināti ar etiķeti. Lai norādītu vārdu, tiek izmantoti angļu alfabēta (lielie) burti un cipari. Nosaukuma sākumā ir jābūt burtam un beigās - kolu atdalītājam. Kola marķējumu var rakstīt atsevišķā rindā, bet operācijas kodu var rakstīt nākamajā 2. kolonnas rindā, kas vienkāršo kompilatora darbu. Kolas trūkums neļauj atšķirt etiķeti no darbības koda, ja tie atrodas atsevišķās rindās.

Dažās montāžas valodas versijās koli tiek ievietoti tikai pēc instrukciju etiķetēm, nevis pēc datu etiķetēm, un etiķetes garums var būt ierobežots līdz 6 vai 8 rakstzīmēm.

Iezīmes laukā nedrīkst būt identiskiem nosaukumiem, jo ​​etiķete ir saistīta ar komandu adresēm. Ja programmas izpildes laikā nav nepieciešams izsaukt komandu vai datus no atmiņas, tad etiķetes lauks paliek tukšs.

Operācijas koda lauks.

Šajā laukā ir komandas vai pseido komandas mnemoniskais kods (skatiet tālāk). Komandas mnemonisko kodu izvēlas valodas izstrādātāji. Montāžas valodā

mnemonika ir atlasīta, lai ielādētu reģistru no atmiņas

), un reģistra satura saglabāšanai atmiņā - mnemonika

). Asamblejas valodās

abām darbībām varat izmantot attiecīgi vienu un to pašu nosaukumu

Ja mnemonisko nosaukumu izvēle var būt patvaļīga, tad nepieciešamību izmantot divas mašīnas instrukcijas nosaka procesora arhitektūra

Reģistru mnemonika ir atkarīga arī no montētāja versijas (5.2.1. tabula).

Operanda lauks.

Šeit atrodas Papildus informācija, kas nepieciešams operācijas veikšanai. Operanda laukā lēciena komandām ir norādīta adrese, uz kuru jāveic lēciens, kā arī adreses un reģistri, kas ir mašīnas komandas operandi. Kā piemēru mēs sniedzam operandus, kurus var izmantot 8 bitu procesoriem

● skaitliskos datus,

attēlots dažādās skaitļu sistēmās. Lai norādītu izmantoto skaitļu sistēmu, konstantei seko viens no Latīņu burti: IN,

Attiecīgi binārās, oktālās, heksadecimālās un decimālās skaitļu sistēmas (

Jums tas nav jāpieraksta). Ja heksadecimālā skaitļa pirmais cipars ir A, B, C,

Tad priekšā tiek pievienots nenozīmīgs 0 (nulle);

● iekšējo mikroprocesoru reģistru un atmiņas šūnu kodi

M (informācijas avoti vai saņēmēji) burtu A, B, C veidā,

M vai to adreses jebkurā numuru sistēmā (piemēram, 10B - reģistra adrese

binārajā sistēmā);

● identifikatori,

gaisa kuģu pāru reģistrācijai,

Pirmie burti ir B,

N; akumulatora un funkciju reģistra pārim -

; programmu skaitītājam -

;steka rādītājam -

● etiķetes, kas norāda operandu adreses vai nākamos norādījumus nosacījumos

(ja nosacījums ir izpildīts) un beznosacījuma pārejas. Piemēram, operands M1 komandā

nozīmē nepieciešamību pēc beznosacījuma pārejas uz komandu, kuras adrese etiķetes laukā apzīmēta ar identifikatoru M1;

● izteiksmes,

kuras tiek konstruētas, saistot iepriekš aplūkotos datus, izmantojot aritmētiskos un loģiskos operatorus. Ņemiet vērā, ka datu vietas rezervēšanas metode ir atkarīga no valodas versijas. Asamblejas valodas izstrādātāji par

Definējiet vārdu) un vēlāk ievadiet Alternatīva iespēja.

kas bija procesoru valodā jau no paša sākuma

Valodas versijā

lietots

Definējiet konstanti).

Procesori apstrādā dažāda garuma operandus. Lai to definētu, montētāju izstrādātāji pieņēma dažādus lēmumus, piemēram:

II dažāda garuma reģistriem ir dažādi nosaukumi: EAX - 32 bitu operandu izvietošanai (tips

); AX — 16 bitiem (tips

un AN - 8 bitiem (tips

● procesoriem

Katram darbības kodam tiek pievienoti sufiksi: sufikss

Tipam

; sufikss ".B" tipam

dažāda garuma operandiem tiek izmantoti dažādi opkodi, piemēram, lai ielādētu baitu, pusvārdu (

) un vārdus 64 bitu reģistrā, izmantojot opkodus

attiecīgi.

Komentāru lauks.

Šajā laukā ir sniegti skaidrojumi par programmas darbībām. Komentāri neietekmē programmas darbību un ir paredzēti cilvēkiem. Tie var būt nepieciešami, lai modificētu programmu, kas bez šādiem komentāriem var būt pilnīgi nesaprotama pat pieredzējušiem programmētājiem. Komentārs sākas ar simbolu un tiek izmantots, lai izskaidrotu un dokumentētu programmas. Komentāra sākuma rakstzīme var būt:

● semikolu (;) uzņēmuma procesoru valodās

Izsaukuma zīme(!) valodās priekš

Pirms katras atsevišķas komentāra rindiņas ir ievadzīme.

Pseidokamandas (direktīvas).

Montāžas valodā ir divi galvenie komandu veidi:

pamata instrukcijas, kas ir līdzvērtīgas procesora mašīnas kodam. Šīs komandas veic visu programmas paredzēto apstrādi;

pseido komandas vai direktīvas, izstrādāts, lai apkalpotu programmas tulkošanas procesu kodu kombinācijas valodā. Kā piemēru tabulā. 5.2.2 parāda dažas pseido komandas no montētāja

ģimenei

.

Programmējot ir situācijas, kad pēc algoritma viena un tā pati komandu ķēde ir jāatkārto daudzas reizes. Lai izkļūtu no šīs situācijas, varat:

● ierakstiet nepieciešamo komandu secību, kad vien tā notiek. Šāda pieeja palielina programmas apjomu;

● sakārtot šo secību procedūrā (apakšprogrammā) un vajadzības gadījumā izsaukt to. Šai izvadei ir savi trūkumi: katru reizi ir jāizpilda īpašas procedūras izsaukšanas komanda un atgriešanās komanda, kas, ja secība ir īsa un bieži tiek izmantota, var ievērojami samazināt programmas ātrumu.

Vienkāršākais un efektīva metode atkārtota komandu ķēdes atkārtošana sastāv no izmantošanas makro, ko var attēlot kā pseido-komandu, kas paredzēta, lai pārtulkotu programmā bieži sastopamo komandu grupu.

Makro vai makrokomandu raksturo trīs aspekti: makrodefinīcija, makroinversija un makropaplašināšana.

Makro definīcija

Šis ir apzīmējums atkārtoti atkārtotai programmas komandu secībai, ko izmanto atsaucēm programmas tekstā.

Makro definīcijai ir šāda struktūra:

Izteicienu saraksts; Makro definīcija

Dotajā makrodefinīcijas struktūrā var izdalīt trīs daļas:

● nosaukums

makro, ieskaitot nosaukumu

Pseidokamanda

un parametru kopums;

● atzīmēts ar punktiem ķermeni makro;

● komanda

izlaidums

makro definīcijas.

Makro definīcijas parametru kopa satur visu parametru sarakstu, kas norādīti operanda laukā atlasītajai instrukciju grupai. Ja šie parametri programmā tika norādīti agrāk, tad makro definīcijas galvenē tie nav jānorāda.

Lai atkārtoti apkopotu atlasīto komandu grupu, tiek izmantota apelācija, kas sastāv no nosaukuma

makro komandas un parametru saraksts ar citām vērtībām.

Kad apkopotājs sastopas ar makro definīciju kompilācijas procesa laikā, tas saglabā to makro definīciju tabulā. Turpmākajās parādīšanās vārda programmā (

), montētājs to aizstāj ar makro pamattekstu.

Makro nosaukuma izmantošana kā opkods tiek izsaukta makro apvērsums(makro izsaukums) un aizstājot to ar makro pamattekstu - makro paplašināšana.

Ja programma tiek attēlota kā rakstzīmju secība (burti, cipari, atstarpes, pieturzīmes un karietes atgriešana, lai pārietu uz jaunu rindu), tad makro izvēršana sastāv no dažu ķēžu aizstāšanas no šīs secības ar citām ķēdēm.

Makro paplašināšana notiek montāžas procesā, nevis programmas izpildes laikā. Metodes manipulēšanai ar rakstzīmju virknēm ir piešķirtas makro nozīmē.

Tiek veikts montāžas process divos piegājienos:

● Pirmajā piegājienā visas makro definīcijas tiek saglabātas un makro izsaukumi tiek paplašināti. Šajā gadījumā sākotnējā programma tiek nolasīta un pārveidota par programmu, kurā tiek noņemtas visas makro definīcijas, un katrs makro izsaukums tiek aizstāts ar makro pamattekstu;

● otrā kārta apstrādā iegūto programmu bez makro.

Makro ar parametriem.

Lai strādātu ar atkārtotām komandu secībām, kuru parametriem var būt dažādas vērtības, tiek sniegtas makro definīcijas:

● ar faktiskais parametri, kas tiek ievietoti makro izsaukuma operanda laukā;

● ar formāls parametrus. Makro paplašināšanas laikā katrs formālais parametrs, kas parādās makro pamattekstā, tiek aizstāts ar atbilstošo faktisko parametru.

izmantojot makro ar parametriem.

Programma 1 satur divas līdzīgas komandu secības, kas atšķiras ar to, ka pirmā apmaina P un

Un otrais

2. programmā ir iekļauts makro ar diviem formāliem parametriem P1 un P2. Makro izvēršanas laikā katra P1 rakstzīme makro pamattekstā tiek aizstāta ar pirmo faktisko parametru (P,

), un simbols P2 tiek aizstāts ar otro faktisko parametru (

) no programmas Nr. 1. Makro izsaukumā

2. programma ir atzīmēta: P,

Pirmais faktiskais parametrs,

Otrais faktiskais parametrs.

1. programma

2. programma

MOV EBX,Q MOV EAX,Pl

MOV Q, EAX MOV EBX, P2

MOV P, EBX MOV P2, EAX

Paplašinātas iespējas.

Apskatīsim dažas uzlabotas valodas funkcijas

Ja makro, kas satur nosacījuma lēciena komandu un etiķeti, uz kuru jālec, tiek izsaukts divas vai vairākas reizes, etiķete tiks dublēta (dublikāta etiķetes problēma), kas izraisīs kļūdu. Tāpēc katrs izsaukums kā parametru piešķir atsevišķu etiķeti (no programmētāja). Valodā

etiķete ir deklarēta vietējā (

) un, pateicoties uzlabotajām iespējām, montētājs automātiski ģenerē citu etiķeti katru reizi, kad makro tiek izvērsts.

ļauj definēt makro citos makro. Šī uzlabotā funkcija ir ļoti noderīga kombinācijā ar programmas nosacījumu saistīšanu. Apsvērsim

JA WORDSIZE GT 16 M2 MAKRO

M2 makro var definēt abās priekšraksta daļās

Tomēr definīcija ir atkarīga no tā, kurā procesorā programma ir samontēta: 16 bitu vai 32 bitu. Ja M1 netiek izsaukts, makro M2 netiks definēts vispār.

Vēl viena uzlabota funkcija ir tāda, ka makro var izsaukt citus makro, tostarp sevi - rekursīvs zvanu. Pēdējā gadījumā, lai izvairītos no nebeidzamas cilpas, makro ir jānodod sev parametrs, kas mainās ar katru paplašināšanu, kā arī pārbaudietšo parametru un beidz rekursiju, kad parametrs sasniedz noteiktu vērtību.

Par makro līdzekļu izmantošanu montētājā.

Izmantojot makro, montētājam jāspēj veikt divas funkcijas: saglabāt makro definīcijas Un paplašināt makro izaicinājumus.

Makro definīciju saglabāšana.

Visi makro nosaukumi tiek saglabāti tabulā. Katram nosaukumam ir pievienots rādītājs uz atbilstošo makro, lai vajadzības gadījumā to varētu izsaukt. Dažiem montētājiem ir atsevišķa tabula makro nosaukumiem, citiem ir vispārīga tabula, kurā kopā ar makro nosaukumiem atrodas visas mašīnas instrukcijas un direktīvas.

Sastopoties ar makro montāžas laikā ir izveidots:

jauns tabulas elements ar makro nosaukumu, parametru skaitu un rādītāju uz citu makro definīciju tabulu, kurā tiks saglabāts makro pamatteksts;

● saraksts formāls parametrus.

Pēc tam makro pamattekstu, kas ir vienkārši rakstzīmju virkne, nolasa un saglabā makro definīciju tabulā. Tiek atzīmēti formālie parametri, kas rodas cilpas pamattekstā īpašs raksturs.

Makro iekšējais attēlojums

no iepriekš minētā piemēra 2. programmai (244. lpp.) ir:

MOV EAX, MOV EBX, MOV MOV un

kur semikolu izmanto kā karieta atgriešanas rakstzīmi, bet & kā formālo parametra rakstzīmi.

Makro zvanu paplašināšana.

Ikreiz, kad montāžas laikā tiek atrasta makro definīcija, tā tiek saglabāta makro tabulā. Kad tiek izsaukts makro, montētājs uz laiku pārtrauc ievades datu lasīšanu no ievades ierīces un sāk nolasīt saglabāto makro pamattekstu. Formālie parametri, kas iegūti no makro korpusa, tiek aizstāti ar faktiskajiem parametriem, un tos nodrošina izsaukums. Ampersands un pirms parametri ļauj montētājam tos atpazīt.

Neskatoties uz to, ka ir daudzas montētāja versijas, montāžas procesiem ir kopīgas iezīmes un tie daudzējādā ziņā ir līdzīgi. Tālāk ir apskatīta divu caurlaides montētāja darbība.

Divkāršu montētājs.

Programma sastāv no vairākiem paziņojumiem. Tāpēc šķiet, ka montāžas laikā varat izmantot šādu darbību secību:

● tulkot to mašīnvalodā;

● pārsūtīt iegūto mašīnas kodu uz failu un atbilstošo saraksta daļu uz citu failu;

● atkārtojiet uzskaitītās procedūras, līdz tiek iztulkota visa programma.

Tomēr šī pieeja nav efektīva. Piemērs ir tā sauktā problēma uz priekšu saite. Ja pirmais priekšraksts ir lēciens uz priekšrakstu P, kas atrodas programmas pašās beigās, tad montētājs to nevar pārtulkot. Vispirms viņam ir jānosaka operatora P adrese, un, lai to izdarītu, viņam ir jāizlasa visa programma. Tiek izsaukta katra pilnīga avota programmas lasīšana fragments. Parādīsim, kā varat atrisināt paredzamās saites problēmu, izmantojot divas reizes:

pirmajā piegājienā jums vajadzētu savākt un saglabājiet visas simbolu definīcijas (ieskaitot etiķetes) tabulā, un otrajā piegājienā izlasiet un salieciet katru operatoru. Šī metode ir salīdzinoši vienkārša, taču otrreizējai sākotnējās programmas iziešanai nepieciešams papildu laiks, kas jāpavada I/O operācijām;

● pirmajā piegājienā jums vajadzētu konvertēt programmu starpformā un saglabājiet to tabulā, un otro piegājienu veiciet nevis pēc sākotnējās programmas, bet gan pēc tabulas. Šī montāžas metode ietaupa laiku, jo otrā kārta neveic I/O darbības.

Pirmā piespēle.

Pirmā piespēles vārti- izveidojiet simbolu tabulu. Kā minēts iepriekš, vēl viens pirmās kārtas mērķis ir saglabāt visas makro definīcijas un paplašināt zvanus, tiklīdz tie parādās. Līdz ar to gan simbolu definīcija, gan makro paplašināšana notiek vienā piegājienā. Simbols var būt vai nu etiķete, vai nozīme, kam tiek piešķirts konkrēts nosaukums, izmantojot direktīvu -you:

;Vērtība - bufera lielums

Piešķirot nozīmi simboliskiem nosaukumiem komandas etiķetes laukā, montētājs būtībā norāda adreses, kas katrai komandai būs programmas izpildes laikā. Šim nolūkam montētājs uzglabā montāžas procesa laikā instrukciju adrešu skaitītājs(

) kā īpašu mainīgo. Pirmās piegājiena sākumā īpašā mainīgā vērtība tiek iestatīta uz 0 un tiek palielināta pēc katras apstrādātās komandas atbilstoši šīs komandas garumam. Kā piemēru tabulā. 5.2.3 parāda programmas fragmentu, kas norāda komandu garumu un skaitītāja vērtības. Pirmajā piegājienā tiek ģenerētas tabulas simboliski nosaukumi, direktīvas Un darbības kodi, un ja nepieciešams burtiski tabula. Literāls ir konstante, kurai montētājs automātiski rezervē atmiņu. Tūlīt atzīmēsim, ka mūsdienu procesoros ir instrukcijas ar tūlītējām adresēm, tāpēc to montētāji neatbalsta burtus.

Simbolu nosaukumu tabula

satur vienu elementu katram nosaukumam (5.2.4. tabula). Katrs simbolisko nosaukumu tabulas elements satur pašu nosaukumu (vai rādītāju uz to), tā skaitlisko vērtību un dažreiz papildu informāciju, kas var ietvert:

● ar simbolu saistītā datu lauka garums;

● atmiņas pārdalīšanas biti (kas norāda, vai simbola vērtība mainās, ja programma tiek ielādēta citā adresē, nekā to paredzējis montētājs);

● informācija par to, vai simbolam var piekļūt ārpus procedūras.

Simboliskie nosaukumi ir etiķetes. Tos var norādīt, izmantojot operatorus (piemēram,

Direktīvas tabula.

Šajā tabulā ir uzskaitītas visas direktīvas vai pseidokomandas, kas rodas, sastādot programmu.

Darbības kodu tabula.

Katram darbības kodam tabulā ir atsevišķas kolonnas: operācijas koda apzīmējums, operands 1, operands 2, operācijas koda heksadecimālā vērtība, komandas garums un komandas veids (5.2.5. tabula). Operāciju kodi ir sadalīti grupās atkarībā no operandu skaita un veida. Komandas veids nosaka grupas numuru un nosaka procedūru, kas tiek izsaukta, lai apstrādātu visas šīs grupas komandas.

Otrā piespēle.

Otrās piespēles vārti- objekta programmas izveide un nepieciešamības gadījumā montāžas protokola izdruka; izvadīt informāciju, kas nepieciešama saitītājam, lai vienā izpildāmā failā saistītu procedūras, kas tika apkopotas dažādos laikos.

Otrajā piegājienā (tāpat kā pirmajā) rindas, kas satur paziņojumus, tiek lasītas un apstrādātas pa vienai. Sākotnējais operators un izvades operators, kas no tā iegūts heksadecimālā veidā objektu Kodu var izdrukāt vai ievietot buferī vēlākai drukāšanai. Pēc komandas adreses skaitītāja atiestatīšanas komanda tiek izsaukta nākamais paziņojums.

Avota programmā var būt kļūdas, piemēram:

dotais simbols nav definēts vai ir definēts vairāk nekā vienu reizi;

● opkods ir attēlots ar nederīgu nosaukumu (drukas kļūdas dēļ), tajā nav pietiekami daudz operandu vai ir pārāk daudz operandu;

● nav operatora

Daži montieri var atklāt nedefinētu simbolu un to aizstāt. Tomēr vairumā gadījumu, kad tiek parādīts kļūdas paziņojums, montētājs ekrānā parāda kļūdas ziņojumu un mēģina turpināt montāžas procesu.

Raksti, kas veltīti montāžas valodai.

Tēma 2.5 Procesora programmēšanas pamati

Palielinoties programmas garumam, kļūst arvien grūtāk atcerēties dažādu darbību kodus. Mnemonika sniedz zināmu palīdzību šajā ziņā.

Tiek izsaukta simboliskā komandu kodēšanas valoda montētājs.

Montāžas valoda ir valoda, kurā katrs izteikums atbilst tieši vienai mašīnas komandai.

Montāža ko sauc par programmas konvertēšanu no montāžas valodas, t.i., programmas sagatavošanu mašīnvalodā, simboliskos operāciju nosaukumus aizstājot ar mašīnkodiem, bet simboliskās adreses ar absolūtajiem vai relatīvajiem skaitļiem, kā arī bibliotēku programmu iekļaušanu un simbolisku instrukciju secību ģenerēšanu, norādot konkrētus parametrus. mikrokomandās. Šī programma parasti atrodas ROM vai ievadīts RAM no kāda ārējā datu nesēja.

Montāžas valodai ir vairākas iezīmes, kas to atšķir no augsta līmeņa valodām:

1. Šī ir savstarpēja atbilstība starp montāžas valodas paziņojumiem un mašīnas instrukcijām.

2. Montāžas valodas programmētājam ir piekļuve visiem objektiem un instrukcijām, kas atrodas mērķa mašīnā.

Izpratne par programmēšanas pamatiem mašīnorientētās valodās ir noderīga:



Labāka izpratne par datoru arhitektūru un kompetentāka datoru lietošana;

Izstrādāt racionālākas algoritmu struktūras lietišķo uzdevumu risināšanas programmām;

Iespēja skatīt un labot izpildāmās programmas ar paplašinājumu .exe un .com, kas kompilētas no jebkura augsta līmeņa valodām, avota programmu pazaudēšanas gadījumā (izsaucot norādītās programmas DEBUG programmu atkļūdotājs un dekompilējot to displeju montāžā valoda);

Programmu sastādīšana kritiskāko problēmu risināšanai (programma, kas rakstīta mašīnorientētā valodā, parasti ir efektīvāka - īsāka un ātrāka par 30-60 procentiem no programmām, kas iegūtas tulkošanas rezultātā no augsta līmeņa valodām)

Ieviest galvenajā programmā iekļautās procedūras atsevišķu fragmentu veidā, ja tās nevar realizēt ne lietotajā augsta līmeņa valodā, ne izmantojot OS servisa procedūras.

Programma montāžas valodā var darboties tikai vienā datoru saimē, savukārt programma, kas rakstīta augsta līmeņa valodā, var darboties dažādās iekārtās.

Montāžas valodas alfabēts sastāv no ASCII rakstzīmēm.

Skaitļi ir tikai veseli skaitļi. Tur ir:

Binārie skaitļi beidzas ar burtu B;

Decimālskaitļi, kas beidzas ar burtu D;

Heksadecimālie skaitļi beidzas ar burtu H.

RAM, reģistri, datu prezentācija

Noteiktai MP sērijai tiek izmantota individuāla programmēšanas valoda - montāžas valoda.

Montāžas valoda ieņem starpposmu starp mašīnkodiem un augsta līmeņa valodām. Programmēšana šajā valodā ir vienkāršāka. Programma montāžas valodā efektīvāk izmanto konkrētas mašīnas (precīzāk, MP) iespējas nekā programma augsta līmeņa valodā (kas programmētājam ir vienkāršāka nekā montētājam). Apskatīsim programmēšanas pamatprincipus mašīnorientētās valodās, izmantojot MP KR580VM80 montāžas valodas piemēru. Programmēšanai valodā tiek izmantota vispārīga metodoloģija. Īpaši tehniskie paņēmieni programmu ierakstīšanai ir saistīti ar mērķa MP arhitektūras un komandu sistēmas iezīmēm.

Programmatūras modelis mikroprocesoru sistēma, kuras pamatā ir MP KR580VM80

MPS programmatūras modelis saskaņā ar 1. attēlu

MP portu atmiņa

S Z A.C. P C

1. attēls

No programmētāja viedokļa MP KR580VM80 ir šādi programmā pieejamie reģistri.

A– 8 bitu akumulatoru reģistrs. Tas ir deputāta galvenais reģistrs. Jebkura darbība, kas tiek veikta ALU, ietver viena no apstrādājamajiem operandiem ievietošanu akumulatorā. Darbības rezultāts ALU parasti tiek saglabāts arī A.

B, C, D, E, H, L– 8 bitu vispārējas nozīmes reģistri (GPR). Iekšējā atmiņa MP. Paredzēts apstrādātas informācijas, kā arī operācijas rezultātu glabāšanai. Apstrādājot 16 bitu vārdus, reģistri veido pārus BC, DE, HL, un dubultreģistru sauc par pirmo burtu - B, D, H. Reģistru pārī augstākais ir pirmais reģistrs. Reģistriem H un L ir īpašs īpašums, ko izmanto gan datu glabāšanai, gan RAM šūnu 16 bitu adrešu glabāšanai.

FL– karogu reģistrs (zīmju reģistrs) 8 bitu reģistrs, kurā glabājas piecas MP aritmētisko un loģisko darbību veikšanas rezultāta zīmes. FL formāts atbilstoši attēlam

Bits C (CY - pārnēsāšana) - pārnēsāšana, iestatīta uz 1, ja, veicot aritmētiskās darbības, notika pārnešana no baita augstākās kārtas.

Bits P (paritāte) – paritāte, iestatīta uz 1, ja vieninieku skaits rezultāta bitos ir pāra.

Maiņstrāvas cipars ir papildu pārnesums, kas paredzēts, lai saglabātu pārneses vērtību no rezultāta zemās kārtas tetrades.

Bits Z (nulle) – iestatiet uz 1, ja darbības rezultāts ir 0.

Bits S (zīme) – ir iestatīts uz 1, ja rezultāts ir negatīvs, un uz 0, ja rezultāts ir pozitīvs.

SP– steka rādītājs, 16 bitu reģistrs, kas paredzēts, lai saglabātu tās atmiņas šūnas adresi, kurā tika ierakstīts pēdējais stekā ievietotais baits.

RS– programmu skaitītājs (programmu skaitītājs), 16 bitu reģistrs, kas paredzēts nākamās izpildāmās instrukcijas adreses glabāšanai. Programmu skaitītāja saturs tiek automātiski palielināts par 1 tūlīt pēc nākamā instrukcijas baita iegūšanas.

Sākotnējā atmiņas apgabalā adrese 0000Н – 07FF ir vadības programma un demonstrācijas programmas. Šī ir ROM apgabals.

0800 – 0AFF - adreses apgabals pētāmo programmu ierakstīšanai. (RAM).

0В00 – 0ВВ0 - adreses apgabals datu rakstīšanai. (RAM).

0ВВ0 – kaudzes sākuma adrese. (RAM).

Stacks ir īpaši organizēta RAM zona, kas paredzēta datu vai adrešu pagaidu glabāšanai. Pēdējais stekā ierakstītais cipars tiek parādīts pirmais. Steka rādītājs saglabā pēdējās steka šūnas adresi, kurā ir ierakstīta informācija. Kad tiek izsaukta apakšprogramma, galvenās programmas atgriešanās adrese tiek automātiski saglabāta kaudzē. Parasti katras apakšprogrammas sākumā visu tās izpildē iesaistīto reģistru saturs tiek saglabāts stekā, un apakšprogrammas beigās tie tiek atjaunoti no steka.

Asamblejas valodas datu formāts un komandu struktūra

MP KR580VM80 atmiņa ir 8 bitu vārdu masīvs, ko sauc par baitiem.Katram baitam ir sava 16 bitu adrese, kas nosaka tā pozīciju atmiņas šūnu secībā. MP var adresēt 65536 baitus atmiņas, kas var būt gan ROM, gan RAM.

Datu formāts

Dati tiek saglabāti atmiņā kā 8 bitu vārdi:

D7 D6 D5 D4 D3 D2 D1 D0

Vismaznozīmīgākais bits ir 0, bet visnozīmīgākais bits ir 7.

Komandu raksturo tās formāts, t.i., tai piešķirto bitu skaits, kas tiek sadalīti pa baitam noteiktos funkcionālajos laukos.

Komandu formāts

MP KR580VM80 komandām ir viena, divu vai trīs baitu formāts. Vairāku baitu komandas jāievieto blakus valodās. Komandas formāts ir atkarīgs no veicamās darbības specifikas.

Komandas pirmais baits satur operācijas kodu, kas rakstīts mnemoniskā formā.

Tas nosaka komandas formātu un darbības, kas MP jāveic ar datiem to izpildes laikā, un adresācijas metodi, kā arī var saturēt informāciju par datu atrašanās vietu.

Otrajā un trešajā baitā var būt dati, ar kuriem tiek veiktas darbības, vai adreses, kas norāda datu atrašanās vietu. Datus, uz kuriem tiek veiktas darbības, sauc par operandiem.

Viena baita komandas formāts saskaņā ar 2. attēlu

4. attēls

Montāžas valodas komandās darbības kodam ir saīsināta angļu vārdu rakstīšanas forma - mnemonisks apzīmējums. Mnemonika (no grieķu mnemonika — iegaumēšanas māksla) atvieglo komandu iegaumēšanu pēc to funkcionālā mērķa.

Pirms izpildes avota programma tiek pārtulkota, izmantojot tulkošanas programmu, ko sauc par assembler, koda kombināciju valodā - mašīnvaloda, tādā formā tā tiek ievietota MP atmiņā un pēc tam tiek izmantota, izpildot komandu.


Adresācijas metodes

Visiem operandu kodiem (ievadei un izvadei) kaut kur jāatrodas. Tos var atrast MP iekšējos reģistros (ērtākais un ātrs variants). Tās var atrasties iekšā sistēmas atmiņa(visizplatītākā iespēja). Visbeidzot, tās var atrasties I/O ierīcēs (retākais gadījums). Operandu atrašanās vietu nosaka instrukcijas kods. Pastāv dažādas metodes, ar kuru instrukcijas kods var noteikt, kur ņemt ievades operandu un kur novietot izvades operandu. Šīs metodes sauc par adresācijas metodēm.

MP KR580VM80 ir šādas adresācijas metodes:

Tiešs;

Reģistrēties;

Netiešs;

Sakrauts.

Tieša adresēšana pieņem, ka (ievades) operands atrodas atmiņā uzreiz pēc instrukcijas koda. Operands parasti ir konstante, kas kaut kur jānosūta, kaut kam jāpievieno utt. dati ir ietverti komandas otrajā vai otrajā un trešajā baitā, bet zemais datu baits atrodas komandas otrajā baitā, un augstais baits trešajā komandas baitā.

Taisni (aka absolūtā) adresēšana pieņem, ka operands (ievade vai izvade) atrodas atmiņā adresē, kuras kods atrodas programmas iekšienē uzreiz pēc instrukcijas koda. Izmanto trīs baitu komandās.

Reģistrēties adresēšana pieņem, ka operands (ievade vai izvade) atrodas MP iekšējā reģistrā. Izmanto viena baita komandās

Netiešs (netiešā) adresēšana pieņem, ka MP iekšējā reģistrā ir nevis pats operands, bet gan tā adrese atmiņā.

Kaudze adresēšana pieņem, ka komanda nesatur adresi. Atmiņas šūnu adresēšana, izmantojot 16 bitu SP reģistra saturu (steka rādītājs).

Komandu sistēma

MP komandu sistēma ir pilns saraksts ar elementārajām darbībām, kuras MP spēj veikt. Ar šīm komandām vadītais MP veic vienkāršas darbības, piemēram, elementāras aritmētiskās un loģiskās darbības, datu pārsūtīšanu, divu vērtību salīdzināšanu utt. MP KR580VM80 komandu skaits ir 78 (ņemot vērā modifikācijas 244).

Izšķir šādas komandu grupas:

Datu pārraide;

Aritmētika;

Prāta mežģis;

Pārlēkšanas komandas;

Ievades/izvades, vadības un kaudzes komandas.


Simboli un saīsinājumi, ko izmanto, aprakstot komandas un veidojot programmas

Simbols Samazinājums
ADDR 16 bitu adrese
DATI 8 bitu dati
DATI 16 16 bitu dati
OSTA 8 bitu I/O ierīces adrese
2. BAITS Komandas otrais baits
3. BAITS Trešais komandas baits
R, R1, R2 Viens no reģistriem: A, B, C, D, E, H, L
R.P. Viens no reģistru pāriem: B - norāda pāri BC; D - norāda DE pāri; H – norāda HL pāri
RH Pirmais pāra reģistrs
R.L. Otrais pāra reģistrs
Λ Loģiskā reizināšana
V Loģisks papildinājums
Papildinājums modulo two
M Atmiņas šūna, kuras adrese norāda reģistru pāra HL saturu, t.i., M = (HL)

1. Personālā datora arhitektūra………………………………………………………………………………5

    1.1. Reģistri.

    1.1.1. Vispārēji reģistri.

1.1.2. Segmentu reģistri

1.1.3. Karogu reģistrs

1.2. Atmiņas organizācija.

1.3. Datu prezentācija.

1.3.1. Datu veidi

1.3.2. Rakstzīmju un virkņu attēlojums

2. Programmas paziņojumi montāžas programmā ………………………………………

    1. Montāžas valodas komandas

2.2. Adresācijas režīmi un mašīnu instrukciju formāti

3. Pseidooperatori……………………………………………………….

3.1. Datu definīcijas direktīvas

3.2. Asamblera programmas struktūra

3.2.1. Programmas segmenti. pieņemt direktīvu

3.2.3. Vienkāršota segmentācijas direktīva

4. Programmas salikšana un sastādīšana …………………………….

5. Datu pārsūtīšanas komandas……………………………………………….

    5.1 Vispārīgas komandas

    5.2. Stack komandas

5.3 I/O komandas

5.4. Adrešu pārsūtīšanas komandas

5.5. Karodziņu pārsūtīšanas komandas

6. Aritmētiskās komandas……………………………………………….

    6.1. Aritmētiskās darbības ar bināriem veseliem skaitļiem

6.1.1. Saskaitīšana un atņemšana

6.1.2. Komandas palielināt un samazināt uztvērēju par vienu

6.2. Reizināšana un dalīšana

6.3 Zīmes maiņa

7. Loģiskās darbības……………………………………………….

8. Maiņas un cikliskās maiņas…………………………………………………………

9. Virknes darbības………………………………………………………….

10. Programmu loģika un organizācija………………………………………

10.1. Beznosacījumu lēcieni

10.2 Nosacīti lēcieni

10.4. Procedūras montāžas valodā

10.5 INT pārtraukumi

10.6 Sistēmas programmatūra

10.6.1.1 Tastatūras lasīšana.

10.6.1.2 Rakstzīmju parādīšana ekrānā

10.6.1.3 Programmu beigšana.

10.6.2.1 Displeja režīmu izvēle

11. Diska atmiņa………………………………………………………………..

11.2 Failu izplatīšanas tabula

11.3. Diska I/O darbības

11.3.1. Faila ierakstīšana diskā

11.3.1.1. ASCIIZ dati

11.3.1.2. Faila numurs

11.3.1.3 Diska faila izveide

11.3.2 Diska faila lasīšana

Ievads

Montāžas valoda ir mašīnvalodas simbolisks attēlojums. Visus procesus personālajā datorā (PC) zemākajā aparatūras līmenī vada tikai mašīnas valodas komandas (instrukcijas). Nav iespējams patiesi atrisināt ar aparatūru saistītas problēmas (vai pat, turklāt no aparatūras atkarīgas, piemēram, programmas ātruma palielināšanu), bez montētāja zināšanām.

Montētājs ir ērts komandu veids tieši datora komponentiem, un tam ir nepieciešamas zināšanas par integrālās shēmas, kas satur šos komponentus, proti, datora mikroprocesora, īpašībām un iespējām. Tādējādi montāžas valoda ir tieši saistīta ar datora iekšējo organizāciju. Un tā nav nejaušība, ka gandrīz visi augsta līmeņa valodu kompilatori atbalsta piekļuvi programmēšanas montāžas līmenim.

Profesionāla programmētāja apmācības elements noteikti ir montētāja studijas. Tas ir tāpēc, ka montāžas valodas programmēšanai ir nepieciešamas zināšanas par datoru arhitektūru, kas ļauj izveidot efektīvākas programmas citās valodās un apvienot tās ar montāžas valodas programmām.

Rokasgrāmatā ir aplūkota programmēšana montāžas valodā datoriem, kuru pamatā ir Intel mikroprocesori.

Šī apmācība ir adresēta visiem, kas interesējas par procesoru arhitektūru un programmēšanas pamatiem Assembly valodā, galvenokārt programmatūras produktu izstrādātājiem.

    PC arhitektūra.

Datora arhitektūra ir abstrakts datora attēlojums, kas atspoguļo tā strukturālo, shēmu un loģisko organizāciju.

Visiem mūsdienu datoriem ir dažas kopīgas un individuālas arhitektūras īpašības. Atsevišķi rekvizīti ir unikāli konkrētam datora modelim.

Datora arhitektūras jēdziens ietver:

    datora blokshēma;

    līdzekļi un metodes piekļuvei datora blokshēmas elementiem;

    reģistru komplekts un pieejamība;

    adresācijas organizācija un metodes;

    datora datu prezentācijas un formāta metode;

    datormašīnu instrukciju komplekts;

    mašīnu instrukciju formāti;

    pārtraukt apstrādi.

Galvenie datoru aparatūras elementi: sistēmas bloks, tastatūra, displeja ierīces, diskdziņi, drukas ierīces (printeris) un dažādas sakaru iekārtas. Sistēmas bloks sastāv no mātesplates, barošanas avota un paplašināšanas elementiem papildu kartēm. Sistēmas plate satur mikroprocesoru, lasāmatmiņu (ROM), RAM(RAM) un kopprocesors.

      Reģistri.

Mikroprocesora iekšpusē informācija ir ietverta 32 reģistru grupā (16 lietotāji, 16 sistēma), kas vienā vai otrā pakāpē ir pieejama programmētāja lietošanai. Tā kā rokasgrāmata ir veltīta mikroprocesora 8088-i486 programmēšanai, visloģiskāk ir sākt šo tēmu ar diskusiju par mikroprocesora iekšējiem reģistriem, kas ir pieejami lietotājam.

Lietotāju reģistrus programmētājs izmanto programmu rakstīšanai. Šajos reģistros ietilpst:

    astoņi 32 bitu reģistri (vispārēja lietojuma reģistri) EAX/AX/AH/AL, EBX/BX/BH/BL, ECX/CX/CH/CL, EDX/DX/DLH/DL, EBP/BP, ESI/SI, EDI/DI, ESP/SP;

    seši 16 bitu segmentu reģistri: CS, DS, SS, ES, FS, GS;

    statusa un kontroles reģistri: EFLAGS/FLAGS karodziņu reģistrs un EIP/IP komandu rādītāja reģistrs.

Viena 32 bitu reģistra daļas ir norādītas ar slīpsvītru. Prefikss E (paplašināts) norāda uz 32 bitu reģistra izmantošanu. Lai strādātu ar baitiem, tiek izmantoti reģistri ar prefiksiem L (low) un H (high), piemēram, AL, CH - apzīmē reģistru 16 bitu daļu zemos un augstākos baitus.

        Vispārējas nozīmes reģistri.

EAX/AX/AH/AL (akumulatoru reģistrs) — akumulators. Izmanto reizināšanai un dalīšanai, ievades/izvades operācijās un dažās virkņu operācijās.

EBX/BX/BH/BL — bāzes reģistrs(bāzes reģistrs), bieži izmanto, adresējot datus atmiņā.

ECX/CX/CH/CL – skaitītājs(skaitīšanas reģistrs), ko izmanto kā cilpas atkārtojumu skaita skaitītāju.

EDX/DX/DH/DL – datu reģistrs(datu reģistrs), izmanto starpposma datu glabāšanai. Dažās komandās tā izmantošana ir obligāta.

Visi šīs grupas reģistri ļauj piekļūt to “apakšējām” daļām. Pašadresācijai var izmantot tikai šo reģistru apakšējās 16 un 8 bitu daļas. Šo reģistru augšējie 16 biti nav pieejami kā neatkarīgi objekti.

Lai atbalstītu virkņu apstrādes komandas, kas ļauj secīgi apstrādāt elementu ķēdes, kuru garums ir 32, 16 vai 8 biti, tiek izmantotas šādas komandas:

ESI/SI (avota indeksu reģistrs) – rādītājs avots. Satur pašreizējā avota elementa adresi.

EDI/DI (mērķa indeksa reģistrs) – rādītājs uztvērējs(saņēmējs). Satur pašreizējo adresi mērķa rindā.

Mikroprocesoru arhitektūrā aparatūras un programmatūras līmenī tiek atbalstīta datu struktūra – steka. Ir īpašas instrukcijas un īpaši reģistri darbam ar skursteni. Jāņem vērā, ka kaudze tiek aizpildīta uz mazākām adresēm.

ESP/SP (steka rādītāja reģistrs) – reģistrēties rādītājs kaudze. Satur rādītāju uz stekas augšdaļu pašreizējā steka segmentā.

EBP/BP (bāzes rādītāja reģistrs) – steku bāzes rādītāju reģistrs. Izstrādāts, lai organizētu nejaušu piekļuvi datiem stekā.

1.1.2. Segmentu reģistri

Mikroprocesora programmatūras modelim ir seši segmentu reģistri: CS, SS, DS, ES, GS, FS. To pastāvēšana ir saistīta ar Intel mikroprocesoru specifisko RAM organizēšanu un izmantošanu. Mikroprocesora aparatūra atbalsta programmas strukturālo organizāciju, kas sastāv no segmentiem. Lai norādītu segmentus, kas ir pieejami Šis brīdis ir paredzēti segmentu reģistri. Mikroprocesors atbalsta šādus segmentu veidus:

    Koda segments. Satur programmas komandas. Lai piekļūtu šim segmentam, izmantojiet CS reģistru (koda segmentu reģistru) - segmentu kodu reģistrs. Tajā ir norādīta mašīnas instrukciju segmenta adrese, kurai mikroprocesors var piekļūt.

    Datu segments. Satur programmas apstrādātos datus. Lai piekļūtu šim segmentam, izmantojiet DS (datu segmentu reģistra) reģistru - segmentu datu reģistrs, kurā tiek saglabāta pašreizējās programmas datu segmenta adrese.

    Stack segments.Šis segments ir atmiņas apgabals, ko sauc par kaudzi. Mikroprocesors sakārto steku pēc principa - pirmais “iekšā”, pirmais “ārā”. Lai piekļūtu stekam, izmantojiet SS (steka segmentu reģistra) reģistru - kaudzes segmentu reģistrs, kas satur steka segmenta adresi.

    Papildu datu segments. Apstrādātos datus var izvietot trīs papildu datu segmentos. Pēc noklusējuma tiek pieņemts, ka dati atrodas datu segmentā. Izmantojot papildu datu segmentus, to adreses ir skaidri jānorāda, komandā izmantojot īpašus segmentu ignorēšanas prefiksus. Papildu datu segmentu adreses jāiekļauj ES, GS, FS reģistros (paplašinājumu datu segmentu reģistros).

        Kontroles un statusa reģistri

Mikroprocesors satur vairākus reģistrus, kas satur informāciju gan par paša mikroprocesora, gan programmas stāvokli, kuras komandas pašlaik tiek ielādētas konveijerā. Šis:

EIP/IP instrukciju rādītāju reģistrs;

    karogu reģistrs EFLAGS/FLAGS.

Izmantojot šos reģistrus, jūs varat iegūt informāciju par komandu izpildes rezultātiem un ietekmēt paša mikroprocesora stāvokli.

EIP/IP (instrukciju rādītāja reģistrs) – rādītājs komandas. EIP/IP reģistrs ir 32 bitu vai 16 bitu plats un satur nākamās izpildāmās instrukcijas nobīdi attiecībā pret CS segmenta reģistra saturu pašreizējā instrukciju segmentā. Šis reģistrs nav tieši pieejams, taču to var mainīt, izmantojot lēciena norādījumus.

KAROGI/KAROGI (karogu reģistrs) – reģistrēties karogi. Bitu izmērs 32/16 biti. Šī reģistra atsevišķiem bitiem ir noteikts funkcionāls mērķis, un tos sauc par karogiem. Karogs ir bits, kas iegūst vērtību 1 ("karoga komplekts"), ja ir izpildīts kāds nosacījums, un vērtību 0 ("karogs notīrīts"), pretējā gadījumā. Šī reģistra apakšējā daļa ir pilnībā līdzīga i8086 reģistram FLAGS.

1.1.3. Karogu reģistrs

Karogu reģistrs ir 32 bitu, un tā nosaukums ir EFLAGS (1. att.). Atsevišķiem reģistra bitiem ir noteikts funkcionāls mērķis, un tos sauc par karodziņiem. Katram no tiem tiek piešķirts konkrēts nosaukums (ZF, CF utt.). EFLAGS apakšējie 16 biti ir 16 bitu FLAGS karoga reģistrs, ko izmanto, izpildot programmas, kas rakstītas i086 un i286 mikroprocesoriem.

1. att. Karogu reģistrs

Dažus karogus parasti sauc par nosacījumu karodziņiem; tās automātiski mainās, kad komandas tiek izpildītas, un ieraksta noteiktas to rezultāta īpašības (piemēram, vai tas ir vienāds ar nulli). Citus karogus sauc par valsts karogiem; tie mainās no programmas un ietekmē turpmāko procesora uzvedību (piemēram, tie bloķē pārtraukumus).

Stāvokļa karodziņi:

CF (carry flag) - nēsāt karogu. Vērtību ņem 1, ja, pievienojot veselus skaitļus, parādījās pārnēsāšanas vienība, kas “neiekļāvās” bitu režģī, vai ja, atņemot neparakstītus skaitļus, pirmais no tiem bija mazāks par otro. Komandās Shift bits, kas atrodas ārpus bitu režģa, tiek ievadīts CF. CF ietver arī reizināšanas instrukcijas iezīmes.

OF (pārpildes karogs) - pārplūdes karogs. Iestatīt uz 1, ja, saskaitot vai atņemot veselus skaitļus ar zīmi, tiek iegūts rezultāts, kas pārsniedz pieļaujamo vērtību absolūtā vērtībā (mantisa pārplūda un “iekāpa” zīmes ciparā).

ZF (nulles karogs) - nulles karogs. Iestatiet uz 1, ja komandas rezultāts ir 0.

SF (Zīmes karogs) — karogs zīme. Iestatiet uz 1, ja darbība ar skaitļiem ar zīmēm rada negatīvu rezultātu.

PF (paritātes karogs) — karogs paritāte. Vienāds ar 1, ja nākamās komandas rezultāts satur pāra skaitu bināro vienību. Parasti tiek ņemts vērā tikai I/O operācijām.

AF (papildu pārnēsāšanas karogs) — papildu nēsāšanas karogs. Nosaka funkcijas, kas saistītas ar darbību veikšanu ar bināriem decimālskaitļiem.

Valsts karogi:

DF (virziena karogs) — virziena karogs. Iestata līniju skatīšanas virzienu rindu komandās: ja DF=0, līnijas tiek skatītas “uz priekšu” (no sākuma līdz beigām), kad DF=1 – pretējā virzienā.

IOPL (ievades/izvades privilēģiju līmenis) - I/O privilēģiju līmenis. Izmanto aizsargātā mikroprocesora darbības režīmā, lai kontrolētu piekļuvi I/O komandām atkarībā no uzdevuma privilēģijām.

NT (ligzdots uzdevums) — uzdevumu ligzdošanas karogs. Izmanto aizsargātā mikroprocesora darbības režīmā, lai reģistrētu faktu, ka viens uzdevums ir ligzdots citā.

Sistēmas karogs:

IF (pārtraukuma karodziņš) — pārtraukuma karogs. Ja IF=0, procesors pārstāj reaģēt uz ienākošajiem pārtraukumiem; ja IF=1, pārtraukumu bloķēšana tiek noņemta.

TF (slazdu karogs) — izsekošanas karogs. Ja TF=1, pēc katras komandas izpildes procesors veic pārtraukumu (numurēts ar 1), ko var izmantot, veicot programmas atkļūdošanu, lai to izsekotu.

RF (atsākšanas karogs) — atsākt karogs. Izmanto, apstrādājot pārtraukumus no atkļūdošanas reģistriem.

VM (virtuAL 8086 režīms) — virtuālais 8086 karogs. 1-procesors darbojas virtuālajā 8086 režīmā.0-procesors darbojas reālā vai aizsargātā režīmā.

AC (Alignment pārbaude) - izlīdzināšanas kontroles karogs. Izstrādāts, lai nodrošinātu izlīdzināšanas kontroli, piekļūstot atmiņai.

      Atmiņas organizācija.

Tiek izsaukta fiziskā atmiņa, kurai mikroprocesors var piekļūt RAM ( vai brīvpiekļuves atmiņa - RAM). RAM ir baitu ķēde, kurai ir sava unikālā adrese (tās numurs), ko sauc fiziskais. Fiziskās adreses vērtību diapazons ir no 0 līdz 4 GB. Atmiņas pārvaldības mehānisms ir pilnībā aparatūra.

Mikroprocesora aparatūra atbalsta vairākus RAM izmantošanas modeļus:

    segmentēts modelis. Šajā modelī programmu atmiņa ir sadalīta blakus esošajos atmiņas apgabalos (segmentos), un pati programma var piekļūt tikai tiem datiem, kas atrodas šajos segmentos;

    lapas modelis. Šajā gadījumā RAM tiek uzskatīta par bloku komplektu ar fiksētu izmēru 4 KB. Šī modeļa galvenais pielietojums ir saistīts ar organizāciju virtuālā atmiņa, kas ļauj programmām izmantot vairāk atmiņas nekā fiziskā atmiņa. Pentium mikroprocesoram iespējamās virtuālās atmiņas apjoms var sasniegt 4 TB.

Šo modeļu izmantošana un ieviešana ir atkarīga no mikroprocesora darbības režīma:

    Reālās adreses režīms (reālais režīms). Režīms ir līdzīgs i8086 procesora darbībai. Nepieciešams agrīniem procesoru modeļiem izstrādāto programmu darbībai.

    Aizsargāts režīms. Aizsargātais režīms ļauj veikt vairākus uzdevumus informācijas apstrāde, atmiņas aizsardzība, izmantojot četru līmeņu privilēģiju mehānismu un tā peidžeru organizāciju.

    Virtuālais 8086 režīms.Šajā režīmā kļūst iespējams palaist vairākas i8086 programmas. Šajā gadījumā var darboties reālā režīma programmas.

Segmentācija ir adresācijas mehānisms, kas nodrošina vairāku neatkarīgu adrešu telpu esamību. Segments ir neatkarīgs, ar aparatūru atbalstīts atmiņas bloks.

Katra programma parasti var sastāvēt no jebkura segmentu skaita, taču tai ir tieša piekļuve trim galvenajiem segmentiem: kodam, datiem un stekam, kā arī no viena līdz trim papildu datu segmentiem. Operētājsistēma ievieto programmu segmentus RAM noteiktās fiziskās adresēs un pēc tam ievieto šo adrešu vērtības attiecīgajos reģistros. Segmenta ietvaros programma piekļūst adresēm attiecībā pret segmenta sākumu lineāri, tas ir, sākot no adreses 0 un beidzot ar adresi, kas vienāda ar segmenta lielumu. Relatīvā adrese vai aizspriedums, ko mikroprocesors izmanto, lai piekļūtu datiem segmentā, sauc efektīvs.

Fiziskās adreses veidošana reālajā režīmā

Reālajā režīmā fiziskās adreses izmaiņu diapazons ir no 0 līdz 1 MB. Maksimālais segmenta izmērs ir 64 KB. Sazinoties ar konkrētu fizikālā adrese RAM nosaka segmenta sākuma adrese un nobīde segmentā. Segmenta sākuma adrese tiek ņemta no atbilstošā segmenta reģistra. Šajā gadījumā segmentu reģistrā ir tikai nozīmīgākie 16 segmenta sākuma fiziskās adreses biti. Trūkstošie četri 20 bitu adreses biti tiek iegūti, novirzot segmenta reģistra vērtību pa kreisi par 4 bitiem. Pārslēgšanas darbība tiek veikta aparatūrā. Iegūtā 20 bitu vērtība ir reālā fiziskā adrese, kas atbilst segmenta sākumam. Tas ir fiziskā adrese ir norādīts kā pāris “segments:offset”, kur “segments” ir pirmie 16 biti no atmiņas segmenta sākuma adreses, kuram pieder šūna, un “offset” ir šīs šūnas 16 bitu adrese, skaitot no šī atmiņas segmenta sākums (vērtība 16 * segments +nobīde dod šūnas absolūto adresi). Ja, piemēram, CS reģistrā tiek saglabāta vērtība 1234h, tad adrešu pāris 1234h:507h definē absolūto adresi, kas vienāda ar 16*1234h+507h =12340h+507h = 12847h. Šāds pāris tiek uzrakstīts kā dubultvārds un (tāpat kā skaitļiem) "apgrieztā" formā: pirmais vārds satur nobīdi, bet otrais - segmentu, un katrs no šiem vārdiem, savukārt, tiek parādīts "apgrieztā" forma. Piemēram, pāris 1234h:5678h būtu rakstīts šādi:| 78 | 56| 34 | 12|.

Šis fiziskās adreses ģenerēšanas mehānisms ļauj padarīt programmatūru pārvietojamu, tas ir, neatkarīgu no konkrētām ielādes adresēm RAM.

Programmēšana mašīnas instrukciju līmenī ir minimālais līmenis, kurā var rakstīt programmas. Mašīnas instrukciju sistēmai jābūt pietiekamai, lai veiktu nepieciešamās darbības, izdodot instrukcijas datora aparatūrai.

Katra mašīnas komanda sastāv no divām daļām:

  • operatīvais - nosaka “ko darīt”;
  • operands - apstrādes objektu definēšana, “ko darīt”.

Mikroprocesora mašīnas komanda, kas rakstīta montāžas valodā, ir viena rinda ar šādu sintaktisko formu:

komandas/direktīvas etiķete operands(-i) ;komentāri

Šajā gadījumā obligātais lauks rindā ir komanda vai direktīva.

Iezīme, komanda/direktīva un operandi (ja tādi ir) ir atdalīti ar vismaz vienu atstarpi vai tabulēšanas rakstzīmi.

Ja komanda vai direktīva jāturpina nākamajā rindā, tiek izmantota atpakaļvērstā slīpsvītra: \.

Pēc noklusējuma montāžas valoda neatšķir lielos un mazos burtus, rakstot komandas vai direktīvas.

Koda rindu piemēri:

Skaitīt db 1 ;Vārds, direktīva, viens operands
mov eax,0 ;Komanda, divi operandi
cbw ; Komanda

Tagi

Etiķete montāžas valodā var saturēt šādus simbolus:

  • visi latīņu alfabēta burti;
  • skaitļi no 0 līdz 9;
  • īpašās rakstzīmes: _, @, $, ?.

Punktu var izmantot kā etiķetes pirmo rakstzīmi, taču daži kompilatori neiesaka lietot šo rakstzīmi. Rezervētos Assembler nosaukumus (direktīvas, operatorus, komandu nosaukumus) nevar izmantot kā etiķetes.

Etiķetes pirmajai rakstzīmei ir jābūt burtam vai speciālajai rakstzīmei (bet ne ciparam). Maksimālais garums tagi – 31 rakstzīme. Visām etiķetēm, kas ir rakstītas uz rindas, kas nesatur montāžas direktīvu, jābeidzas ar kolu: .

Komandas

Komanda norāda tulkotājam, kāda darbība jāveic mikroprocesoram. Datu segmentā komanda (vai direktīva) definē lauku, darbvietu vai konstanti. Koda segmentā komanda norāda darbību, piemēram, pārvietošanu (mov) vai pievienošanu (pievienošanu).

direktīvas

Montētājam ir vairāki operatori, kas ļauj kontrolēt montāžas un iekļaušanas procesu. Šos operatorus sauc direktīvas . Tie darbojas tikai programmas montāžas procesā un atšķirībā no komandām neģenerē mašīnkodu.

Operandi

Operands – objekts, uz kura tiek izpildīta mašīnas komanda vai programmēšanas valodas paziņojums.
Instrukcijā var būt viens vai divi operandi vai vispār nav operandu. Operandu skaitu netieši norāda instrukcijas kods.
Piemēri:

  • Nav operandu ret ;Atgriezties
  • Viens operands inc ecx ;Palielināt ecx
  • Divi operandi pievieno eax,12 ;Pievieno 12 to eax

Etiķetei, komandai (direktīvai) un operandam nav jāsākas nevienā konkrētā pozīcijā rindā. Tomēr ieteicams tos rakstīt kolonnā, lai programma būtu vieglāk lasāma.

Operandi var būt

  • identifikatori;
  • rakstzīmju virknes vienpēdiņās vai dubultpēdiņās;
  • veseli skaitļi bināro, oktālo, decimālo vai heksadecimālo skaitļu sistēmā.
Identifikatori

Identifikatori – derīgu rakstzīmju secības, ko izmanto, lai apzīmētu programmas objektus, piemēram, darbības kodus, mainīgo nosaukumus un etiķešu nosaukumus.

Noteikumi par identifikatoru ierakstīšanu.

  • Identifikators var sastāvēt no vienas vai vairākām rakstzīmēm.
  • Kā simbolus varat izmantot latīņu alfabēta burtus, ciparus un dažas speciālās rakstzīmes: _, ?, $, @.
  • Identifikators nevar sākties ar cipara rakstzīmi.
  • Identifikatora garums var būt līdz 255 rakstzīmēm.
  • Tulkotājs pieņem pirmās 32 identifikatora rakstzīmes un ignorē pārējās.
komentāri

Komentāri ir atdalīti no izpildāmās rindas ar rakstzīmi; . Šajā gadījumā viss, kas rakstīts aiz semikola un līdz rindas beigām, ir komentārs. Komentāru izmantošana programmā uzlabo tās skaidrību, īpaši, ja komandu kopas mērķis ir neskaidrs. Komentārā var būt jebkuras drukājamas rakstzīmes, tostarp atstarpes. Komentārs var aptvert visu rindiņu vai sekot komandai tajā pašā rindā.

Montāžas programmas struktūra

Programma, kas rakstīta montāžas valodā, var sastāvēt no vairākām daļām, ko sauc moduļi . Katram modulim var būt definēti viens vai vairāki datu, kaudze un koda segmenti. Jebkurai pilnīgai montāžas programmai ir jāietver viens galvenais vai galvenais modulis, no kura sākas tās izpilde. Modulis var saturēt koda segmentus, datu segmentus un steka segmentus, kas deklarēti, izmantojot atbilstošas ​​direktīvas. Pirms segmentu deklarēšanas ir jānorāda atmiņas modelis, izmantojot .MODEL direktīvu.

Programmas “neko nedarīt” piemērs montāžas valodā:

686P
.MODEL FLAT, STDCALL
.DATI
.CODE
SĀKT:

RET
BEIGAS SĀKT

Šajā programmā ir tikai viena mikroprocesora komanda. Šī komanda ir RET. Tas nodrošina, ka programma tiek pareizi pārtraukta. Parasti šī komanda tiek izmantota, lai izietu no procedūras.
Pārējā programmas daļa attiecas uz tulka darbību.
.686P — Pentium 6 (Pentium II) aizsargātā režīma komandas ir atļautas. Šī direktīva atlasa atbalstīto montētāja instrukciju kopu, norādot procesora modeli. Direktīvas beigās norādītais burts P informē tulkotāju, ka procesors darbojas aizsargātā režīmā.
.MODEL FLAT, stdcall - plakanas atmiņas modelis. Šis atmiņas modelis tiek izmantots operāciju zālē Windows sistēma. stdcall
.DATA ir programmas segments, kas satur datus.
.CODE ir programmas bloks, kas satur kodu.
START - etiķete. Assembleerā tagiem ir liela loma, ko nevar teikt par mūsdienu augsta līmeņa valodām.
END START - programmas beigas un ziņojums tulkotājam, ka programmas izpildei jāsākas ar START etiķeti.
Katrā modulī ir jābūt END direktīvai, lai atzīmētu beigas avota kods programmas. Visas rindas, kas seko END direktīvai, tiek ignorētas. Ja izlaižat END direktīvu, tiek ģenerēta kļūda.
Apzīmējums, kas norādīts pēc direktīvas END, norāda tulkotājam galvenā moduļa nosaukumu, no kura sākas programmas izpilde. Ja programmā ir viens modulis, etiķeti pēc direktīvas END var izlaist.




Tops