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

Galvenā informācija par montāžas valodu

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

Tās galvenā priekšrocība ir tā, ka montāžas valodā visi programmas elementi tiek attēloti 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 tiek ieviesti, programmējot montāžas valodā, parasti atspoguļo programmas semantiku, bet komandu saīsinājumi - to galveno funkciju. Piemēram: PARAM - parametrs, TABLE - tabula, MASK - maska, ADD - saskaitīšana, SUB - atņemšana utt. n. Programmētājs šādus nosaukumus viegli atceras.

Programmēšanai montāžas valodā ir nepieciešami sarežģīti rīki nekā programmēšanai mašīnvalodā: nepieciešamas datorsistēmas, kuru pamatā ir mikrodatori vai datori ar komplektu perifērijas ierīces(burtciparu tastatūra, rakstzīmju displejs, disketes un printeris), 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, tas ir, atkarīgas no attiecīgā mikroprocesora mašīnas valodas un struktūras, jo katrai mikroprocesora instrukcijai tās piešķir īpašu simbolisku nosaukumu.

Montāžas valodas nodrošina ievērojamu programmētāju 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, kas darbojas vairāk nekā īsu laiku un aizņem mazāk atmiņas nekā programmas, kas rakstītas augsta līmeņa valodā.

Šajā sakarā gandrīz visas I / O ierīču vadības programmas (draiveri) 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šīnvalodas komandas mnemonika (simboliskais nosaukums);

standarta formāts asamblejā aprakstītās programmas rindiņām;

formāts precizēšanai dažādos veidos adresācijas un komandu iespējas;

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

pseido komandas, kas kontrolē programmas montāžas (tulkošanas) procesu.

Asamblejas valodā programma tiek rakstīta pēc rindas, tas ir, katrai instrukcijai 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, tomēr parasti vienam ir viens praktisks sadalījums - tā ir tā sauktā standarta montāžas valoda.

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

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

darbojas - nosaka "ko darīt";

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

Mikroprocesora mašīnas instrukcija, 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āts 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ā, tad tiek izmantota atpakaļvērstā slīpsvītra: \.

Pēc noklusējuma montāžas valoda komandās vai direktīvās neatšķir lielos un mazos burtus.

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

mov eax, summa ; eax = summa

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

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šā bāzes indeksa adresācija.

Netiešā pamata (reģistra) adresācija. Izmantojot šo adresēšanu, operanda efektīvā adrese var būt jebkurā no vispārēja mērķa reģistriem, izņemot sp / esp un bp / ebp (tie ir īpaši reģistri darbam ar steka segmentu). Sintaktiski instrukcijā šis adresācijas režīms tiek izteikts, ievietojot reģistra nosaukumu kvadrātiekavās.

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

Ievads.

Tiek izsaukta valoda, kurā ir uzrakstīta sākotnējā programma ievade valoda un valoda, kurā tā ir tulkota, lai izpildītu procesors - nedēļas nogale valodu. 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 tulkojumi: apkopošana un tulkošana.

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

Plkst interpretācijas katra avota programmas teksta rindiņa tiek parsēta (interpretēta) un uzreiz tiek izpildīta tajā norādītā komanda. Šīs metodes īstenošana ir saistīta ar tulku programma. Interpretācija aizņem ilgu laiku. Lai palielinātu tā efektivitāti, tulks tā vietā, lai apstrādātu katru rindiņu, provizoriski pārveido visu komandu 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.

Montētāja galvenās iezīmes:

● 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 simboliskie nosaukumi, kurus montētājs pārvērš bināros kodos;

katrs apgalvojums atbilst viena mašīnas komanda(kods), tas ir, pastāv savstarpēja atbilstība starp mašīnas instrukcijā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 bitu un augsta līmeņa valodu (piemēram,

) nav šīs iespējas. Ņemiet vērā, ka sistēmas 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 piemīt 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 montāžas valodas programmas rakstīšana un atkļūdošana aizņem daudz laika. Neskatoties uz to, montāžas valoda ir kļuvusi plaša izmantošanašādu apstākļu dēļ:

● Programma, kas rakstīta montāžas valodā, ir daudz mazāka un daudz ātrāka nekā programma, kas rakstīta augsta līmeņa valodā. Dažās lietojumprogrammās šiem indikatoriem ir galvenā loma, piemēram, daudzām sistēmas programmām (tostarp kompilatoriem), programmām kredītkartēs, mobilos tālruņus, ierīču draiveri utt.;

● nepieciešamas dažas procedūras pilna piekļuve uz aparatūru, kas parasti nav iespējams 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 reāllaika iegultās 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.

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

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

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

Šādi paziņojumi ir marķēti. Nosaukuma apzīmēšanai tiek izmantoti Xia (lielie) angļu alfabēta burti un cipari. Nosaukumam jāsākas ar burtu un jābeidzas ar kolu. 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. Resnās zarnas neesamības dēļ nav iespējams atšķirt etiķeti no operētājkoda, 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 vienādi nosaukumi, 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.

Darījuma koda lauks.

Šajā laukā ir komanda mnemoniska vai pseido-komanda (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ņā - mnemonikā

). Asamblejas valodās

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

Ja mnemonisko nosaukumu izvēle var būt patvaļīga, tad nepieciešamība izmantot divas mašīnas instrukcijas ir saistīta ar procesora arhitektūru

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

Operanda lauks.

Šeit atrodas Papildus informācija nepieciešams operācijas veikšanai. Pārlēkšanas instrukciju operandu laukā ir norādīta adrese, uz kuru vēlaties pārlēkt, kā arī adreses un reģistri, kas ir mašīnas instrukcijas operandi. Piemēram, šeit ir operandi, 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 (

var netikt ierakstīts). Ja heksadecimālā skaitļa pirmais cipars ir A, B, C,

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

● mikroprocesoru iekšējo 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, 10V - reģistra adrese

binārajā sistēmā);

● identifikatori,

reģistrētiem gaisa kuģu pāriem,

Pirmie burti B

H; 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ākamās instrukcijas nosacījumos

(kad 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 veidotas, saistot iepriekš apskatītos datus, izmantojot aritmētiskos un loģiskos operatorus. Ņemiet vērā, ka datu vietas rezervēšanas veids ir atkarīgs no valodas versijas. Asamblejas valodas izstrādātāji par

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

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

Valodas versijā

lietots

definēt konstanti).

Procesori apstrādā dažāda garuma operandus. Lai to definētu, montētāju izstrādātāji ir pieņēmuši 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

sufiksi tiek pievienoti katram opcode: 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ārdi 64 bitu reģistrā izmanto 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 personai. Tie var būt nepieciešami, lai pārveidotu programmu, kas bez šādiem komentāriem var būt pilnīgi nesaprotama pat pieredzējušiem programmētājiem. Komentārs sākas ar rakstzīmi un tiek izmantots, lai izskaidrotu un dokumentētu programmas. Komentāra sākuma rakstzīme var būt:

● semikolu (;) uzņēmuma apstrādātāju valodās

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

Pirms katras atsevišķas komentāra rindiņas ir sākuma rakstzīme.

Pseido komandas (direktīvas).

Montāžas valodā var izdalīt divus galvenos komandu veidus:

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

pseido komandas vai direktīvas, izstrādāts, lai apkalpotu programmas tulkošanas procesu kodu kombināciju valodā. Piemēram, tabulā. 5.2.2 parāda dažas pseido komandas no as-assembler

ģ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 vajadzīgo 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. Šādai izejai ir savi trūkumi: katru reizi ir jāizpilda īpašas procedūras izsaukšanas instrukcija un atgriešanas instrukcija, kas ar īsu un bieži lietotu secību var ievērojami samazināt programmas ātrumu.

Vienkāršākais un efektīva metode ir jāizmanto atkārtota komandu ķēdes atkārtošana makro, ko var uzskatīt par pseido-komandu, kas paredzēta, lai pārtulkotu programmā bieži sastopamo komandu grupu.

Makro jeb makro instrukciju raksturo trīs aspekti: makro definīcija, makro inversija un makro paplaš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 ir šāda struktūra:

Izteicienu saraksts; makro definīcija

Iepriekš minētajai makro definīcijas struktūrai ir trīs daļas:

● galvene

makro, kas satur nosaukumu

Pseidokamanda

un parametru kopums;

● punktēts ķermeni makro;

● komanda

izlaidums

makro definīcijas.

Makro parametru kopa satur visu parametru sarakstu, kas norādīti atlasītās instrukciju grupas operanda laukā. Ja šie parametri programmā ir norādīti agrāk, tad makro definīcijas galvenē tos var izlaist.

Atlasītās instrukciju grupas atkārtotai montāžai tiek izmantots izsaukums, kas sastāv no nosaukuma

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

Kad montētājs kompilācijas laikā sastopas ar makro definīciju, tas saglabā to makro definīciju tabulā. Ar turpmākām parādībām 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 tā aizstāšana ar makro pamattekstu - makro paplašināšana.

Ja programma tiek attēlota kā rakstzīmju virkne (burti, cipari, atstarpes, pieturzīmes un ratiņi atgriežas, lai pārietu uz jaunu rindu), tad makro izvēršana ir dažu virkņu aizstāšana no šīs secības ar citām virknēm.

Makro paplašināšana notiek montāžas procesā, nevis programmas izpildes laikā. Ir piešķirti veidi, kā manipulēt ar rakstzīmju virknēm makro rīki.

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ā avota 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;

● Otrajā piegājienā saņemtā programma tiek apstrādāta bez makro.

Makro ar parametriem.

Lai strādātu ar atkārtotām komandu secībām, kuru parametri var iegū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 parāda divas līdzīgas komandu secības, kas atšķiras ar to, ka pirmā no tām 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.

Apsveriet dažas papildu valodas funkcijas

Ja makro, kurā ir ietverta nosacījuma zara instrukcija un etiķete, uz kuru pāriet, tiek izsaukts divas vai vairākas reizes, etiķete tiks dublēta (iezīmes dublēšanas problēma), kas izraisīs kļūdu. Tāpēc katram zvanam kā parametrs tiek piešķirts (programmētājs) atsevišķa etiķete. Valodā

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

) un, pateicoties uzlabotajām funkcijā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, ja to apvieno ar nosacījumu programmu saistīšanu. Apsveriet

JA WORDSIZE GT 16 M2 MAKRO

Makro M2 var definēt abās paziņojuma daļās

Tomēr definīcija ir atkarīga no tā, vai programma tiek montēta 16 bitu vai 32 bitu procesorā. 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 bezgalīgas 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 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 zvanus.

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 kopēja tabula, kurā kopā ar makro nosaukumiem ir visas mašīnu komandas un direktīvas.

Sastopoties ar makro montāžas laikā 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ā 2. programmas piemēra (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 zvana paplašinājums.

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 aptur ievades datu nolasīš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 & parametru priekšā ļauj montētājam tos atpazīt.

Lai gan 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īts divu caurlaidu montētāja darbs.

Divu caurlaidu montētājs.

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

● tulkot to mašīnvalodā;

● pārsūtīt saņemto mašīnas kodu uz failu, bet atbilstošo saraksta daļu - uz citu failu;

● atkārtojiet iepriekš minētās darbības, līdz tiek pārraidīta visa programma.

Tomēr šī pieeja nav efektīva. Piemērs ir tā sauktā problēma vadošā saite. Ja pirmais priekšraksts ir lēciens uz P priekšrakstu programmas pašās beigās, tad montētājs nevar to iztulkot. Vispirms viņam jānosaka operatora P adrese, un šim nolūkam ir jāizlasa visa programma. Tiek izsaukta katra pilnīga sākotnējās programmas lasīšana fragments. Parādīsim, kā mēs varam atrisināt uz priekšu atsauces problēmu, izmantojot divas piespēles:

pirmajā piegājienā 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, bet otrajai oriģinālajai programmai ir nepieciešams papildu I/O laiks;

● pirmajā piegājienā, konvertēt programmu starpformā un saglabājiet to tabulā, un otrā piegājiena tiek veikta nevis pēc sākotnējās programmas, bet gan pēc tabulas. Šī montāžas metode ietaupa laiku, jo otrajā piegājienā netiek veiktas nekādas I/O darbības.

Pirmā piespēle.

Pirmās caurlaides mērķis- 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. Tāpēc gan rakstzīmju definīcija, gan makro izvēršana notiek vienā un tajā pašā laikā. 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 simboliskajiem nosaukumiem instrukcijas etiķetes laukā, montētājs būtībā nosaka adreses, kas katrai instrukcijai būs programmas izpildes laikā. Lai to izdarītu, montētājs montāžas procesa laikā ietaupa 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. Piemēram, tabulā. 5.2.3 parāda programmas fragmentu, kas norāda komandu garumu un skaitītāja vērtības. Tabulas tiek ģenerētas pirmajā piegājienā simbolu 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. Mēs uzreiz atzīmējam, ka mūsdienu procesoros ir instrukcijas ar tiešajām adresēm, tāpēc to montētāji neatbalsta burtus.

Simbolu tabula

satur vienu elementu katram nosaukumam (5.2.4. tabula). Katrs simbolu 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ārkartoš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,

Norādījumu tabula.

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

Darbības kodu tabula.

Katram operācijas kodam tabulā ir atsevišķas kolonnas: operācijas koda apzīmējums, operands 1, operands 2, operācijas koda heksadecimālā vērtība, instrukcijas garums un instrukcijas 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 mērķis- objekta programmas izveide un nepieciešamības gadījumā montāžas protokola izdruka; izvadīt informāciju, kas nepieciešama saitītājam, lai dažādos laikos saliktās procedūras saistītu vienā izpildāmā failā.

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

Sākotnējā programmā var būt kļūdas, piemēram:

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

● Opkods ir attēlots ar nederīgu nosaukumu (drukas kļūdas dēļ), nav nodrošināts ar pietiekami daudz operandu vai tajā 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 atklāts paziņojums ar kļūdu, 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 grūtāk atcerēties dažādu darbību kodus. Mnemonika sniedz zināmu palīdzību šajā ziņā.

Tiek saukta simbolisko instrukciju kodēšanas valoda montētājs.

montāžas valoda ir valoda, kurā katrs paziņojums atbilst tieši vienai mašīnas instrukcijai.

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. mikroinstrukcijās. Šī programma parasti ievieto ROM vai ievada RAM no kāda ārēja 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 komandā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 labāka datoru izmantoš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, ja tiek pazaudētas avota programmas (izsaucot šīs programmas uz DEBUG programmu atkļūdotāju un dekompilējot to displeju montāžas valodā );

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

Pamatprogrammā iekļauto procedūru kā atsevišķu fragmentu realizācijai gadījumā, ja tās nevar realizēt ne lietotajā augsta līmeņa valodā, ne izmantojot OS servisa procedūras.

Montāžas valodas programma var darboties tikai vienas saimes datoros, savukārt programma, kas rakstīta augsta līmeņa valodā, potenciāli 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. Atšķirt:

Bināri skaitļi, kas beidzas ar burtu B;

Decimālskaitļi, kas beidzas ar D;

Heksadecimālie skaitļi, kas beidzas ar burtu N.

RAM, reģistri, datu attēlošana

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. Asamblejas valodas programma izmanto konkrētas mašīnas (precīzāk, MP) iespējas racionālāk nekā programma augsta līmeņa valodā (kas programmētājam ir vieglāk nekā montētājam). Mēs apsvērsim programmēšanas pamatprincipus mašīnorientētās valodās, kā piemēru izmantojot MP KR580VM80 montāžas valodu. Programmēšanai valodā tiek izmantota vispārīga tehnika. Īpašas programmu ierakstīšanas metodes ir saistītas ar mērķa MP arhitektūru un komandu sistēmas iezīmēm.

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

MPS programmas modelis saskaņā ar 1. attēlu

MP portu atmiņa

S Z AC P C

1. attēls

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

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

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

FL– karogu reģistrs (iezīmju reģistrs) 8 bitu reģistrs, kas glabā MP aritmētisko un loģisko darbību izpildes rezultāta piecas pazī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, tiek iestatīts uz 1, ja vienību skaits rezultāta bitos ir pāra.

Maiņstrāvas bits ir papildu pārnesums, kas paredzēts, lai saglabātu pārneses vērtību no rezultāta apakšējās tetradas.

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

S (zīme) bits 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, ir paredzēts, lai saglabātu tās atmiņas vietas adresi, kurā tika ierakstīts pēdējais stekā ievadītais baits.

RS– programmu skaitītājs (programmu skaitītājs), 16 bitu reģistrs, paredzēts nākamās izpildāmās instrukcijas adreses glabāšanai. Programmas 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ā atrodas adrese 0000H - 07FF kontroles 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 ierakstīšanai. (RAM).

0BB0 ir steka sākuma adrese. (RAM).

Stack ir īpaši organizēta RAM zona, kas paredzēta datu vai adrešu pagaidu glabāšanai. Pēdējais numurs, kas nospiests uz kaudzītes, ir pirmais no kaudzes izmestais cipars. Steka rādītājs saglabā pēdējās steka atrašanās vietas adresi, kurā tiek glabā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ā stekā tiek saglabāts visu tās izpildē iesaistīto reģistru saturs, bet apakšprogrammas beigās tie tiek atjaunoti no steka.

Montāžas valodas datu formāts un komandu struktūra

Memory MP KR580VM80 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 uzrunāt 65536 baitus atmiņas, kurā 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 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. Daudzbaitu instrukcijas jāievieto blakus esošajos PL. 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 tās 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 jādarbojas, vai adreses, kas norāda datu atrašanās vietu. Datus, ar kuriem tiek veiktas darbības, sauc par operandiem.

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

4. attēls

Montāžas valodas instrukcijās opkodam 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 atbilstoši to funkcionālajam mērķim.

Pirms izpildes avota programma tiek pārtulkota, izmantojot tulkošanas programmu, ko sauc par assembler, koda kombināciju valodā - mašīnvaloda, šā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. Tie var būt MP iekšējos reģistros (ērtākie un ātrs variants). Tās var atrasties sistēmas atmiņā (visbiežāk sastopamā iespēja). Visbeidzot, tie var būt 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 likt izvades operandu. Šīs metodes sauc par adresācijas metodēm.

MP KR580VM80 ir šādas adresācijas metodes:

Tūlītēja;

Reģistrēties;

netiešs;

Kaudze.

Tūlītēja adresēšana pieņem, ka operands (ievade) atrodas atmiņā uzreiz pēc instrukcijas koda. Operaands 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ā, ar zemo datu baitu otrajā komandas baitā un augstajā datu baitā. 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špusē uzreiz pēc instrukcijas koda. Izmanto trīs baitu komandās.

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

Netiešs (netiešā) adresēšana pieņem, ka MP iekšējais reģistrs nav pats operands, bet gan tā adrese atmiņā.

Kaudze adresēšana pieņem, ka komanda nesatur adresi. Atmiņas vietu 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 (ieskaitot modifikācijas 244).

Ir šādas komandu grupas:

Datu pārraide;

Aritmētika;

Prāta mežģis;

Pārlēkšanas komandas;

Komandas ievadei-izejai, vadībai un darbam ar steku.


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

Simbols Samazinājums
ADDR 16 bitu adrese
DATI 8 bitu dati
DATI 16 16 bitu dati
PORTA 8 bitu I/O adrese (I/O ierīces)
2. BAITS Otrais komandas baits
3. BAITS Trešais komandas baits
R, R1, R2 Viens no reģistriem: A, B, C, D, E, H, L
RP Viens no reģistru pāriem: B - nosaka gaisa kuģu pāri; D - nosaka DE pāri; H — norāda HL pāri
RH Pirmais pāra reģistrs
RL Otrais pāra reģistrs
Λ Būla reizināšana
V Būla papildinājums
Modulo divi papildinājumi
M Atmiņas šūna, kuras adrese norāda HL reģistru pāra 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 attēlojums.

1.3.1. Datu veidi

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

2. Montāžas programmas paziņojumi ………………………………………

    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. Montāžas 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 sasaiste …………………………….

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

    5.1 Vispārīgas komandas

    5.2. Saglabāt komandas

5.3 I/O komandas

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

5.5. Karoga 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īmju maiņa

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

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

9. Virkņu 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 Pārtrauc INT

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 piešķiršanas tabula

11.3. Diska I/O

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). Bez montētāja zināšanām nav iespējams īsti atrisināt ar aparatūru saistītas problēmas (vai pat, turklāt ar aparatūru saistītas, piemēram, programmas ātruma uzlabošana).

Assembler ir ērta komandu forma tieši datora komponentiem, un tai ir nepieciešamas zināšanas par integrālās shēmas, kas satur šos komponentus, proti, datora mikroprocesoru, ī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 montētāja programmēšanas līmenim.

Profesionāla programmētāja sagatavošanas 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āmata attiecas uz programmēšanu montāžas valodā datoriem, kuru pamatā ir Intel mikroprocesori.

Šī apmācība ir adresēta visiem, kurus interesē procesora arhitektūra un programmēšanas pamati Assembly valodā, pirmkārt, programmatūras produkta 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šķas īpašības ir raksturīgas tikai 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žādi sakaru līdzekļi. Sistēmas bloks sastāv no pamatplates, barošanas avota un papildu paneļu paplašināšanas slotiem. Mātesplatē ir mikroprocesors, lasāmatmiņa (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 vairāk vai mazāk ir pieejami programmētājam. Tā kā rokasgrāmata ir veltīta mikroprocesora 8088-i486 programmēšanai, visloģiskāk ir sākt šo tēmu, apspriežot lietotājam pieejamos mikroprocesora iekšējos reģistrus.

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 tiek parādītas ar slīpsvītru. Prefikss E (paplašināts) apzīmē 32 bitu reģistra izmantošanu. Lai strādātu ar baitiem, tiek izmantoti reģistri ar prefiksiem L (zems) un H (augsts), piemēram, AL, CH - apzīmē reģistru 16 bitu daļu zemos un augstākos baitus.

        Vispārīgie reģistri.

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

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žām komandām tas ir nepieciešams.

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 virknes, 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 (attāluma indeksu reģistrs) - rādītājs uztvērējs(saņēmējs). Satur pašreizējo adresi mērķa virknē.

Mikroprocesora arhitektūra aparatūras un programmatūras līmenī atbalsta datu struktūru - steku. Lai strādātu ar steku, ir īpašas komandas un īpaši reģistri. Jāņem vērā, ka kaudze tiek aizpildīta uz mazākām adresēm.

ESP/SP (steka rādītāju 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āju 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 RAM organizācijas un izmantošanas specifiku. 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 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, tiek izmantots DS reģistrs (datu segmentu reģistrs) - 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 "nāca", pirmais "pa kreisi". Lai piekļūtu stekam, tiek izmantots SS reģistrs (steka segmentu reģistrs) - skursteņa segmentu reģistrs A, kas satur steka segmenta adresi.

    Papildu datu segments. Apstrādājamie dati var būt 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 pārdefinēšanas prefiksus. Papildu datu segmentu adreses jāiekļauj reģistros ES, GS, FS (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 instrukcijas pašlaik tiek ielādētas konveijerā. Šis:

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

    EFLAGS/FLAGS karogu reģistrs.

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āju reģistrs) — rādītājs komandas. EIP/IP reģistrs ir 32 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, bet tas tiek mainīts ar lēciena instrukcijām.

KAROGI/KAROGI (karogu reģistrs) — reģistrēties karogi. Bitu dziļums 32/16 biti. Šī reģistra atsevišķiem bitiem ir noteikts funkcionāls mērķis, un tos sauc par karogiem. Karogs ir bits, kas ir iestatīts uz 1 ("karogs ir iestatīts"), ja ir izpildīts kāds nosacījums, un 0 ("karogs ir notīrīts") pretējā gadījumā. Šī reģistra apakšējā daļa ir pilnīgi analoga i8086 reģistram FLAGS.

1.1.3. Karogu reģistrs

Karoga reģistrs ir 32 bitu un tam ir nosaukums 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 reģistrs, ko izmanto, izpildot programmas, kas rakstītas i086 un i286 mikroprocesoriem.

1. att. Karogu reģistrs

Dažus karogus sauc par nosacījumu karodziņiem; tās automātiski mainās, kad komandas tiek izpildītas, un nosaka 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 1 izmanto, ja, saskaitot veselus skaitļus, parādījās pārnēsāšanas vienība, kas "neiekļāvās" bitu režģī, vai arī, atņemot neparakstītus skaitļus, pirmais no tiem bija mazāks par otro. Pārslēgšanas komandās bits, kas ir ārpus tīkla, tiek ievadīts CF. CF arī nosaka reizināšanas instrukcijas iezīmes.

OF (pārpildes karogs) pārplūdes karogs. Tas tiek iestatīts uz 1, ja, saskaitot vai atņemot veselus skaitļus ar zīmi, tika iegūts rezultāts, modulis pārsniedzot pieļaujamo vērtību (mantisa pārplūda un tā "iekāpa" zīmes bitā).

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. Tas ir vienāds ar 1, ja nākamās komandas rezultāts satur pāra skaitu bināro vienību. Parasti tas tiek ņemts vērā tikai I / O darbību laikā.

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

Statusa karodziņi:

DF (virziena karogs) virziena karogs. Iestata rindu skenēšanas virzienu virkņu komandās: ar DF=0 rindas tiek skenētas "uz priekšu" (no sākuma līdz beigām), ar DF=1 - pretējā virzienā.

IOPL (ievades/izvades privilēģiju līmenis) - I/O privilēģiju līmenis. Izmanto mikroprocesora aizsargātajā 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 mikroprocesora aizsargātajā 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 pienākošiem pārtraukumiem, ar IF=1 pārtraukumu bloķēšana tiek noņemta.

TF (slazda karogs) izsekošanas karogs. Ar TF=1, pēc katras instrukcijas izpildes procesors veic pārtraukumu (ar numuru 1), ko var izmantot, veicot programmas atkļūdošanu, lai to izsekotu.

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

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

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

      Atmiņas organizācija.

Tiek izsaukta fiziskā atmiņa, kurai mikroprocesors var piekļūt darba atmiņa ( 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 diapazons ir no 0 līdz 4 GB. Atmiņas pārvaldības mehānisms ir pilnībā balstīts uz aparatūru.

Mikroprocesors atbalsta vairākus RAM izmantošanas modeļus aparatūrā:

    segmentēts modelis. Šajā modelī programmas 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ās atmiņas apjoms. Pentium mikroprocesoram iespējamās virtuālās atmiņas apjoms var būt līdz 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 paredzētu 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.

    Virtuālais 8086 režīms.Šajā režīmā kļūst iespējams palaist vairākas programmas i8086. Š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 vispārīgā gadījumā var sastāvēt no jebkura skaita segmentu, taču tai ir tieša piekļuve trim galvenajiem: kodam, datiem un stekam - un no viena līdz trim papildu datu segmentiem. Operētājsistēma ievieto programmas 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 ar adresi 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 diapazons ir no 0 līdz 1 MB. Maksimālais segmenta izmērs ir 64 KB. Atsaucoties uz 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 segmenta sākuma fiziskās adreses augšējie 16 biti. Trūkstošie četri apakšējie 20 bitu adreses biti tiek iegūti, nobīdot 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 faktiskā 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 "nobīde" ir šīs šūnas 16 bitu adrese, skaitot no šī atmiņas segmenta sākums (vērtība 16*segments +offset 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 rakstīts kā dubultvārds un (tāpat kā skaitļiem) "apgrieztā" formā: pirmais vārds satur nobīdi, bet otrais - segmentu, katrs no šiem vārdiem savukārt tiek attēlots "apgrieztā" formā. formā. Piemēram, pāris 1234h:5678h būtu rakstīts šādi:| 78 | 56| 34 | 12|.

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

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

Katra mašīnas instrukcija 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 instrukcija, kas rakstīta montāžas valodā, ir viena rinda ar šādu sintaktisko formu:

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

Šajā gadījumā obligāts 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ā, tad tiek izmantota atpakaļvērstā slīpsvītra: \.

Pēc noklusējuma montāžas valoda komandās vai direktīvās neatšķir lielos un mazos burtus.

Koda rindu piemēri:

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

Tagi

Etiķete montāžas valodā var būt šādas rakstzīmes:

  • 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 attur šo rakstzīmi. Rezervēto montāžas valodu 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 (nevis ciparam). Maksimālais garums etiķetes - 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ā instrukcija definē 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 saraksta salikšanas un ģenerēšanas procesu. Šos operatorus sauc direktīvas . Tie darbojas tikai programmas salikšanas procesā un atšķirībā no instrukcijām neģenerē mašīnkodus.

operandi

Operands – objekts, uz kura tiek izpildīta mašīnas komanda vai programmēšanas valodas operators.
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 ;Increment ecx
  • Divi operandi pievieno eax,12 ;Pievieno 12 to eax

Etiķetei, komandai (direktīvai) un operandam nav jāsākas nevienā noteiktā virknes pozīcijā. Tomēr ieteicams tos rakstīt kolonnā, lai nodrošinātu labāku programmas lasāmību.

Operandi var būt

  • identifikatori;
  • rakstzīmju virknes vienpēdiņās vai dubultpēdiņās;
  • veseli skaitļi binārā, oktālā, decimālā vai heksadecimālā veidā.
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.

Identifikatoru rakstīšanas noteikumi.

  • Identifikators var sastāvēt no vienas vai vairākām rakstzīmēm.
  • Kā rakstzīmes varat izmantot latīņu alfabēta burtus, ciparus un dažas īpašās rakstzīmes: _, ?, $, @.
  • Identifikators nevar sākties ar cipara rakstzīmi.
  • ID var būt līdz 255 rakstzīmēm garš.
  • 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 rakstzīmes un līdz rindas beigām, ir komentārs. Komentāru izmantošana programmā uzlabo tās skaidrību, īpaši, ja instrukciju 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 . Katrs modulis var definēt vienu vai vairākus datu, steku un koda segmentus. Jebkurai pilnīgai montāžas valodas programmai ir jāietver viens galvenais vai galvenais modulis, no kura sākas tās izpilde. Modulis var saturēt kodu, datus un steka segmentus, kas deklarēti ar atbilstošām direktīvām. Pirms segmentu deklarēšanas ir jānorāda atmiņas modelis, izmantojot .MODEL direktīvu.

Programmas "neko nedarīšanas" piemērs montāžas valodā:

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

RET
BEIGAS SĀKT

Šajā programmā ir tikai viena mikroprocesora instrukcija. Šī komanda ir RET. Tas nodrošina pareizu programmas pārtraukšanu. Parasti šī komanda tiek izmantota, lai izietu no procedūras.
Pārējā programmas daļa ir saistīta ar 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. Burts P direktīvas beigās norāda tulkotājam, ka procesors darbojas aizsargātā režīmā.
.MODEL FLAT, stdcall ir 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 ir etiķete. Assembleerā liela loma ir etiķetēm, ko nevar teikt par mūsdienu augsta līmeņa valodām.
END START - programmas beigas un ziņojums tulkotājam, ka programma jāsāk no etiķetes START .
Katrā modulī ir jābūt END direktīvai, kas iezīmē beigas avota kods programmas. Visas rindas, kas seko END direktīvai, tiek ignorētas. Izlaižot END direktīvu, rodas kļūda.
Etiķete pēc direktīvas END norāda kompilatoram 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