Kontakty

Assemblerove príkazy. Základné informácie o jazyku assembler. Program discipliny "Systémový programový program v jazyku Assembler

Národná univerzita Uzbekistanu pomenovaná po Mirzo Ulugbek

Fakulta výpočtovej techniky

Na tému: Sémantická analýza súboru EXE.

Vykonané:

Taškent 2003.

Predslov.

Assembler Language and Tímová štruktúra.

Štruktúra exe -file (sémantická analýza).

Štruktúra súboru COM.

Princíp činností a šírenia vírusu.

Disassembler.

Programy.

Predslov

Profesia programátora je úžasná a jedinečná. V súčasnosti nemôžu byť veda a život odoslaný bez najnovšej technológie. Všetko, čo je spojené s ľudskou aktivitou, nerobí bez výpočtovej technológie. A to prispieva k jeho vysokému rozvoju a dokonalosti. Nechajte rozvoj osobných počítačov začne nie tak dávno, ale počas tohto času boli kolosálne kroky na softvérových produktoch a na dlhú dobu budú tieto produkty široko používané. Oblasť spojená s vedomosťami počítačov prešla výbuchom, ako aj zodpovedajúcu technológiu. Ak si neberiete obchodnú stranu, potom môžeme povedať, že v tejto oblasti profesionálnej činnosti neexistujú žiadne odborné aktivity. Mnohí z nich vyvíjajú programy, ktoré nie sú v záujme prospechu alebo príjmov, ale podľa vlastnej vôle, vášňou. Samozrejme, že by to nemalo mať vplyv na kvalitu programu, a v tejto veci, tak hovoriť "podnikania" existuje súťaž a dopyt po kvalite realizácie, v stabilnej práci a spĺňa všetky požiadavky modernosti. Tu stojí aj za zmienku vzhľad mikroprocesorov v 60. rokoch, ktoré prišli nahradiť veľký počet svietidiel. Existujú určité odrody mikroprocesorov, ktoré sú veľmi odlišné od seba. Tieto mikroprocesory sa od seba líšia z tímov vypúšťania a vstavaných systémov. Najbežnejšie ako: Intel, IBM, Celeron, AMD atď. Všetky tieto spracovatelia súvisia s rozvinutou architektúrou procesorov Intel. Šírka mikropočítačov bolo dôvodom na revíziu postoja k jazyku assembler pre dva hlavné dôvody. Po prvé, programy napísané v jazyku assembler vyžadujú výrazne menšiu mieru pamäte a času vykonávania. Po druhé, znalosti jazyka assembler a výsledného strojového kódu dáva pochopenie architektúry stroja, čo je nepravdepodobné, že by sa poskytli pri práci v jazyku na vysokej úrovni. Hoci väčšina špecialistov softvéru sa vyvíja v jazykoch na vysokej úrovni, ako je Pascal, C alebo Delphi, ktorý je jednoduchšie pri písaní programov, najsilnejší a efektívny softvér je plne alebo čiastočne napísaný v jazyku assembler. Jazyky na vysokej úrovni boli navrhnuté tak, aby sa zabránilo špeciálnym technickým charakterom špecifických počítačov. A assembler jazyk je naopak navrhnutý pre špecifické špecifiká procesorov. V dôsledku toho, aby ste napísali program v jazyku assembler pre konkrétny počítač, mali by ste poznať svoju architektúru. V súčasnosti je typ hlavného softvéru exe súbor. Vzhľadom na pozitívne aspekty toho môže byť autorom programu istí vo svojej bezúhonnosti. Ale často to nie je tak. Tam je tiež demontáž. S pomocou demontáže môžete naučiť prerušenia a programové kódy. Osoba, ktorá sa demontovala v Assembler, nebude ťažké remate celý program na ich vkus. Možno preto najviac nevyriešený problém - vírus. Prečo ľudia píšu vírus? Niektorí sa opýtajú túto otázku prekvapením, niektorí s nahnevane, ale aj ľudia naďalej existujú, ktorí majú záujem o túto úlohu, nie z hľadiska spôsobovania nejakej ujmy, ale ako úroky na systémové programovanie. Blízko zápisu z rôznych dôvodov. Jedným z systémových výziev, iní zlepšujú svoje vedomosti v Assembler. Budem sa snažiť o to všetko v mojom kurze. Povedala tiež nielen o štruktúre EXE súboru, ale aj o jazyku assembler.

^ Assembler Language.

Je zaujímavé sledovať, počnúc časom vzhľadu prvých počítačov a končiac s dnešným dňom, na transformáciu myšlienok o jazyku assembler od programátorov.

Akonáhle bol assembler jazyk, bez vedomia, o ktorej nebolo možné, aby počítač urobil niečo užitočné. Postupne sa situácia zmenila. Zdá sa, že pohodlnejší prostriedok komunikácie s počítačom. Ale, na rozdiel od iných jazykov, Assembler nezomrel, takže to nemohol urobiť v zásade. Prečo? Pri hľadaní odpovede sa pokúsime pochopiť, aký jazyk assembler je všeobecne.

Ak je skratka, jazyk assembler je symbolickým prezentáciou zariadenia stroja. Všetky procesy v stroji na najnižšej úrovni hardvéru sú poháňané iba príkazmi (pokyny) jazyka stroja. Je jasné, že aj napriek všeobecnému menu jazyka assembler pre každý typ počítača. Týka sa to vzhľadu programov napísaných v assembler a myšlienkach, ktorého je tento jazyk.

Ak chcete skutočne vyriešiť problémy spojené so zariadením (alebo dokonca, okrem toho, v závislosti od zariadenia, ako napríklad zlepšenie rýchlosti programu), nie je možné bez vedomia o Assembler.

Programátor alebo ktorýkoľvek iný užívateľ môže použiť akékoľvek nástroje na vysokej úrovni, až do programov pre stavebné virtuálne svety a možno nie sú ani podozrenie, že počítač skutočne nevykonáva jazykové príkazy, na ktorých je jeho program napísaný, a ich transformovaná prezentácia Vo forme nudných a smutných komunikačných sekvencií úplne iného jazyka - stroj. A teraz si predstavíme, že takýto užívateľ má neštandardný problém alebo jednoducho niečo nedržal. Napríklad, jeho program by mal pracovať s niektorými neobvyklými zariadeniami alebo vykonávať iné akcie, ktoré si vyžadujú znalosti o princípoch počítačového vybavenia. Bez ohľadu na to, ako šikovný je programátor, bez ohľadu na to, ako dobrý jazyk, v ktorom napísal svoj nádherný program, bez toho, aby som poznal assembler, nemohol urobiť. A nie je náhodou, že takmer všetci kompilátory jazykov na vysokej úrovni obsahujú komunikáciu o ich moduloch s modulmi na assembler alebo podporujú prístup k úrovni programovania Assembler.

Samozrejme, že čas počítača univerzálny už prešiel. Ako hovoria, že je nemožné tvrdiť obrovské. Ale je tu niečo spoločné, druh základy, na ktorom je postavená akákoľvek vážna počítačová výchova. Tieto znalosti o princípoch počítača, jeho architektúry a jazyka assembler ako odrazu a uskutočnenia týchto poznatkov.

Typický moderný počítač (na základe I486 alebo Pentium) pozostáva z nasledujúcich komponentov (obr. 1).

Obr. 1. Počítačové a periférne zariadenia

Obr. 2. Štrukturálna schéma osobného počítača

Z obrázku (obr. 1) je možné vidieť, že počítač sa skladá z niekoľkých fyzických zariadení, z ktorých každý je pripojený k jednému bloku nazývanému systému. Ak sa logicky hádajte, je zrejmé, že zohráva úlohu určitého koordinačného zariadenia. Pozrime sa do systémovej jednotky (nemusíte sa pokúsiť preniknúť do monitora - nie je nič zaujímavé, okrem toho je nebezpečné): Otvorte prípad a vidieť niektoré dosky, bloky, spojovacie vodiče. Ak chcete pochopiť ich funkčný účel, pozrime sa na štrukturálnu schému typického počítača (obr. 2). Netvrdí bezpodmienečnú presnosť a má za cieľ ukázať účel, vzťah a typické zloženie prvkov moderného osobného počítača.

Poďme diskutovať o schéme na obr. 2 v niekoľkých nekonvenčný štýl.
Je to typické, stretnutie s niečím novým, pozrite sa na niektoré združenia, ktoré mu môžu pomôcť poznať neznámy. Aké združenia je počítač? Mám napríklad počítač často spojený s osobou sám. Prečo?

Muž vytvárajúci počítač niekde v hlbinách seba myslel, že by vytvoril niečo ako sám. Počítač má vnímanie informácií z vonkajšieho sveta - je klávesnica, myš, pamäťové zariadenia na magnetických diskoch. Na obr. 2 Tieto orgány sú umiestnené vpravo od systémových pneumatík. Počítač má "tráviacich" orgánov, ktoré sú prijaté informácie centrálny procesor a RAM. A konečne, počítač má rečové orgány, ktoré vypiali výsledky spracovania. Toto sú tiež niektoré zariadenia vpravo.

Moderné počítače, samozrejme, ďaleko na osobu. Môžu byť porovnané s tvormi interakciou s vonkajším svetom na úrovni veľkej, ale obmedzenej sady bezpodmienečných reflexov.
Táto sada reflexov vytvára systém príkazov stroja. Na akejkoľvek vysokej úrovni nekomunikujete s počítačom, nakoniec všetko prichádza na nudnú a monotónnu sekvenciu príkazov stroja.
Každý strojový tím je druh dráždivého, aby ste mohli vzrušujúci jeden alebo iný bezpodmienečný reflex. Reakcia na tento stimul je vždy jednoznačná a "šitá" v bloku mikrokomandu vo forme firmvéru. Tento firmvér implementuje akcie na implementáciu príkazu stroja, ale už na úrovni signálu predložená určitým logickým obvodom počítača, čím sa riadia rôzne počítačové podsystémy. Toto je tzv. Princíp riadenia firmvéru.

Pokračovanie v analógii s osobou, poznamenávame sa, že na to, aby počítač mohol jesť správne, mnohé operačné systémy sú vynájdené, kompilátory stoviek programovacích jazykov atď. Ale všetky z nich sú v skutočnosti len jedlo, na ktorom potravinách (Programy) je dodané jednoznačným pravidlami žalúdka (počítač). Iba žalúdok počítača miluje diétne, monotónne jedlo - dať mu informácie štruktúrované, vo forme prísne organizovaných sekvencií nuly a jednotiek, ktorých kombinácie a tvoria jazyk stroja.

Externe, ako je polyglot, počítač chápe len jeden jazyk - jazyk príkazov stroja. Samozrejme, komunikovať a pracovať s počítačom, nie je potrebné poznať tento jazyk, ale takmer každý profesionálny programátor skôr alebo neskôr čelí potrebe študovať. Našťastie, programátor sa nemusí pokúsiť pochopiť hodnotu rôznych kombinácií binárnych čísel, pretože v 50-tych rokoch sa programátori začali používať symbolický analógový jazyk stroja pre programovanie, ktorý bol nazývaný assembler jazyk. Tento jazyk presne odráža všetky funkcie jazyka motora. To je dôvod, prečo, na rozdiel od jazykov na vysokej úrovni, jazyk assembler pre každý typ počítača je váš.

Zo všetkých vyššie uvedených, môžeme dospieť k záveru, že od jazyka assembler pre počítač "Native", potom najefektívnejší program môže byť napísaný len na to (za predpokladu, že píše kvalifikovaný programátor). Je to jedno malé "ale": je veľmi pracné, čo si vyžaduje veľkú pozornosť a praktické skúsenosti v procese. Preto je v hlavnom programe napísaný v hlavnom programe, ktorý by mal zabezpečiť efektívnu prácu s hardvérom. Niekedy je assembler napísaný časom vykonania alebo výdavkov. Následne sú vypracované vo forme podprogramov a sú kombinované s kódom v jazyku na vysokej úrovni.

Ak chcete študovať jazyk assembler akéhokoľvek počítača, je zmysel začať až po zistení, ktorá časť počítača je viditeľná a prístupná pre programovanie v tomto jazyku. Ide o tzv

Tieto registre môžu byť rozdelené do dvoch veľkých skupín:

^ 16 registre používateľov;

16 Systémové registre.

V programoch v jazyku Assembler sa registri používajú veľmi intenzívne. Väčšina registrov má určitý funkčný účel.

Ako nasleduje názov, užívateľské registre sa nazývajú, pretože programátor ich môže používať pri písaní svojich programov. Tieto registre zahŕňajú (obr. 3):

Osem 32-bitových registrov, ktoré môžu byť použité programátormi na ukladanie dát a adries (nazývajú sa aj na všeobecné registry (RON)):

Šesť segmentových registrov: CS, DS, SS, ES, FS, GS;

registre status a manažmentu:

Vlajka EFLAGS / vlajky register;

Register ukazovateľa EIP / IP Ukazovateľ.

Obr. 3. Používateľské registre mikroprocesorov I486 a Pentium

Prečo sú mnohé z týchto registrov zobrazené s naklonenou separačnou funkciou? Nie, tieto nie sú rôzne registre sú časti jedného veľkého 32-bitového registra. Môžu byť použité v programe ako jednotlivé objekty. To sa robí na zabezpečenie výkonu programov napísaných pre mladšie 16-bitové modely mikroprocesorov Intel, počnúc I8086. I486 a Pentium mikroprocesory majú väčšinou 32-bitové registre. Ich počet, s výnimkou segmentových registrov, rovnako ako v I8086, ale rozmer je väčší, čo sa odráža v ich označení - majú
prefix E (rozšírené).

^ Všeobecné registre
Všetky registre tejto skupiny vám umožňujú kontaktovať našu "mladšie" časti (pozri obr. 3). Vzhľadom na túto výkresu si uvedomte, že je možné použiť na seba-adresovanie len mladších 16 a 8-bitových častí týchto registrov. Staršie 16 bitov týchto registrov ako nezávislé objekty nie sú k dispozícii. Toto sa vykonáva, ako sme uviedli vyššie, pre kompatibilitu s mladšími 16-bitovými modelmi mikroprocesorov Intel.

Uvádzame registre patriace do skupiny zaregistrovateľa univerzity. Keďže tieto registre sú fyzicky umiestnené v mikroprocesore vnútri aritmetického a logického zariadenia (allu), nazývajú sa aj registry ALLU:

eAX / AX / AH / AL (Akumulátorový register) - Batéria.
Používa sa na ukladanie medziproduktov. V niektorých tímoch sa vyžaduje použitie tohto registra;

eBX / BX / BH / BL (Základný register) - Základný register.
Používa sa na uloženie základnej adresy niektorého objektu v pamäti;

eCX / CX / CH / CL (COUNTRY REGISTER) je registerový meter.
Používané vo príkazoch, ktoré produkujú niektoré opakovateľné akcie. Jeho použitie je často implicitne a skryté v algoritme príslušného tímu.
Napríklad organizácia cyklov slučky, okrem vysielania riadenia príkazu, ktorá sa nachádza na určitej adrese, analyzuje a znižuje hodnotu registra ECX / CX;

eDX / DX / DH / DL (dátový register) - Dátový register.
Rovnako ako register EAX / AX / AH / AL, ukladá medziľahlé údaje. V niektorých tímoch je jeho použitie povinné; Pre niektoré príkazy je to implicitne.

Nasledujúce dva registre sa používajú na podporu takzvaných reťazových operácií, to znamená, že operácie produkujúce sekvenčné spracovanie reťazcov prvkov, z ktorých každý môže mať dĺžku 32, 16 alebo 8 bitov:

eSI / SI (Register zdrojového indexu) - zdrojový index.
Tento register v reťazciách obsahuje aktuálnu adresu prvku v zdrojovom reťazci;

eDI / DI (Register cieľového indexu) - Index prijímača (príjemca).
Tento register v operáciách reťazca obsahuje aktuálnu adresu v reťazci prijímača.

V architektúre mikroprocesora je takáto dátová štruktúra podporovaná na úrovni softvéru a hardvéru ako stoh. Ak chcete pracovať s stohom v systéme príkazového systému mikroprocesora, existujú špeciálne príkazy av mikroprocesorovom softvérovom modeli sú špeciálne registre:

eSP / SP (Stack Ukazovateľ register) - Ukazovateľ zásobníka.
Obsahuje stohový vrchol v segmente prúdu.

eBP / BP (REGISTRÁCIA BASE UPOZORNENIE) - REGISTRÁCIA POTRUBNÉHO POTRUČNOSTI.
Navrhnuté na organizovanie ľubovoľného prístupu k údajom vo vnútri zásobníka.

Stack sa nazýva programová oblasť pre dočasné uskladnenie ľubovoľných údajov. Samozrejme, že údaje môžu byť tiež uložené v dátovom segmente, ale v tomto prípade je potrebné spustiť samostatnú pomenovanú pamäťovú bunku počas tohto času, čo zvyšuje veľkosť programu a počet použitých mien. Pohodlie zásobníka je, že jeho oblasť sa používa opakovane a šetrí ich odtiaľ pomocou efektívnych príkazov stlačenia a pop bez zadania všetkých mien.
Stack je tradične používaný napríklad na uloženie obsahu registrov používaných programom, pred volaním podprogramu, ktorý zase použije registre procesora "na svoje osobné účely". Počiatočný obsah registrov sa premieta z zásobníka po návrate z podprogramu. Ďalším spoločným recepciou je prenos podprogramu parametrov požadovaných cez stoh. Podprogram, pozná sa, v akom poradí sa umiestni na stoh parametrov, môžete ich vybrať odtiaľ a používať pri vykonávaní. Charakteristickým znakom zásobníka je zvláštny poradie vzorky údajov obsiahnutých v ňom: len horný prvok je v stohu k dispozícii kedykoľvek, t.j. Prvok naložený do stohu. Vykladanie z stohu horného prvku je k dispozícii nasledujúci prvok. Prvky stohu sa nachádzajú v pamäťovej oblasti pridelenej pod stohu, počnúc spodnou časťou zásobníka (t.j. z jeho maximálnej adresy) na dôsledne klesajúcich adries. Adresa horného, \u200b\u200bdostupného prvku je uložená v registri indikátora SP). Podobne ako akúkoľvek inú oblasť pamäte programu, musí zásobník zadať nejaký segment alebo vytvoriť samostatný segment. V každom prípade je adresa segmentu tohto segmentu umiestnená v registrácii segmentu SS zásobníka. Pai registrov SS: SP opisujú adresu cenovo dostupnej stohové bunky: adresa segmentu zásobníka je uložená v SS a v SP - posunutie týchto uložených v stohu (obr. 4, A ). Upozorňujeme, že v počiatočnom stave ukazovateľ SP STACKU označuje bunku pod spodnou časťou zásobníka a nie je zahrnutý do nej.

Obrázok 4. Organizácia Stack: A - Počiatočný stav, B - Po načítaní jedného prvku (v tomto príklade - obsah registra AH), po načítaní druhého prvku (obsah registra DS), G - Po vyložení Jeden prvok, D - po vyložení dvoch prvkov a návrat do pôvodného stavu.

Vkladanie zásobníka sa vykonáva špeciálnym príkazom na prácu s Push Stack (Push). Tento príkaz najprv znižuje obsah ukazovateľa zásobníka na 2 a potom umiestni operandu na adresu v SP. Ak napríklad chceme dočasne uložiť obsah registra AH na zásobní, musíte vykonať príkaz

Zásobník ide do stavu znázorneného na obr. 1.10, b. Je možné vidieť, že ukazovateľ zásobníka sa posunie na dve bajty hore (smerom k menším adresám) a táto adresa zaznamenáva príkaz operandu. Nasledujúci príkaz na prevzatie na stoh, napríklad,

bude stoh v stave zobrazenej na obr. 1.10, c. Stoh teraz uchováva dva prvky a iba horná bude cenovo dostupná, ktorá označuje ukazovateľ SP STUCK. Ak po nejakom čase sme potrebovali obnoviť pôvodný obsah uložený v hromadei registrov, musíme vykonať príkazy vyloženia z pop zásobníka (stlačenie):

pop ds.
pop sekera.

Akú veľkosť by mala byť stoh? Záleží na tom, ako intenzívne sa používa v programe. Ak sa napríklad plánuje skladovať rad 10 000 bajtov v zásobníku, potom by mal byť stoh nižší ako táto veľkosť. Zároveň treba mať na pamäti, že v niektorých prípadoch sa stoh automaticky používa systém, najmä pri vykonávaní príkazu INT 21H prerušenia. Podľa tohto príkazcu procesor najprv umiestni spätnú adresu na zásobníku a potom DOS pošle rovnaký obsah registra a ďalšie informácie súvisiace s prerušeným programom. Preto, aj keď program vôbec nepoužíva stoh, mal by byť stále prítomný v programe a nemá menej ako niekoľko desiatok slov. V našom prvú príklade sme vzali pod stohu 128 slov, čo je určite dosť.

^ Programová štruktúra na assembler

Program Assembler je sada pamäťových blokov nazývaných pamäťovými segmentmi. Program môže pozostávať z jedného alebo viacerých takýchto blokových segmentov. Každý segment obsahuje súbor jazykových návrhov, z ktorých každý zaberá samostatný riadok programového kódu.

Ponuky Assembler sú štyri typy:

príkazy alebo pokyny, ktoré sú symbolické analógy príkazov stroja. V procese vysielania sa inštrukcie assembler transformuje na zodpovedajúce príkazy príkazového systému mikroprocesora;

macRocomans - definitívny návrh textových návrhov programu, ktoré sa nahradia počas vysielania inými návrhmi;

smernice, ktoré sú indikáciou prekladateľa assembler na vykonávanie určitých činností. Smernice nemajú žiadne analógy v reprezentácii stroja;

riadky komentárov obsahujúcich všetky znaky, vrátane písmen ruskej abecedy. Komentáre prekladateľ ignorujú.

^ Assembler Syntax

Návrhy, ktoré tvoria program, môžu byť syntaktickým dizajnom, zodpovedajúcim tímom, makrokomandom, smernicou alebo komentárom. Aby ich prekladateľ Assembler rozpoznal, musia byť tvorené určitými syntaktickými pravidlami. Na to je najlepšie použiť formálny popis syntaxe jazyka, ako sú pravidlá gramatiky. Najbežnejšie spôsoby takéhoto opisu programovacieho jazyka sú syntaktické grafy a rozšírené formy Bakusa Naura. Pre praktické použitie sú syntaktické diagramy pohodlnejšie. Napríklad syntaxe montáže Assembler je možné opísať pomocou syntaktických diagramov zobrazených na nasledujúcich obrázkoch.

Obr. 5. Formát ponuky montáže

Obr. 6. Formátová smernica

Obr. 7. Príkazový formát a makrá

Na týchto výkresoch:

názov štítku je identifikátor, ktorej hodnota je adresa prvého bajtu návrhu zdroja textu programu, ktorý označuje;

názov je identifikátor, ktorý rozlišuje túto smernicu od iných smerníc rovnakého mena. V dôsledku spracovania Assembler môže byť určitým charakteristikám pridelená osobitná smernica;

prevádzkový kód (CPC) a smernica je mnemonické označenia príslušného strojového tímu, makier alebo prekladateľských smerníc;

operands - Časti tímu, makro veliteľov alebo assembler smernice označujúce objekty, cez ktoré sa vykonávajú akcie. Assembler operands sú popísané výrazmi s numerickými a textovými konštantami, značkami a identifikátormi premenných pomocou operácií a niektorých vyhradených slov.

^ Ako používať syntaktické tabuľky? Je to veľmi jednoduché: pre to stačí nájsť a potom prejsť cestu z prihlásenia grafu (vľavo) na jeho výstup (vpravo). Ak táto cesta existuje, ponuka alebo dizajn je syntakticky správny. Ak nie je takáto cesta, znamená to, že kompilátor nebude akceptovať tento dizajn. Pri práci so syntaktickými grafmi, venujeme pozornosť smeru obtoku, označenej šípkami, pretože medzi cestami môžu byť tie, pre ktoré môžete ísť doprava doľava. V podstate sa syntaktické grafy odrážajú logiku prekladateľa, keď sa navrhuje vstupné návrhy programu.

Prípustné symboly pri písaní textov textov sú:

Všetky latinské písmená: A-Z, A-Z. V tomto prípade sa kapitálové a malé písmená považujú za rovnocenné;

Čísla od 0 do 9;

Značky?, @, $, _, &;

- \\ t ()< > { } + / * % ! " " ? \ = # ^.

Návrhy montáže sú vytvorené z lexeme, ktoré sú syntakticky neoddeliteľné sekvencie prípustných symbolov jazyka, ktoré dávajú zmysel pre prekladateľa.

Lexes sú:

identifikátory - Sekvencie prípustných znakov používaných na označenie takýchto objektov objektov, ako sú operačné kódy, názvy premenných a názov štítkov. Pravidlo nahrávania identifikátora je nasledovné: Identifikátor sa môže skladať z jedného alebo viacerých znakov. Ako znaky môžete použiť písmená latinskej abecedy, čísla a niektorých špeciálnych značiek - _ ,?, $, @. Identifikátor nemôže spustiť symbol číslice. Dĺžka identifikátora môže byť až 255 znakov, hoci prekladateľ vníma iba prvý 32 a zvyšok ignoruje. Dĺžka možných identifikátorov môžete nastaviť pomocou možnosti príkazového riadka MV. Okrem toho existuje možnosť špecifikovať prekladateľa, aby sa rozlišoval medzi veľkými a malými písmenami alebo ignoroval ich rozdiel (ktorý sa uskutočňuje štandardne).

^ Assembler príkazy.

Assembler príkazy zverejňujú schopnosť previesť svoje požiadavky na počítač, mechanizmus riadenia v programe (cykly a prechody) pre logické porovnania a softvérová organizácia. Programovateľné úlohy sú však zriedkavé. Väčšina programov obsahuje niekoľko cyklov, v ktorých sa niekoľko príkazov opakuje, kým určitá požiadavka na dosiahnutie, a rôzne kontroly, ktoré určujú, ktoré z viacerých opatrení by sa mali vykonať. Niektoré príkazy môžu prenášať kontrolu zmenou normálnej postupnosti krokov priamo upravte hodnotu posunu v príkazovom ukazovateli. Ako už bolo spomenuté vyššie, existujú rôzne tímy pre rôznych procesorov, zvážime niekoľko niektorých príkazov pre spracovateľov 80186, 80286 a 80386.

Ak chcete opísať stav vlajok po vykonaní nejakého tímu, použijeme vzorku z tabuľky odrážajúcej štruktúru vlajky EFLAGS:

V spodnom riadku tejto tabuľky sú hodnoty vlajok podávané po vykonaní príkazu. Zároveň sa používa táto notácia:

1 - Po vykonaní príkazu je príznak nastavený (rovný 1);

0 - Po vykonaní príkazu sa príznak resetuje (rovný 0);

r - Hodnota vlajky závisí od výsledku práce tímu;

Po vykonaní príkazu nie je vlajka definovaná;

priestor - Po vykonaní príkazu sa vlajka nezmení;

Na reprezentáciu operandov v syntaktických diagramoch sa používa táto notácia:

r8, R16, R32 - operand v jednej z registrov veľkosti bajtov, slova alebo dvojitého slova;

m8, M16, M32, M48 - operand v pamäti bajtov, slovo, dvojité slovo alebo 48 bitov;

i8, I16, I32 - Priamy operand Byte Size, slovo alebo dvojité slovo;

a8, A16, A32 - Relatívna adresa (offset) v segmente kódu.

Tímy (abecedné objednávky):

* Tieto príkazy sú podrobne opísané.

Pridať.
(Pridanie)

Pridávanie

^ Diagram tímov:

pridať prijímač, zdroj

Účel: Pridanie dvoch operandov Zdroj a prijímač bajt, slovo alebo dvojité slovo.

Pracovný algoritmus:

zložte zdroj a prijímač operandy;

zaznamenajte výsledok pridania do prijímača;

nainštalujte príznaky.

Stav vlajky Po vykonaní príkazu:

Aplikácia:
Príkaz Pridať sa používa na pridanie dvoch celočíselných operandov. Výsledok pridávania je umiestnený na adresu prvého operandu. Ak je výsledok prídavku cez hranicu prijímača operandu (prepad), potom túto situáciu zvážte analýzou vlajky CF a následné možné použitie príkazu ADC. Napríklad hodnoty leží v registrácii AX a pamäťovej oblasti CH. Pri pridávaní by ste mali zvážiť možnosť pretečenia.

Zaregistrujte sa plus register alebo pamäť:

| 000000dw | modregr / rm |

Registrácia AX (AL) plus priama hodnota:

| 0000010W | --Data-- | Údaje, ak w \u003d 1 |

Zaregistrujte sa alebo pamäť plus Priama hodnota:

| 100000sw | mod000r / m | --data-- | dáta, ak bw \u003d 01 |

Zavolať
(Volanie)

Postup alebo úloha

^ Diagram tímov:

Účel:

prevod kontroly úzkeho alebo dlhodobého postupu s pamäte v zásobníku v spätnom bode;

prepínanie úloh.

Pracovný algoritmus:
určený typom operandu:

Label Messenger - obsah ukazovateľa príkazového ukazovateľa EIP / IP je zadaný do stohu a nová hodnota adresy je vložená do rovnakého registra, adresa zodpovedajúcu štítku;

Label Label - Obsah ukazovateľa EIP / IP a CS príkazu sa zadáva do zásobníka. Potom sa rovnaké registre sú načítané novými hodnotami adries zodpovedajúcich dlhodobému štítku;

R16, 32 alebo M16, 32 - Určite register alebo pamäťovú bunku obsahujúcu posuny v aktuálnom segmente príkazu, kde je riadenie prenáša. Pri regulácii regulácie sa zadáva obsah ukazovateľa príkazu EIP / IP;

Memory Ukazovateľ - definuje pamäťovú bunku obsahujúcu 4 alebo 6-bajtový ukazovateľ nazývaný postup. Štruktúra takejto ukazovatele 2 + 2 alebo 2 + 4 bajtov. Výklad takéhoto ukazovateľa závisí od spôsobu prevádzky mikroprocesora:

^ Flag Statla Po vykonaní príkazu (okrem spínacej úlohy):

vykonávanie tímu nemá vplyv na vlajky

Pri prepnutí úlohy sa zmenia hodnoty vlajky v súlade s informáciami o registrácii EFLAGS v segmente stavu TSS úlohy, ku ktorému sa prepínanie.
Aplikácia:
Príkaz volania vám umožňuje zorganizovať flexibilné a viacrozmerné ovládanie podprogramu pri ukladaní adresy návratnosti.

Asi D (Štyri formáty):

Priame adresovanie v segmente:

| 11101000 | Disp-Low | DOP-HIGH

Nepriame adresovanie v segmente:

| 11111111 | MOD010R / M |

Nepriame riešenie medzi segmentmi:

| 11111111 | MOD011R / M |

Priame adresovanie medzi segmentmi:

| 10011010 | Offset-Low | Offset-High | SEG-LOW | SEG-HIGH |

Cmp
(Porovnať operandy)

Porovnanie operandov

^ Diagram tímov:

cMP operand1, operand2

Účel: Porovnanie dvoch operandov.

Pracovný algoritmus:

vykonať odčítanie (operand1 operand2);

v závislosti od výsledku, inštalovať vlajky, operand1 a operand2, aby sa nezmenili (to znamená, že výsledok nie je zapamätený).

Aplikácia:
Tento príkaz sa používa na porovnanie dvoch operandov odčítaním, zatiaľ čo operandy sa nemenia. Podľa výsledkov príkazu sú nainštalované vlajky. Príkaz CMP sa vzťahuje na príkazy podmieneného prechodu a príkazu inštalácie Byte pomocou hodnoty SETCC.

O k o d (tri formáty):

Zaregistrujte sa alebo registráciu pamäte:

| 001110DW | modregr / m |

Priama hodnota s registračnou sekerou (al):

| 0011110W | --Data-- | Údaje, ak w \u003d 1 |

Priama hodnota s registrom alebo pamäťou:

| 100000SW | MOD111R / M | --Data-- | Údaje, ak SW \u003d 0 |

Rozmnožovať
(Pokles operand o 1)

Zníženie operandu na jednotku

^ Diagram tímov:

operand.

Účel: Zníženie hodnoty operandu v pamäti alebo zaregistrovať do 1.

Pracovný algoritmus:
príkaz odpočíta 1 z operandu. Stav vlajky Po vykonaní príkazu:

Aplikácia:
Príkaz DEC sa používa na zníženie hodnoty bajtov, slov, dvojitých slov v pamäti alebo registrácii za jednotku. Zároveň si uvedomte, že príkaz nemá vplyv na vlajku CF.

Registrácia: | 01001REG |

^ Registrácia alebo pamäť: | 1111111W | MOD001R / M |

Výživný
(Rozdeliť nepodpísaný)

Rozhodnutie

Diagram tímov:

divo

Účel: Vykonajte prevádzku delenia dvoch binárnych hodnôt.

^ Pracovný algoritmus:
Pre príkaz je potrebné zadať dve operandy - rozdeliť a delider. Dividenda je implicitne definovaná a jeho veľkosť závisí od veľkosti deličovateľa, ktorá je uvedená v príkaze:

ak sa delič v bajtoch, potom musí byť dividenda umiestnená v registrácii AX. Po operácii je súkromná umiestnená v Al a zvyšok v AH;

ak je delider veľkosť slova, potom sa dividenda musí byť umiestnená v pároch registrov DX: AX, a najmladšia časť dividendy je v AX. Po operácii je súkromná umiestnená v AX, a zvyšok v DX;

ak sa dvojnásobný delič, rozlišovateľný musí byť umiestnený v pair EDX REGISTER: EAX, a najmladšia časť divízie je v EAX. Po operácii je súkromná umiestnená v EAX, a zvyšok je v EDX.

^ Flag Statla Po vykonaní príkazu:

Aplikácia:
Tím vykonáva celé číslo operandov s vydávaním výsledku vydelenia vo forme súkromného a rezíduí z divízie. Pri vykonávaní operácie rozdelenia sa môže vyskytnúť výnimočná situácia: 0 - chyba rozdelenia. Táto situácia sa vyskytuje v jednom z dvoch prípadov: Delič je 0 alebo súkromný príliš veľký na jeho umiestnenie v registri EAX / AX / AL.

Oh k asi d:

| 1111011W | MOD110R / M |

Int.
PRERUŠIŤ)

Volanie Služby prerušenia služieb

^ Diagram tímov:

int number_name

Účel: Volanie podprogramu sluľby prerušenia s číslom prerušenia zadaného príkazom.

^ Pracovný algoritmus:

napíšte príznaky EFLAGS / FLAGS ADRESA. Pri obnovení návratnej adresy sa najprv zaznamená obsah registra CS segmentu, potom obsah ukazovateľa príkazového ukazovateľa EIP / IP;

resetovať IF a TF v nulovom príznakoch;

preneste kontrolu na program spracovania prerušenia so zadaným číslom. Riadiaci mechanizmus závisí od spôsobu prevádzky mikroprocesora.

^ Flag Statla Po vykonaní príkazu:

Aplikácia:
Ako je možné vidieť zo syntaxe, existujú dve formy tohto príkazu:

int 3 - má vlastný individuálny kód prevádzky 0cch a berie jeden bajt. Táto okolnosť je veľmi vhodná na použitie v rôznych softvérových debruggeroch na inštaláciu prerušených bodov nahradením prvého bajtu akéhokoľvek príkazu. Mikroprocesor, ktorý sa vyskytol v príkazovom poradí príkazového sekvencie s 0cch operačného kódu, spôsobuje program prerušenia spracovania s vektorovým číslom 3, ktorý slúži na komunikáciu s programom Debugger.

Druhá forma príkazu zaberá dve bajty, má kód operácie 0CDH a umožňuje spustiť výzvu rutiny spracovania prerušenia s číslom vektora v rozsahu 0-255. Vlastnosti riadenia manažmentu, ako je uvedené, závisia od spôsobu prevádzky mikroprocesora.

O (dvoch formátoch):

Registrácia: | 01000REG |

^ Registrácia alebo pamäť: | 1111111W | MOD000R / M |

Jcc.
JCXZ / JECXZ.
(Skok, ak je stav)

(Skok, ak cx \u003d nula / skok, ak ecx \u003d nula)

Prechod, ak je stav spokojný

Prechod, ak je CX / ECX nula

^ Diagram tímov:

jCC tag
Štítok JCXZ
jecxz tag

Účel: Prechod v aktuálnom segmente príkazu v závislosti od určitého stavu.

^ Veliaci algoritmus (okrem JCXZ / Jecxz):
Kontrola stavu vlajok v závislosti od kódu operácie (odráža overiteľnú podmienku):

ak je testovací stav skutočne pravdivý, potom prejdite na bunku určenú operandom;

ak je platný stav false, potom preneste nasledujúci príkaz.

JCXZ / JECXZ TEAMNÝ PRACOVNÝ ALGORITHM:
Skontrolujte podmienky rovnosti nula Obsah registra ECX / CX:

ak je overiteľný stav

Téma 1.4 Assembler Mnemonic. Štruktúra a formáty príkazov. Druhy adresovania. Mikroprocesorový tímový systém

Plán:

1 jazyk assembler. Základné pojmy

2 Symboly symbolov assembler

3 Typy prevádzkovateľov assemblerov

4 Smernice Assembler

5 Systém príkazcu

1 J.zyk assembler. Základné pojmy

Jazyk - Toto je symbolická prezentácia jazyka stroja. Všetky procesy v stroji na najnižšej úrovni hardvéru sú poháňané iba príkazmi (pokyny) jazyka stroja. Je jasné, že aj napriek všeobecnému menu jazyka assembler pre každý typ počítača.

Program Assembler je kombináciou pamäťových blokov, nazývaných pamäťové segmenty.Program môže pozostávať z jedného alebo viacerých takýchto blokových segmentov. Každý segment obsahuje súbor jazykových návrhov, z ktorých každý zaberá samostatný riadok programového kódu.

Ponuky Assembler sú štyri typy:

1) príkazy alebo inštrukcie, Prezentácia symbolických analógov príkazov stroja. V procese vysielania sa inštrukcie assembler transformuje na zodpovedajúce príkazy príkazového systému mikroprocesora;

2) mACROCOMANDS -určitým spôsobom z textových návrhov programu, nahradené počas vysielania inými návrhmi;

3) smerniceindikácia montážneho prekladateľa na vykonávanie určitých činností. Smernice nemajú žiadne analógy v reprezentácii stroja;

4) riadky komentára obsahujúce akékoľvek znaky, vrátane písmen ruskej abecedy. Komentáre prekladateľ ignorujú.

­ Štruktúra programu na assembler. Syntax Assembler.

Návrhy, ktoré tvoria program, môžu byť syntaktickým dizajnom, zodpovedajúcim tímom, makrokomandom, smernicou alebo komentárom. Aby ich prekladateľ Assembler rozpoznal, musia byť tvorené určitými syntaktickými pravidlami. Na to je najlepšie použiť formálny popis syntaxe jazyka, ako sú pravidlá gramatiky. Najbežnejšie spôsoby takéhoto opisu programovacieho jazyka - Syntaktické grafy a rozšírené formy Bakusa Naura. Pre praktické použitie vhodnejšie syntaktické grafy.Napríklad syntaxe montáže Assembler je možné opísať pomocou syntaktických diagramov znázornených na nasledujúcich obrázkoch 10, 11, 12.

Obrázok 10 - Formát ponuky assembler


­ Obrázok 11-formátové smernice

­ Obrázok 12 - Tímový formát a makrá

Na týchto výkresoch:

­ menovky - identifikátor, ktorej hodnota je adresa prvého bajtu tohto návrhu zdroja textu programu, ktorý označuje;

­ názov - Identifikátor rozlišuje túto smernicu z iných smerníc rovnakých mien. V dôsledku spracovania Assembler môže byť určitým charakteristikám pridelená osobitná smernica;

­ prevádzkový kód (CPA) a smernica - Ide o mnemonické označenia príslušného strojového tímu, makrá alebo prekladateľských smerníc;

­ operands - Časti tímov, makro veliteľov alebo assembler smernice označujúce objekty nad ktorými sa vykonávajú akcie. Assembler operands sú popísané výrazmi s numerickými a textovými konštantami, značkami a identifikátormi premenných pomocou operácií a niektorých vyhradených slov.

Pomoc syntaktických diagramov nájsť a potom prejsť cez login grafu (vľavo) na jeho výstup (vpravo). Ak existuje táto cesta, návrh alebo dizajn je syntakticky správny. Ak nie je takáto cesta, znamená to, že kompilátor nebude akceptovať tento dizajn.

­ 2 Jazykové symboly

Prípustné symboly pri písaní textov textov sú:

1) všetky latinské písmená: A-Z., A-Z.. V tomto prípade sa kapitálové a malé písmená považujú za rovnocenné;

2) čísla 0 predtým 9 ;

3) Známky ? , @ , $ , _ , & ;

4) Výkymky , . () < > { } + / * % ! " " ? = # ^ .

Ponuky Assembler sú vytvorené lexémreprezentujú syntakticky neoddeliteľné sekvencie prípustných symbolov jazyka, ktoré dávajú zmysel pre prekladateľa.

Lexemes sú:

1) identifikátory - Sekvencie prípustných znakov použitých na označenie takýchto objektov objektov, ako sú operačné kódy, názvy premenných a názov štítkov. Pravidlo nahrávania identifikátora je nasledovné: Identifikátor sa môže skladať z jedného alebo viacerých znakov;

2) reťaze symbolov - Sekvencie symbolov uzavretých v jednotlivých alebo dvojitých úvodzoch;

3) Celá Bulwa jedného z nasledujúcich systémov príplatkov : binárne, desatinné, hexadecimálne. Identifikácia čísel pri ich zaznamenávaní v programoch Assembler sa vykonáva podľa určitých pravidiel:

4) Desiatkové čísla nevyžadujú žiadne ďalšie znaky na identifikáciu ďalších znakov, napríklad 25 alebo 139. Ak chcete identifikovať v zdrojovom texte programu binárne čísla Po nahrávaní nuly a jednotiek zahrnutých do ich zloženia, dajte latinčinu " b.", Napríklad 10010101 b..

5) hexadecimálne čísla majú viac dohovorov v ich zázname:

Najprv sa skladajú z čísel 0...9 , malé a veľké písmená latinskej abecedy a., B., c., D., E., F. alebo A., B., C., D., E., F..

Po druhé, prekladateľ môže mať problémy s rozpoznaním hexadecimálneho počtu kvôli tomu, že môžu pozostávať z niektorých čísel 0 ... 9 (napríklad 190845), takže začnite s písmenom latinskej abecedy (napríklad, eF15). Aby "vysvetlila" prekladateľ, že tento lexém nie je desatinným číslom alebo identifikátorom, programátor musí špeciálne vyčleniť hexadecimálne číslo. Ak to chcete urobiť, na konci sledu hexadecimálneho počtu, ktoré tvoria hexadecimálne číslo, napíšte latinský list " h.". Toto je predpoklad. Ak sa hexadecimálne číslo začína písmenom, predná nula sa zaznamenáva pred ním: 0 eF15 h.

Takmer každý návrh obsahuje popis objektu, ktorým alebo s ktorým sa vykonávajú niektoré kroky. Tieto objekty sa nazývajú operanda. Môžu byť identifikované takto: operands. Toto sú objekty (niektoré hodnoty, registre alebo pamäťové bunky), ku ktorému prevádzkujú pokyny alebo smernice, alebo tieto objekty, ktoré definujú alebo špecifikujú prevádzku pokynov alebo smerníc.

Je možné vykonať nasledujúcu klasifikáciu operandov:

­ konštantné alebo priame operandy;

­ operands;

­ prevedené operandy;

Merač adresára;

­ zaregistrujte sa operand;

­ základné a indexové operandy;

­ Štrukturálne operandy;

Vstupy.

Operands sú elementárne komponenty, z ktorých je vytvorená časť príkazu stroja, označuje objekty, cez ktoré sa operácia vykonáva. Všeobecnejšom prípade môžu operandy zahrnúť ako súčasť zložitejšieho vzdelávania výrazy.

Výrazy existujú kombinácie operandov a prevádzkovateľov považovaných za celok. Výsledkom výpočtu expresie môže byť adresa určitej pamäťovej bunky alebo nejakej konštantnej (absolútnej) hodnoty.

­ 3 Typy prevádzkovateľov assemblerov

Uvádzame možné typy assembler operátori a syntaktické pravidlá pre tvorbu expresie assemblerov:

­ aritmetickí operátori;

­ prevádzkovatelia radenia;

­ prevádzkovatelia porovnávania;

­ logických operátorov;

­ operátor indexu;

­ typ Predefinívny operátor;

­ prevádzkovateľ nadefinovanie segmentu;

­ typ premenovania operátora;

­ operátora získania zložky segmentu adresy výrazu;

­ operátora na získanie posunu výrazu.

1 Smernice Assembler

­ Smernice Assembler sú:

1) Smernice segmentácie. Počas predchádzajúcej diskusie sme našli všetky základné pravidlá pre zaznamenávanie tímov a operandov v programe Assembler. Otázka zostala otázkou, ako správne vytvoriť postupnosť príkazov, takže ich prekladateľ môže spracovať a mikroprocesor je vykonať.

Pri zvažovaní architektúry mikroprocesora sme sa dozvedeli, že má šesť segmentových registrov, prostredníctvom ktorých môže súčasne pracovať:

­ s jedným kódovým segmentom;

­ s jedným segmentom zásobníka;

­ s jedným segmentom údajov;

­ s tromi ďalšími segmentmi údajov.

Fyzicky segment je oblasť pamäte, obsadená príkazmi a (alebo) dátami, ktorých adresy sa vypočítavajú v porovnaní s hodnotou v príslušnom registri segmentu. Syntaktický popis segmentu na assembler je dizajn znázornený na obrázku 13:


­ Obrázok 13 - Syntax Popis segmentu na assembler

Je dôležité si uvedomiť, že funkčný účel segmentu je trochu širší ako jednoduché porušenie programu na blokoch kódu, údajov a zásobníka. Segmentácia je súčasťou všeobecnejšieho mechanizmu spojeného s koncepcia modulárneho programovania. Zahŕňa zjednotenie dizajnu objektov modulov vytvorených kompilátorom, a to aj z rôznych programovacích jazykov. To vám umožní kombinovať programy napísané v rôznych jazykoch. Je určený na implementáciu rôznych možností pre takéto združenie a operandy v smernici o segmentoch.

2) Smernice o manažmente. Smernice o riadení zoznamu sú rozdelené do nasledujúcich skupín:

­ všeobecné smernice o riadení zoznamu;

­ výstupné smernice v zozname zahrnutých súborov;

­ podmienené smernice blokovania montáže;

­ smernice o výkone v zozname makrokomandu;

­ zoznam informácií o zápisoch Cross-Referencie;

­ zmena smerníc o zmene formátu.

2 Systém príkazového systému

Systém príkazového príkazu je prezentovaný na obrázku 14.

Zvážte hlavné skupiny tímov.

­ Obrázok 14 - Klasifikácia Assembler Commands

Tímy sú:

1 Príkazy prenosu dát. Tieto príkazy zaberajú veľmi dôležité miesto v systéme príkazov akéhokoľvek procesora. Vykonávajú nasledujúce hlavné funkcie:

­ Úspora v pamäti obsahu interných registrov procesorov;

­ kopírovanie obsahu z jednej oblasti pamäte do druhého;

­ písanie I / O zariadenia a prečítajte si z i / o zariadenia.

V niektorých procesoroch sú všetky tieto funkcie vykonáva jeden jediný tím.MOV. (Pre zásielky Byte -MOVB. ) ale s rôznymi metódami riešenia operandov.

V iných procesoroch, okrem tímuMOV. Na vykonanie uvedených funkcií je niekoľko ďalších príkazov. Tiež príkazy prenosu dát zahŕňajú príkazy na zdieľanie informácií (ich označenie je založené na slovoVýmena ). Môžu existovať výmena informácií medzi internými registrmi, medzi dvoma polovicou jedného registra (Swap ) Alebo medzi registrom a pamäťovou bunkou.

2 aritmetické tímy. Aritmetické tímy považujú operandové kódy ako numerické binárne alebo binárne desatinné kódy. Tieto príkazy môžu byť rozdelené do piatich hlavných skupín:

­ pevné bodkočiarky (pridanie, odčítanie, násobenie, rozdelenie);

­ plávajúce bodkočiarky (add, odčítanie, násobenie, rozdelenie);

­ Čistiace príkazy;

­ prírastkov a znižovania;

­ porovnať príkaz.

3 pevné bodkočiarky ovládajú príkazy pracovať s kódmi v registroch procesorov alebo v pamäti ako konvenčné binárne kódy. Plávajúce spoločenstvo (bod) Operačné príkazy Používajú formát zobrazenia čísel s objednávkou a Mantissa (zvyčajne tieto čísla zaberajú dve po sebe idúce pamäťové bunky). V moderných silných procesoroch nie je sada plávajúcich bodkočiariek obmedzený na štyri aritme, a obsahuje mnoho ďalších zložitejších príkazov, napríklad výpočet trigonometrických funkcií, logaritmických funkcií, ako aj komplexných funkcií potrebných pri spracovaní zvuku a obrázkov.

4 Čistiace príkazy sú navrhnuté tak, aby zapisovali nulový kód do registra alebo pamäťovej bunky. Tieto príkazy môžu byť nahradené príkazmi na prepravu nulových kódov, ale špeciálne príkazy čistenia sú zvyčajne rýchlejšie ako príkazy na odoslanie.

5 prírastkov (zvýšenie jednotky) a znižovanie

(Redukcia na jednotku) sú tiež veľmi pohodlné. Môžu byť v zásade nahradiť príkazy summatizácie s jednotkou alebo odčítaním jednotky, ale prírastok a znižovanie sú rýchlejšie ako súčet a odčítanie. Tieto príkazy vyžadujú jeden vstupný operand, čo je výstupný operand.

6 Porovnávacie príkaz je navrhnutý tak, aby porovnal dvoch vstupných operandov. V podstate vypočíta rozdiel týchto dvoch operandov, ale výstupný operand sa nevytvára, ale mení bity v registri štátu procesora podľa výsledku tejto odčítania. Nasledujúci príkaz na porovnávacie príkaz (zvyčajne je to prechodový príkaz) bude analyzovať bity v registrácii stavu procesora a vykonávať akcie v závislosti od ich hodnôt. Niektoré procesory poskytujú príkazy porovnávania reťazca dvoch sekvencií operandov v pamäti.

7 Logické príkazy. Logické príkazy sa vykonávajú na operanstvách logických (bitových) operácií, to znamená, že považujú operand kódy nie ako jedno číslo, ale ako súbor jednotlivých bitov. Líšia sa od aritmetických tímov. Logické príkazy Vykonávajú nasledujúce základné operácie:

­ logické a logické alebo pridanie modulu 2 (s výnimkou alebo);

­ logické, aritmetické a cyklické posuny;

­ skontrolujte bity a operandy;

­ inštalácia a čistenie bitov (vlajky) registra štátu procesora (Psw).

Príkazy Logic Operations vám umožňujú prepravu vypočítať základné logické funkcie z dvoch vstupných operandov. Okrem toho, operácia a používa sa na nútenú čistenie špecifikovaných bitov (ako jeden z operandov, použije sa kód masky, v ktorom sú vypúšťacie výboje nastavené na nulu). Prevádzka alebo aplikovaná na nútenú inštaláciu špecifikovaných bitov (ako jeden z operandov, kód masky sa používa, v ktorom sa vypúšťajú, ktoré vyžadujú inštaláciu na jednotku, sa rovná jednému). Prevádzka "Výborné alebo" sa používa na inverziu zadaných bitov (ako jeden z operandov, použije sa kód masky, v ktorom sú bity, ktoré sú predmetom inverzie nastavené na jednotku). Príkazy vyžadujú dve vstupné operandy a tvoria jeden výstupný operand.

8 príkazov Shifts vám umožňujú zmiešať operandový kód doprava (smerom k mladším výbojom) alebo vľavo (v smere seniorov). Typ posunu (logický, aritmetický alebo cyklický) určuje, ktorá bude novou hodnotou staršieho bitov (keď posun doprava) alebo mladší bit (počas posunu vľavo), a tiež určuje, či najstaršia hodnota Starší bit (keď sa posun vľavo) uloží niekde alebo mladší bit (pri posunu vpravo). Cyklické posuny vám umožňujú presunúť bity operandu kódu v kruhu (v smere hodinových ručičiek, keď je posun vpravo alebo proti smeru hodinových ručičiek, keď sa posun vľavo). Zároveň môže vstupný krúžok zadať alebo nezadať príznak prenosu. V príznakovom bitov (ak sa použije), hodnota staršieho bitu sa zaznamenáva počas cyklického posunu doľava a mladší bit počas cyklického posunu vpravo. V súlade s tým, hodnota prenosového vlajka bit bude zodpovedať najnižšiemu vybitiu počas cyklického posunu vľavo a v seniorovom výbore počas cyklického posunu doprava.

9 Príkazy prechodov. Družstvá sú navrhnuté tak, aby organizovali všetky druhy cyklov, pobočiek, hovorov na podprogramov atď., To znamená, že porušujú sériový pokrok. Tieto príkazy sú zaznamenané v príkazovom registri novom význame a tým zavolajte prechod procesora, ktorý nie je na nasledujúci príkaz, ale na akýkoľvek iný príkaz v pamäti programov. Niektoré príkazy prechodov poskytujú ďalší návrat späť do bodu, z ktorého bola vykonaná prechod, iné to neposkytujú. Ak je vrátená náhrada, potom sú aktuálne parametre procesora uložené v zásobníku. Ak nie je vrátená náhrada, potom sa aktuálne parametre procesora neuložia.

Porovnať príkazy bez náhrady sú rozdelené do dvoch skupín:

­ bezpodmienečné prechody;

­ spoločné prechody.

V označení týchto príkazov sa používajú slováPobočka (rozvetvenie) a skok (skok).

Príkazy bezpodmienečných prechodov spôsobujú prechod na novú adresu, bez ohľadu na čokoľvek. Môžu zavolať prechod na zadanú hodnotu posunu (dopredu alebo dozadu) alebo na zadanú adresu pamäte. Hodnota posunu alebo nová hodnota adresy je označená ako vstupný operand.

Podmienené prevodné príkazy spôsobujú, že prechod nie je vždy, ale len pri vykonávaní zadaných podmienok. Ako takéto podmienky sú hodnoty vlajky v štátnom registri procesora zvyčajne konajú.Psw. ). To znamená, že podmienka prechodu je výsledkom predchádzajúcej operácie, ktorá zmení hodnoty vlajok. Celkové podmienky prechodu môžu byť od 4 do 16. Niekoľko príkladov podmienených prechodných tímov:

­ prechod, ak nulová;

­ prechod, ak nie nula;

­ prechod, ak existuje prepad;

­ prechod, ak nie je prepad;

­ prechod, ak je viac nula;

­ prechod, ak je menšia alebo rovná nule.

Ak sa vykoná stav prechodu, je prevzatý do registra príkazov novej hodnoty. Ak sa podmienka prechodu nevykoná, merač príkazu sa jednoducho zvyšuje a procesor vyberie a vykoná nasledujúci príkaz v poriadku.

Najmä pri kontrole podmienok prechodného stavu sa v porovnaní Command (SMR) aplikuje pred podmieneným velením transformácie (alebo dokonca niekoľko konvenčných prechodných tímov). Ale príznaky môžu byť nainštalované a akýkoľvek iný príkaz, ako je príkaz prenosu dát, akýkoľvek aritmetický alebo logický príkaz. Treba poznamenať, že samotné príkazy Flag Transition sa nezmenia, že to umožňuje dať niekoľko príkazov prechodu po druhom.

Osobitné miesto medzi prechodnými tímami sú obsadené príkazmi prerušenia. Tieto príkazy ako vstupný operand vyžadujú prerušenie (vektorová adresa).

Výkon:

Jazyk Assembler je symbolická prezentácia zariadenia stroja. Jazyk assemblera pre každý typ počítača. Program Assembler je sada pamäťových blokov nazývaných pamäťovými segmentmi. Každý segment obsahuje súbor jazykových návrhov, z ktorých každý zaberá samostatný riadok programového kódu. Návrhy Assembler sú štyri typy: tímy alebo pokyny, makrá, smernice, komentár.

Všetky latinské písmená sú prípustné pri písaní textu programov: A-Z., A-Z.. V tomto prípade sa kapitálové a malé písmená považujú za rovnocenné; Čísla OT 0 predtým 9 ; \\ T príznaky ? , @ , $ , _ , & ; \\ T rozdiely , . () < > { } + / * % ! " " ? = # ^ .

Používajú sa nasledujúce typy prevádzkovateľov assemblerov a syntaktických pravidiel pre tvorbu expresie assemblerov. Aritmetickí operátori, príkazy na zmenu, porovnávacie operátori, logickí operátori, prevádzkovateľ indexu, operátor redefinície typu, operátora redefinície segmentu, operátor pre redefiníciu segmentu, operátor štruktúry pomenovanie, operátor získavania segmentovej zložky expresnej adresy, operátor expresného posunu.

Príkazový systém je rozdelený do 8 hlavných skupín.

­ Kontrolné otázky:

1 Čo je to assembler?

2 Aké znaky môžu byť použité na nahrávanie príkazov na assembler?

3 Aké sú etikety a ich stretnutie?

4 Vypočítajte štruktúru príkazov Assembler.

5 Zoznam 4 Druhy návrhov na montáž.

Štruktúry v jazyku Assembler

Užili sme vyššie uvedené polia sú kombináciou rovnakého typu prvkov. Ale často v aplikáciách je potrebné zvážiť určitý súbor rôznych typov údajov ako jeden jediný typ.

To je veľmi relevantné, napríklad pre databázové programy, kde je potrebné viazať súbor údajov z iného typu s jedným objektom.

Napríklad sme predtým preskúmali zoznam 4, v ktorom bola práca vykonaná s radom trojvrstvových prvkov. Každý prvok, na druhej strane, boli dva prvky rôznych typov: jednovrstvové počítadlo a dvojité pole, ktoré by mohli niesť ďalšie informácie potrebné na skladovanie a spracovanie. Ak je čitateľ oboznámený s jedným z jazykov na vysokej úrovni, potom vie, že takýto objekt je zvyčajne opísaný pomocou špeciálneho typu údajov - Štruktúry.

Aby sa zvýšil jednoduchosť používania jazyka assembler, zaviedol aj tento typ údajov.

A-Priory konštrukcia - Toto je typ údajov pozostávajúci z pevného počtu prvkov rôznych typov.

Ak chcete používať štruktúry v programe, musíte vykonať tri akcie:

    Nasadiť sa Štruktúra šablóny .

    V zmysle to znamená definíciu nového typu údajov, ktorý možno použiť na určenie premenných tohto typu.

    Určiť inštancie štruktúry .

    Táto etapa znamená inicializáciu špecifickej premennej vopred na štruktúru (s použitím šablóny) štruktúry.

    Zorganizovať odvolanie na štruktúrované prvky .

Je veľmi dôležité, aby ste pochopili od samého začiatku, aký je rozdiel medzi popis Štruktúry v programe a jeho definícia.

Opísať Štruktúra v programe znamená len špecifikovať svoju schému alebo vzor; Pamäť nevytvára.

Tento vzor možno považovať len ako informácie pre prekladateľa o umiestnení polí a ich predvolenej hodnoty.

Určiť Štruktúra znamená špecifikovať prekladateľa na zvýraznenie pamäte a priradiť symbolický názov do tejto oblasti.

Štruktúra môžete opísať len raz, a určiť - ľubovoľný počet časov.

Štruktúra šablóny

Opis šablóny štruktúry má nasledujúcu syntax:

struc._name

názov štruktúry

Tu predstavuje sekvenciu smerníc o popise údajov dB, DW, DD, DQ a dt..

Ich operandy určujú veľkosť polí av prípade potreby počiatočné hodnoty. Tieto hodnoty budú inicializované zodpovedajúcimi poliami pri určovaní štruktúry.

Ako sme už zaznamenali pri opise šablóny, pamäť nie je pridelená, pretože je to len informácie pre prekladateľa.

Miesto Šablóna v programe môže byť povolená, ale po logike prevádzky prekladateľa s jedným prechodom musí byť umiestnená pred umiestnením, kde sa premenná určí s typom tejto štruktúry. To znamená, že pri opise v údajnom segmente premennej s typom určitej štruktúry musí byť jej šablóna umiestnená na začiatku segmentu údajov alebo pred ním.

Zvážte prácu so štruktúrami na príklade modelovania databázy zamestnancov nejakého oddelenia.

Pre jednoduchosť, aby sme sa dostali od problémov s transformáciou informácií pri zadávaní, súhlasíme s tým, že všetky polia sú symbolické.

Definujeme štruktúru nahrávania tejto databázy s nasledujúcim šablónom:

Definovanie údajov so typom štruktúry

Ak chcete použiť štruktúru opísanú pomocou šablóny v programe, je potrebné určiť premennú s typom tejto štruktúry. To používa nasledujúcu dizajn syntaxe:

[Variabilný názov] Názov štruktúry

    názov premennej - Identifikátor premennej tohto konštrukčného typu.

    Úloha názvu premennej je nepovinná. Ak ho nešpecifikujete, oblasť pamäte v množstve dĺžok všetkých prvkov štruktúry bude jednoducho pridelená.

    zoznam hodnôt - zoznam počiatočných hodnôt prvkov konštrukcie oddelené čiarkami uzavretými v uhlových zátvorkách.

    Jeho úloha je tiež nepovinná.

    Ak zoznam nie je plne uvedený, potom sú všetky polia štruktúry pre túto premennú inicializované hodnotami zo šablóny, ak sú špecifikované.

    Je povolené inicializovať jednotlivé oblasti, ale v tomto prípade by sa zmeškané polia mali oddeliť čiarkami. Zmeškané polia budú inicializované s hodnotami zo štruktúry šablóny. Ak pri určovaní novej premennej s typom tejto štruktúry súhlasíme so všetkými hodnotami polí vo svojej šablóne (to znamená, že je predvolená hodnota), potom stačí písať rohové konzoly.

    Napríklad: victor Worker..

Napríklad definujeme niekoľko premenných s vyššie opísaným typom.

Metódy práce so štruktúrou

Myšlienka zavedenia konštrukčného typu na akýkoľvek programovací jazyk spočíva v kombinácii rôznych typových premenných do jedného objektu.

V jazyku musí existovať prostriedok na prístup k týmto premenným v rámci konkrétnej inštancie štruktúry. S cieľom odkazovať na tím v oblasti určitej štruktúry sa používa špeciálny operátor - symbol ". "(bod). Používa sa v nasledujúcom syntaktickom dizajne:

    adresa_morce- identifikátor premennej určitého konštrukčného typu alebo expresie v zátvorkách v súlade so syntaktickými pravidlami uvedenými nižšie (obr. 1);

    názov PLA_TRAVE - názov poľa zo šablóny štruktúry.

    To v skutočnosti tiež adresa, alebo skôr posunutie poľa od začiatku konštrukcie.

Obsluha teda " . "(bod) vypočíta výraz

Obr. päť. Syntax expresie adresy v operácii manipulácii so štruktúrou štruktúry

Ukážeme sa, že príklad štruktúry, ktorú definujeme pracovníka. Niektoré pracovné techniky so štruktúrami.

Napríklad odstráňte sekera. Hodnoty poľa s vekom. Vzhľadom k tomu, že vek schopného človeka je nepravdepodobné, že bude viac ako 99 rokov, potom po umiestnení obsahu tohto symbolického poľa do registra sekera. Bude vhodné konvertovať na binárnu reprezentáciu tímom aad..

Dávajte pozor, pretože vzhľadom na zásadu ukladania údajov "Junior bajt pre mladšiu adresu" Starší počet vekov bude umiestnený ala najmladší - v ah..

Ak chcete nastaviť, stačí na použitie príkazu xchg al, Ah:

mOV AX, Word PTR Sotr1.Age; v Al Age Sotr1

a môžete a tak:

Ďalšia práca s radom konštrukcií sa vykonáva rovnakým spôsobom ako s jednorozmerným poľa. Tam je niekoľko otázok:

Čo byť s veľkosťou a ako zorganizovať indexáciu prvkov poľa?

Podobne ako iné identifikátory definované v programe, prekladateľ priradí názov typu štruktúry a názvu premennej s typom štruktúry atribútu typu. Hodnota tohto atribútu je veľkosť v bajtoch zapojených do oblastí tejto štruktúry. Túto hodnotu môžete odstrániť pomocou operátora typ.

Po známom veľkosti štruktúry štruktúry sa indexovanie v rade konštrukcií nepredstavuje špeciálnu zložitosť.

Napríklad:

Ako skopírovať pole z jednej štruktúry do príslušného poľa inej štruktúry? Alebo ako vykonávať kopírovanie celej štruktúry? Vykonajte pole kopírovanie nam. Tretí zamestnanec v oblasti nam. Piaty zamestnanec:

mAS_SOTR WORKER 10 DUP ()

mOV BX, OFFNT MAS_SOTR

mOV SI, (pracovník typu) * 2; Si \u003d 77 * 2

mOV DI, (Pracovník typu) * 4; Si \u003d 77 * 4

Zdá sa mi, že program programátora skôr alebo neskôr robí osobu vyzerať ako dobrá žena v domácnosti. On, rovnako ako ona, je neustále hľadať, kde niečo ušetriť, rezať a robiť nádherný obed z minima produktov. A ak to uspeje, potom morálna spokojnosť nie je nižšia ako ona, a možno viac ako z nádherného obeda v domácnosti. Stupeň tejto spokojnosti, zdá sa mi, že závisí od stupňa lásky k vašej profesii.

Na druhej strane, úspech vo vývoji softvéru a hardvéru relaxácií sú trochu uvoľnené, a situácia podobná dobre známym príslovím o lietať a slon je pomerne často pozorovaný - na riešenie nejakej malej úlohy, sú zahrnuté ťažké prostriedky, Účinnosť, ktorej vo všeobecnosti je vo všeobecnosti významná iba implementácia relatívne veľkých projektov.

Prítomnosť v jazyku nasledujúcich dvoch typov údajov je pravdepodobne spôsobená túžbou "hosteska", čo účinne používa pracovný priestor tabuľky (RAM) počas prípravy potravín alebo na umiestnenie produktov (programové údaje) .

Tímy assembler (prednáška)

Naplánovať prednášky

1. Základné skupiny operácií.

Pentium.

1. Základné skupiny operácií

Mikroprocesory vykonávajú súbor tímov, ktoré sú identifikované ako priečky alarmových skupín:

Operácie,

Aritmetickí operátori

Logické operácie

Prevádzka

Operácionalizácie,

Bitové operácie

Operácie programu;

Operácií procesora.

2. Moduly príkazového príkazu Pentium.

Pri opise príkazov sa bežne používajú ich mnemonické označenia (Mnokodes), ktoré slúžia na úlohu príkazu pri programovaní v jazyku Assembler. Pre rôzne verzie assembler sa niektoré príkazy môžu líšiť. Napríklad pre príkaz Call Subroutine používa MNEMokodeZavolať alebo Jsr. ("Skoč do Podrogram"). Avšak, metra väčšiny tímov pre základné typy mikroprocesorov sa zhodujú alebo sa mierne líšia, pretože sú skratky príslušných anglických slov, ktoré určujú vykonanú operáciu. Zvážte nesúlad príkazov prijatých pre spracovateľovPentium.

Prepravné príkazy. Hlavným príkazom tejto skupiny je tímMOV. ktorý poskytuje prenos dát medzi dvoma registrami alebo medzi registratúrou a pamäťovou bunkou. V niektorých mikroprocesoroch je zásielka implementovaná medzi dvoma pamäťovými bunkami, ako aj skupinovú prepravu obsahu viacerých registrov pamäte. Napríklad mikroprocesory rodiny 68xXX Company Motorola. Vykonať príkazPohybovať. Poskytovanie presmerovania z jednej pamäťovej bunky k inému a príkazuMOVEM. ktorý je zaznamenaný v pamäti alebo prevziať z pamäte obsahu na zadanú sadu registrov (do 16 registrov). TímXchg. Zatvorené zdieľanie obsahu dvoch procesorov alebo registračných registrov a pamäťových buniek.

Vstup tímov V. a výstup Von. Implementovať prenos dát z registra procesora na externé zariadenie alebo prijímanie údajov z externého zariadenia do registra. V týchto príkazoch je číslo rozhrania (I / O port) nastavený, prostredníctvom ktorých sa prenášajú údaje. Všimnite si, že mnohé mikroprocesory nemajú špeciálne príkazy na zmiernenie externých zariadení. V tomto prípade sa vstup a výstup údajov v systéme vykonáva pomocou príkazuMOV. ktorý nastaví adresu požadovaného zariadenia rozhrania. Externé zariadenie je teda riešené ako pamäťová bunka, av adresnom priestore je určitý oddiel, v ktorom sú umiestnené adresy zariadení rozhrania pripojených k systému (porty).

Príkazov aritmetických operácií. Hlavným v tejto skupine sú tímy pridávania, odčítania, násobením a rozdelením, ktoré sú inteligentné. Tímy pridávania Pridať. a odčítanie Sub. vykonať vhodné operáciec.posadnutí dvoch registrov, registrácií a pamäťových buniek alebo pomocou priameho operandu. Tím Reklama C. , Sb. B. Pridávajte dodatočné a odčítanie, berúc do úvahy hodnotu funkcieC.inštalované pri vytváraní prenosu počas vykonávania predchádzajúcej operácie. Pomocou týchto príkazov sa implementuje sekvenčné pridanie operandov, počet vypúšťaní prevyšuje vypúšťanie procesora. Tím Neg. Zmení znak operandu, prekladá ho do ďalšieho kódu.

Operácie multiplikácie a rozdelenia je možné vykonávať nad číslami so znakom (tímyI. Mul, I. Výživný ) Alebo inštancia (príkazy Mul, div . Výsledok operácie sa nachádza v registri. Pri násobení (príkazovMul. , Imul ) Ukazuje sa výsledok dvojitého typu, na umiestnenie, z ktorých sa používajú dva registre. Pri delí sa (tímy)Výživný , Idiv ) Dvojstupňový absolutórium sa používa ako rozdelenie, umiestnené v dvoch registroch a v dôsledku toho sa súkromný a zvyšok zaznamenávajú v dvoch registroch.

Príkazy logických operácií . Takmer všetky mikroprocesory produkujú logické operácie, alebo eliminujú alebo, ktoré sa vykonávajú v rovnakých menách operandov pomocou príkazov A alebo, X. Alebo. . Operácie sa vykonávajú na obsahu dvoch registrov, registrov a pamäťových buniek alebo pomocou okamžitého operandu. Tím Nie. Invertuje hodnotu každého vypúšťania operandu.

Shift tímy. Mikroprocesory sa vykonávajú aritmetické, logické a cyklické posuny adresovaných operandov na jednu alebo viac číslic. Operand shift môže byť v registri alebo pamäťovej bunke, a počet rezacích výbojov je nastavený pomocou priameho operandu obsiahnutého v príkaze, alebo je určený obsahom zadaného registra. Pri implementácii posunu sa zvyčajne zúčastňuje znamenie prevoduC. V štátnom registri (Sr.alebo EFlags.), Tam, kde existuje posledný výkon operandu, rozšírený z registra alebo pamäťovej bunky.

Porovnať a otestovať tímy . Operand Porovnanie sa zvyčajne vykonáva pomocou príkazu.Cmp ktorý vykonáva odčítanie operandov s nastavením značiek N, Z, V, C V štátnom registri v súlade s získaným výsledkom. V tomto prípade nie je výsledok odčítania uložený a hodnoty operandov sa nemenia. Následná analýza získaných hodnôt značiek vám umožňuje určiť relatívnu hodnotu (\u003e,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Niektoré mikroprocesory vykonávajú testovanie Tst ktorá je jednou rukou verzie porovnávacieho príkazu. Pri vykonávaní tohto príkazového manuálneho príručky N, Z. V súlade so znakom a významom (rovným alebo nie rovným nule) adresovateľného operandu.

Bitové operácie príkazy . Tieto príkazy produkujú nastavenie hodnoty znakovC. V štátnom registri v súlade s hodnotou testovaného bitovbn. v adresovanom operande. V niektorých mikroprocesoroch, na základe testu bitov, nastavenie atribútu.Z.. Počet testovaných bitovn. Nastavte obsah uvedený v registri alebo priame operand.

Príkazy tejto skupiny implementujú rôzne možnosti pomoci. BT. Uloží hodnotu tohto bitov nezmenený. Príkaz B. T. S. pohľadnica nastaví hodnotu bn.\u003d 1 a tím B. T. C. - hodnota bn.\u003d 0.And B. T. C. invertuje hodnotu BN BN po jeho testovaní.

Operácie riadenia programu. Ak chcete spravovať program, používa sa veľký počet príkazov, medzi ktorými môžete priradiť:

- bezpodmienečné ovládacie príkazy;

- konvenčných prechodných tímov;

- príkazy programových cyklov;

- prerušenie príkazov;

- príkazy Zmeniť značky.

Bezpodmienečná kontrola je vyrobená tímomJMP. Ktoré preberá na programový pultPC. Nový obsah, ktorý je adresa nasledujúceho príkazu. Táto adresa je priamo uvedená priamo v príkaziJMP. (priame adresovanie) alebo vypočítané ako súčet aktuálneho obsahuPC. A spýtal sa v tíme zaujatosť, ktorý je číslo so znakom (relatívne adresovanie). AkoPC. Obsahuje adresu nasledujúceho programového príkazu, posledná metóda určuje prechodovú adresu, vysídlenú vzhľadom na nasledujúcu adresu na zadaný počet bajtov. S pozitívnym posunom sa vykonáva prechod na následné príkazy programu s negatívnym posunom - k predchádzajúcemu.

Volanie podprogramu je tiež vykonané bezpodmienečným riadením pomocou príkazuZavolať (alebo Jsr. ). Avšak, v tomto prípade, pred načítanímPC. Nový obsah špecifikujúci adresu prvého príkazu príkazu, musíte uložiť svoju aktuálnu hodnotu (adresa nasledujúceho príkazu), aby ste sa uistili, že po vykonaní podprogramu sa vráti do hlavného programu (alebo na predchádzajúce podprogram pri pripojení podprogramov) . Podmienené prechodné príkazy (programové vetvy) produkujú nakladaniePC. Nový obsah, ak sa vykonávajú určité podmienky, ktoré sú zvyčajne nastavené v súlade s aktuálnou hodnotou rôznych funkcií v stave registra. Ak stav nie je implementovaný, beží nasledujúci programový program.

Správa príkazov sú poskytnuté na zápis - prečítajte si obsah stavu registra, v ktorom sú príznaky uložené, ako aj zmena hodnôt jednotlivých funkcií. Napríklad v procesoroch Pentium sú realizované príkazy. LAHF. a Sahf. ktoré prevádzkujú nakladanie mladšieho bajtu, kde sú príznaky obsiahnuté zo štátneho registra EFLAG. V registri Junior Bajt Eax a naplnenie mladšieho bajtu EFlags. z registra E A.X... tímy CLC, STC. Vykonajte nastavenie príznakov prenosu CF \u003d 0, CF \u003d 1 a tím CMC. Spôsobuje prevziať hodnotu tejto funkcie. Keďže označenia definujú pokrok v realizácii programu, keď podmienečné prechody, príkazy zmeny označenia sa bežne používajú na riadenie programu.

Príkazy procesora . Táto skupina obsahuje príkazy členenia, chýba operácie a rad príkazov, ktoré určujú spôsob fungovania procesora alebo jeho jednotlivých blokov. TímHLT. zastaví spustenie programu a prenesie procesor do stavu zastavenia, výstup, z ktorého sa vyskytuje, keď príde signály prerušenia alebo reštartu (Resetovanie). Tím Nop. ("Prázdny" príkaz), ktorý nespôsobuje žiadne operácie, slúži na implementáciu oneskorenia softvéru alebo vyplnenie povolení vytvorených v programe.

Špeciálne tímy CLI, STI Zakázať a umožniť službu príkazu na prerušenie. SpracovateľovPentium. To používa kontrolný bit (vlajku)Ak. V registri EFlags..

Mnoho moderných mikroprocesorov vykonáva identifikačný príkaz, ktorý umožňuje užívateľovi alebo iným zariadeniam získať informácie o type procesora používaného v tomto systéme. Spracovateľov Pentuim. Pre to slúži ako tím CPUID Pri vykonávaní, ktoré sú potrebné údaje o procesore zapísané do registrov Eax,Ebx,Ecx,Edx A potom môže byť čítaný užívateľom alebo operačným systémom.

V závislosti od prevádzkových režimov implementovaných procesorom a zadanými typmi údajov sa súbor vykonaných príkazov môže výrazne rozšíriť.

Niektoré procesory produkujú aritmetické operácie s binárnymi desatinnými číslami alebo vykonávajú špeciálne výsledky výsledkov korekčných príkazov pri spracovaní takýchto čísel. Medzi mnoho vysoko výkonných procesorov patríFPU. - Jednotka spracovania číslac. "Plávajúci bod".

V mnohých moderných procesoroch sa implementuje viacnásobné spracovanie viacerých celých čísel alebo číselc. "Plávajúci bod" s pomocou jedného princípuSIMD ("Single inštruovania - viacnásobné údaje ") -" jeden príkaz je rôznymi údajmi. " Simultánne vykonávanie operácií cez viac operandov výrazne zvyšuje výkon procesora pri práci s video a audio dátami. Takéto operácie sa široko používajú na spracovanie obrázkov, zvukových signálov a iných aplikácií. Ak chcete vykonať tieto operácie, špeciálne bloky, ktoré implementujú zodpovedajúce súbory príkazov, ktoré sú vložené do procesorov, ktoré sú v rôznych typoch procesorov (Pentium, Athlon) Prijatý názovMmx (“ MILTI.- rozšírenie médií. ") - Multimédiá, \\ tUzáver ("Streaming SIMD rozšírenie") - Streamovanie SIMPD - expanzia, “3 D.Predĺženie - trojrozmerná expanzia.

Charakteristickým znakom firemných procesorovInteligencia Od modelu 80286 je prioritná kontrola pri prístupe k pamäti, ktorá je poskytovaná, keď je procesor v prevádzke zabezpečených virtuálnych adries - "Chránený režim. "(Chránený režim). Na implementáciu tohto režimu sa používajú špeciálne skupiny príkazov, ktoré slúžia na usporiadanie ochrany pamäte v súlade s prijatým prioritným algoritmom.

Príkazová štruktúra v jazyku Assembler. Programovanie na úrovni príkazov stroja je minimálna úroveň, na ktorej je možné počítačové programovanie. Systém príkazov stroja by mal byť dostatočný na implementáciu požadovaných opatrení, vydávajúcich pokynov stroja. Každý príkazový príkaz sa skladá z dvoch častí: prevádzku, definovanie "Čo robiť" a operant, definujúci spracovateľské predmety, to znamená, že niečo "nad tým, čo robiť." Strojový príkaz mikroprocesora, zaznamenaný v jazyku Assembler, je jedným riadkom, ktorý má nasledujúci formulár: riaditeľ (či) príkazu na štítok / operand; Komentáre označovanie, príkaz / smernica a operand sú oddelené aspoň jedným symbolom priestoru alebo jazýčky. Operány tímu sú oddelené čiarkami.

Príkazová štruktúra v jazyku Assembler Assembler Command znamená prekladateľa, ktorý akcia musí vykonať mikroprocesor. Smernice Assembler sú parametre uvedené v texte programu, ktorý ovplyvňuje proces montáže alebo vlastnosti výstupného súboru. Operand Určuje počiatočnú hodnotu údajov (v segmente údajov) alebo prvky, cez ktoré sa príkaz vykonáva (v segmente kódu). Príkaz môže mať jednu alebo dve operandy, alebo nemajú operandy. Počet operandov je implicitne nastavený kódom príkazu. Ak je príkaz alebo smernica potrebuje pokračovať na nasledujúcom riadku, používa sa symbol "Reverse Slash": "". V predvolenom nastavení Assembler nerozlišuje kapitálové a malé písmená v písaní príkazov a smerníc. Príklady smernice a Count DB 1 príkazy; Meno, smernica, jedna MOVA EAX, 0 operand; Tím, dva operandy

Identifikátory - postupnosť prípustných znakov používaných na označenie názvov variabilných a názvov štítkov. Identifikátor môže pozostávať z jedného alebo viacerých z nasledujúcich symbolov: všetky písmená latinskej abecedy; čísla od 0 do 9; Špecialista: _, @, $,? . Ako prvý symbol je možné použiť značku. Identifikátory nemôžu používať vyhradené mená (smernice, prevádzkovatelia, názvy príkazov). Prvý znak identifikátora by mal byť listom alebo odborníkom. Maximálna dĺžka identifikátora 255 znakov, ale prekladateľ vníma prvý 32, zvyšok ignoruje. Všetky značky, ktoré sa zaznamenávajú v reťazci, ktorý neobsahuje smernicu o asistenta, musí skončiť s kolóniou ":". Štítok, príkaz (smernica) a operand by nemali nevyhnutne začať s akoukoľvek konkrétnou pozíciou v reťazci. Odporúča sa ich zaznamenať v stĺpci pre väčšiu ydeabilitu programu.

Značky Všetky tagy, ktoré sú napísané v rade, ktorý neobsahuje smernicu o assembler, musí skončiť s kolóniou ":". Štítok, príkaz (smernica) a operand by nemali nevyhnutne začať s akoukoľvek konkrétnou pozíciou v reťazci. Odporúča sa ich zaznamenať v stĺpci pre väčšiu ydeabilitu programu.

Komentáre Používanie pripomienok v programe Zlepšuje jej jasnosť, najmä ak je priradenie príkazového súboru nepochopiteľné. Komentáre začínajú na ľubovoľnom riadku zdroja modulu z "Body s čiarkou" symbolom (;). Všetky postavy vpravo od "; "Do konca riadku sú komentár. Komentár môže obsahovať akékoľvek tlačené znaky vrátane "priestoru". Komentár môže zaberať celý reťazec alebo nasledovať príkaz na rovnakom riadku.

Programová štruktúra v jazyku Assembler Program napísaný v jazyku assembler môže pozostávať z niekoľkých častí, nazývaných modulov, v každom z nich je možné definovať jedno alebo viac dátových segmentov, stohu a kódu. Akýkoľvek dokončený program v jazyku Assembler by mal zahŕňať jeden hlavný, alebo hlavný, modul, z ktorého začína jeho vykonanie. Modul môže obsahovať softvérové \u200b\u200bsegmenty, segmenty dát a zásobníky, vyhlásené za použitia príslušných smerníc.

Pamäťové modely Pred vyhlásením segmentov musíte zadať pamäťový model pomocou smernice. Model modifikátor Modifikátor_pamyti, Dohoda_O_SOB, TYPY_OS, Parameter_stell Bash Basic Assembler Language Model: Memory Model Addressing Code Addressing Data Operačný systém Kód Firemný kód a dáta Tiny Blízko MS-DOS Viditeľné malé blízke MS-DOS, Windows NO Compact Blízko Far MS-DOS, Windows No Large Far MS-DOS, Windows No Obrovské Far MS-DOS, Windows No Blízko Windows 2000, Windows XP, Windows Prípustný Flat neďaleko NT,

Memory Model Model Malý model funguje len v 16-miestnych aplikáciách MS-DOS. V tomto modeli sa všetky údaje a kód nachádzajú v jednom fyzickom segmente. Veľkosť programového súboru v tomto prípade nepresahuje 64 kB. Malý model podporuje jeden segment kódu a jeden segment údajov. Údaje a kód pri použití tohto modelu sú adresované podľa blízkosti (stredu). Stredný model podporuje niekoľko segmentov programového kódu a jedného segmentu údajov, zatiaľ čo všetky odkazy v segmentoch predvoleného programu sú považované za dlhé (ďaleko) a odkazy v segmente údajov sú blízko (blízko). Kompaktný model podporuje niekoľko dátových segmentov, ktoré využívajú dátové adresovanie s dlhým rozsahom (ďaleko) a jeden kódový segment so susednými adresami (blízko). Veľký model podporuje niekoľko segmentov kódov a niekoľko dátových segmentov. V predvolenom nastavení sú všetky odkazy na kód a údaje považované za dlhé (ďaleko). Obrovský model je takmer ekvivalentný veľkému modelu pamäte.

Memory Memory Model Model preberá nenovi konfiguráciu programu a používa sa len v 32-miestnych operačných systémoch. Tento model je podobný drobnému modelu v tom zmysle, že údaje a kód sú zverejnené v jednom segmente, len 32-miestne. Vypracovať program pre bytový model pred smernicou. Model byt by mal byť umiestnený jeden zo smerníc :. 386, -. \\ T 486, -. \\ T 586 Or. 686. Výber smernice o výbere procesora definuje sadu dostupných príkazov pri písaní programov. Písmeno P po smerovej smernici o výbere procesora znamená chránený režim prevádzky. Dátové a kódové adresy sú susedné (blízko), zatiaľ čo všetky adresy a ukazovatele sú 32-miestne.

Pamäťový model. Modifikátor modifikátora MODIFER_PAMYTI, DOHODY_O_OBLI, TYPY_OS, Parameter_tec parameter modifikátor používaný na určenie typov segmentov a môže mať hodnoty: Použitie 16 (segmenty vybraného modelu sa používajú ako 16bit) Použitie 32 (segmenty vybraného modelu sa používajú ako 32 -bit ). Dohoda_no_name parameter sa používa na určenie spôsobu prenosu parametrov pri volaní procedúry z iných jazykov, vrátane jazykov na vysokej úrovni (C ++, Pascal). Parameter môže mať nasledujúce hodnoty: C, Basic, Fortran, Pascal, SYSCALL, STDCALL.

Pamäťový model. Model modifikátor Modifikátor_pamyti, Dohoda_O_OBLI, TYPY_OS, parameter_name Parameter TYPE_OS je rovný OS_DOS v predvolenom nastavení, av okamihu je to jediná podporovaná hodnota tohto parametra. Parameter_set Parameter je nastavený na: ShellStack (REGISTRÁCIA SS JE DS, databáza a zásobník sú umiestnené v rovnakom fyzickom segmente) Farstack (Register SS nie je rovný DS, dátová oblasť a zásobník sú umiestnené v rôznych fyzických segmentoch). Predvolená hodnota je neblokovaná.

Príklad programu "Nothing". 686 P. Model Flat, STDCall. Údajov. Kód Štart: Ret End Start Ret - Mikroprocesorový tím. Poskytuje správny koniec programu. Zvyšok programu sa vzťahuje na prevádzku prekladateľa. . 686 P - P-Pentium 6 chránené príkazy (Pentium II) sú povolené. Táto smernica vyberie podporovaný súbor príkazov Assembler, ktorý označuje model procesora. . Modelový plochý, STDCall - plochý model pamäte. Tento model pamäte sa používa v operačnom systéme Windows. STDCall - Použité problémy s postupom.

Príklad programu "Nothing". 686 P. Model Flat, STDCall. Údajov. Kód Štart: Štart na ukončenie siete. Údaje sú segment programu obsahujúci údaje. Tento program nepoužíva stoh, takže segment. Chýba. . Kód je programový segment obsahujúci kód. Štart je štítok. Koniec Štart je koniec programu a správa pre kompilátor, že je potrebné spustiť program spustenia zo štartovacej značky. Každý program by mal obsahovať koncovú smernicu, ktorá označuje koniec zdrojového kódexu programu. Všetky riadky, ktoré sledujú koncovú smernicu, sú ignorované štítkom uvedeným po ukončenej smernici, rozpráva názov hlavného modulu, z ktorého začína program. Ak program obsahuje jeden modul, štítok po ukončenej smernici nie je možné uviesť.

Sluts of Assembler Language Translator - Program alebo technické prostriedky, ktoré vykonáva transformáciu programu prezentovaná v jednom z programovacích jazykov do programu na cieľový jazyk nazývaný objektový kód. Okrem podpory mnemónie strojových tímov má každý prekladateľ vlastný súbor smerníc a makier, často s ničím kompatibilným. Hlavnými typmi jazykov jazyka assembler: MASM (Microsoft Assembler), Tash (Borland Turbo Assembler), FASM (plochý assembler) - voľne distribuovaný multifikát assembler, napísal Tomash Hrystar (poľský), NASM (Netwide Assembler) - Voľný assembler pre Intel X Architecture 86 bola vytvorená Simon Thisham spolu s Julian Hall a v súčasnosti rozvíja malý tím vývojárov na zdroji. Forge. Sieť.

Src \u003d "https://present5.com/presentation/-29367016_6361097/image-15.jpg" Alt \u003d "(! Lang: LIVECAST program v Microsoft Visual Studio 2005 1) Vytvorte si projekt výberom Súbor-\u003e Nové menu\u003e Projekt a"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src \u003d "https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt \u003d "(! Lang: LIVECAST program v programe Microsoft Visual Studio 2005 2) v strome projektu (Zobraziť-\u003e Explorer riešenia)"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Vysielanie programu v Microsoft Visual Studio 2005 3) Vyberte typ súboru COOD C ++, ale zadajte názov s rozšírením. Asm:

Vysielanie programu v Microsoft Visual Studio 2005 5) Nastavte nastavenia kompilátora. Vyberte v pravom tlačidle v návrhu Menu Custom Build Pravidlám ...

Vysielanie programu v programe Microsoft Visual Studio 2005 av zvolení Microsoft Micro Assembler sa objavil.

Vysielanie programu v Microsoft Visual Studio 2005 na kontrolu pravého tlačidla v súbore Hello. Vlastnosti menu ASM Tree Project Property a inštalácia General-\u003e Nástroj: Microsoft Makro Assembler.

SRC \u003d "https://present5.com/presentation/-29367016_6361097/image-22.jpg" alt \u003d "(! Lang: vysielanie programu v Microsoft Visual Studio 2005 6) Dokončite súbor výberom položky Build-\u003e Build Ahoj. Prj."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Programovanie v systéme Windows OS programovanie OC Windows je založený na používaní funkcií API (Aplikačné programové rozhranie, I.E. Software Application Interface). Ich množstvo dosiahne 2000. Program Windows sa vo veľkej miere skladá z takýchto hovorov. Všetky interakcie s externými zariadeniami a zdrojmi operačného systému dochádza spravidla prostredníctvom takýchto funkcií. Operačný systém Windows používa model plochej pamäte. Adresa akejkoľvek pamäťovej bunky bude určená obsahom jedného 32-biblického registra. Možné 3 typy programových štruktúr pre Windows: dialóg (hlavné okno - dialógové okno), konzola alebo napadnutá štruktúra, klasická štruktúra (okno, rám).

Volanie funkcií API systému Windows v súbore pomoci. Akákoľvek funkcia API je prezentovaná ako typ typu funkcie (FA 1, F 2, FA 3) typu návratnosti; FAK - zoznam formálnych argumentov v poradí z nich napríklad, int správy. Box (HWND H. WND, LPCTSTR LP. Text, LPCTstr LP. Titulok, Uint U. Typ); Táto funkcia zobrazuje okno s hlásením a tlačidlom (alebo tlačidlami) výstupu. Význam parametrov: h. WND je okno okna, v ktorom sa zobrazí okno správa, zobrazí sa LP. Text - text, ktorý sa zobrazí v okne, LP. Titulok - text v okne titulu, u. Typ - typ okna, najmä, môžete definovať počet výstupných tlačidiel.

Volanie Funkcie API Windows API INT. Box (HWND H. WND, LPCTSTR LP. Text, LPCTstr LP. Titulok, Uint U. Typ); Takmer všetky parametre funkcií API sú v reality 32 -bit celé čísla: HWND - 32bit Integer, LPCTSTR - 32bit ukazovateľ na reťazec, Uint - 32 -bit celé číslo. Stačí "A" sa často pridáva k názvu funkcií, ktoré majú ísť na novšie verzie funkcií.

Volanie Funkcie API Windows API INT. Box (HWND H. WND, LPCTSTR LP. Text, LPCTstr LP. Titulok, Uint U. Typ); Pri použití MASM, je potrebné na konci mena pridať @n n - počet bajtov, ktoré zaberajú prenášané argumenty v zásobníku. Pre funkcie Win 32 API môže byť toto číslo definované ako počet argumentov n vynásobených 4 (bajtov v každom argumente): n \u003d 4 * n. Ak chcete volať funkciu, použite príkaz Call Assembler. V tomto prípade sa na neho prenášajú všetky argumenty funkcií prostredníctvom zásobníka (Push Command). Smer argumentu Transfer: Zľava doprava - zdola nahor. Prvý bude umiestnený na stohu argumentu U. Typ. Volanie zadanej funkcie bude vyzerať takto: Zavolajte správu. Box. [Chránené e-mail]

Volanie Funkcie API Windows API INT. Box (HWND H. WND, LPCTSTR LP. Text, LPCTstr LP. Titulok, Uint U. Typ); Výsledkom vykonávania akejkoľvek funkcie API je spravidla celé číslo, ktoré sa vracia do registra EAX. Smernica o kompetencii je "posun v segmente", alebo premietnutím do konceptu jazykov na vysokej úrovni, "ukazovateľ" začiatku riadku. Smernica EV je podobná #define v jazyku SI definuje konštantu. Externá smernica označuje prekladateľ, ktorý je funkcia alebo identifikátor externý vzhľadom na tento modul.

Príklad programu "Ahoj všetci!" . 686 P. Model Flat, STDCall. Stack 4096. Data MB_OK ECK 0 Str 1 db "Môj prvý program", 0 str 2 db "Ahoj všetci!", 0 HW DD? Externá správa. Box. [Chránené e-mail]: Blízko. Kód Štart: Push MB_OK Push Offset Str 1 Push Offset Str 2 Push HW Call Správa. Box. [Chránené e-mail] Spustiť koniec

Smernica Vyvolajte jazykový prekladač MASM Umožňuje zjednodušiť výzvu na funkcie pomocou funkcie makro-FREE - INVOKE: Vyvolať funkciu smernice, parametrov1, parameter2, ... Na funkčné volanie nie je potrebné pridať @ 16; Parametre sú zaznamenané presne v poradí, v akom je opísaná funkcia. Makrifikáty prekladateľa Parametre sú umiestnené na stoh. Ak chcete použiť smernicu o vyvolaní, musíte mať popis funkcie prototypu pomocou protologickej smernice vo formulári: správa. Box. PROTO: DWORD ,: DWORD Ak program používa rôzne funkcie WIN 32 API, odporúča sa použiť obsah C: MASM 32IVHLUSER 32. Inc.



Páči sa vám článok? Zdieľaj to