Registry 32 bitové pro všeobecné použití: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

Podobné dokumenty
ISU Cvičení 3. Marta Čudová

Assembler - 4.část. poslední změna této stránky: Zpět

Assembler x86. Studijní text pro předmět: Strojově orientované jazyky Petr Olivka. Katedra informatiky VŠB-TU Ostrava

ISU Cvičení 7. Marta Čudová

Procesor z pohledu programátora

Strojový kód. Instrukce počítače

Předmluva 13 Použité konvence 14. KAPITOLA 1 Základní číselné soustavy a pojmy Číselné soustavy a převody 15 1.

Kubatova Y36SAP 8. Strojový kód Jazyk symbolických instrukcí asembler JSA pro ADOP a AVR Kubátová Y36SAP-strojový kód 1

Popis instrukční sady procesoru ADOP

Assembler - 2.část. poslední změna této stránky: Zpět

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška I / 21

8. Laboratoř: Aritmetika a řídicí struktury programu

Struktura a architektura počítačů (BI-SAP) 7

x86 assembler and inline assembler in GCC

Úroveň strojového kódu procesor Intel Pentium Úvod

Princip funkce počítače

a operačních systémů

REbejs. 1. workshop (draft0)

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Pohled do nitra mikroprocesoru

Adresní mody procesoru

Assembler DRUHÁ ČÁST OBSAH.

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Operační systémy 2. Přednáška číslo 1. Úvod do OS

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Architektury počítačů a procesorů

Petr Krajča. 26. říjen, 2012

Kubatova Y36SAP 9. Strojový kód ISA architektura souboru instrukcí střadačově, zásobníkově orientovaná, GPR Kubátová Y36SAP-ISA 1

Čísla, reprezentace, zjednodušené výpočty

Pohled do nitra mikroprocesoru Josef Horálek

A51 MACRO ASSEMBLER POKUSNY PROGRAM DATE 10/3/007 PAGE 1

Opakování programování

Architektura počítačů Logické obvody

Úroveň strojového kódu 32-bitový procesor Intel Pentium

Programátorský model x86

Procesor. Základní prvky procesoru Instrukční sada Metody zvýšení výkonu procesoru

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Algoritmizace a programování

Architektura počítačů Logické obvody

Struktura a architektura počítačů (BI-SAP) 6

Čísla, reprezentace, zjednodušené výpočty

LEKCE 6. Operátory. V této lekci najdete:

Architektury VLIW M. Skrbek a I. Šimeček

22. TVORBA UŽIVATELSKÝCH INSTRUKCÍ A MAKER

MQL4 COURSE. By Coders guru -4 Operace & Výrazy

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

Úvod. Instrukce musí obsahovat: typ operace adresu operandu (operandů) typ operandů modifikátory adresy modifikátory operace POT POT

Y36SAP - aritmetika. Osnova

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO ASSEMBLER VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Program "Světla" pro mikropočítač PMI-80

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Michal Brandejs. Mikroprocesory Intel Pentium

Michal Brandejs. Mikroprocesory Intel

Metody připojování periferií BI-MPP Přednáška 2

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Principy počítačů a operačních systémů

Assembler - 1.část. poslední změna této stránky: Zpět

ISU Cvičení 2. Marta Čudová

35POS Počítačové systémy. 8 Mnohaúrovňová organizace počítače 1

Architektura počítačů. Instrukce a návrh instrukční sady. Lubomír Bulej KDSS MFF UK

MSP 430F1611. Jiří Kašpar. Charakteristika

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jazyk symbolických adres

CHARAKTERISTIKA PROCESORU PENTIUM První verze:

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Instrukční sada pro používání ControlLogix a CompactLogix výňatek

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Koncepce DMA POT POT. Při vstupu nebo výstupu dat se opakují jednoduché činnosti. Jednotlivé kroky lze realizovat pomocí speciálního HW.

Semestrální práce z předmětu ÚPA MIPS

5 Přehled operátorů, příkazy, přetypování

Struktura a architektura počítačů (BI-SAP) 9

PJC Cvičení #2. Číselné soustavy a binární reprezentace proměnných

v aritmetické jednotce počíta

RISC a CISC architektura

Algoritmizace prostorových úloh

ISU Cvičení 2. Marta Čudová

Generování vnitřní reprezentace programu

Procesory, mikroprocesory, procesory na FPGA O. Novák, CIE 11 1

Assembler RISC RISC MIPS. T.Mainzer, kiv.zcu.cz

Principy komunikace s adaptéry periferních zařízení (PZ)

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška II. 14. říjen, / 26

1. Programování PLC. Programovatelné automaty II - 1 -

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

Paměť počítače. alg2 1

Programování. řídících systémů v reálném čase. Střední odborná škola a Střední odborné učiliště - - Centrum Odborné přípravy Sezimovo Ústí

Programátorský model procesoru x51

Klimatizace. Třída: 4.C. Střední Průmyslová Škola Elektrotechnická Havířov Protokol do MIT. Skupina: 3. Zpráva číslo: 3

Struktura a architektura počítačů (BI-SAP) 8

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

MCP BIOS řídicí jednotky Kit386EXR

Transkript:

1 Procesor i486 a vyšší - úvodní seznámení Procesory i486 a vyšší jsou v technické literatuře dobře dokumentovány, ale dokumentace je rozsáhlá a obsahuje pro začínajícího i zkušeného programátora mnoho nadbytečných informací. Cílem tohoto textu je vymezit základní pojmy, principy a instrukce pro běžnou práci. Z historického hlediska nemá smysl oddělovat postupný vývoj generací procesorů před verzí i486. Tato verze je zde považována za výchozí. 1.1 Registry Procesory i486 obsahují 8 základních registrů velikosti 32 bitů pro všeobecné použití. Dále 6 registrů segmentových, stavový registr a čítač instrukcí. Registry 32 bitové pro všeobecné použití: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. Registry 16 bitové: výše uvedené registry dovolují přístup ke své dolní 16 bitové části přes: AX, BX, CX, DX, SI, DI, BP, SP. Registry 8 bitové: první čtyři 16 bitové registry jsou rozděleny na horní a dolní 8 bitové části: AH (high), AL (low), BH, BL, CH, CL, DH, DL. Segmentové registry 16 bitové FS, GS. DS (data), ES (extra), CS (code), SS (stack), Čítač instrukcí EIP (IP): ukazuje na aktuální vykonávanou instrukci. Jeho změny se provádí skokovými instrukcemi, nikdy ne přímo. Stavový registr FLAGS: obsahuje stavové bity. Mezi programátorem nejpoužívanější patří: ZF (zero flag), CF (carry), OF (overflow), SF (signum), DF (direction). Registry jsou pouze ve vyjímečných případech vázány účelově. Pro úplnost některé příklady: EAX, AX, AL je akumulátor. Používá se při násobení, děleni a v řetězcových instrukcích. ECX je používán jako čítač. CL je použit jako čítač při bitových rotacích a posunech. EDX, DX je horní část argumentu při násobení a dělení. 1.2 Adresování Adresování rozdělujeme na 16 a 32 bitový režim. Vždy rozdělujeme adresování na přímé a nepřímé. Při přímém adresování uvádíme vždy konkrétní pevnou adresu. Programátor ovšem v praxi potřebuje přímou adresu je vyjímečně, nejčastěji jsou za přímou adresu považovány adresy proměnných. Pokud nelze adresu určit přímo, může použít adresování nepřímé přes registry.

V 16 bitovém režimu je formát: [ Bázový + Indexový + Konstanta ], kde bázové registry jsou dva: DI a SI, bázové registry také dva: BX a BP. Lze tedy vždy kombinovat jen jeden bázový s jedním indexovým, ale lze je používat i každý samostatně. V 32 bitovém režimu je adresování univerzálnější: [ Bázový + Indexový * Měřítko + Konstanta ]. Na místě bázového i indexového registru je možno použít kterýkoliv z osmi 32 bitových registrů. Meřítko je jedno ze čtyř čísel: 1, 2, 4, a 8. Usnadňuje manipulaci s polem, jehož položky jsou jiné velikosti, než 1 byte. 1.3 Strojový kód, JSI, Assembler Strojový kód je binarní reprezentace strojových instrukcí, které procesor vykonává. V dnešní době ovšem žádný programátor nepíše programy přímo ve strojovém kódu, ale píše v jazyce symbolických instrukcí, tedy používá k vytvoření programu symbolické textové názvy jednotlivých instrukcí a registrů. Do strojového kódu jsou pak symbolické instrukce převáděny překladačem. V praxi bývá také JSI nazýván assemblerem. 1.4 Datové typy Datové typy specifikují jen velikost vyhrazené paměti, nikde se neříká nic o obsahu, zda jde o znak, celé číslo se znaménkem či bez, nebo číslo reálné. Za obsah a typovou kontrolu proměnné si odpovídá programátor. DB - data BYTE (8 bitů) DW - data WORD (16 bitů) DD - data DWORD (32 bitů) DQ - data QWORD (64 bitů) DT - data TBYTE (80 bitů) 2 Instrukční soubor Z celého instrukčního souboru procesoru i486 se využívá v běžné praxi ani ne polovina všech instrukcí celočíselné jednotky ALU. Ty jsou v literatuře řazeny abecedně. Výhodnější je v začátku ovšem rozdělení instrukcí tématicky do několika skupin: přesunové, logické a bitové, aritmetické, skokové, řetězcové, pomocné a řídící.

2.1 Přesunové instrukce MOV cíl, zdroj Instrukce provede přesun obsahu operandu zdroj do operandu cíl. Velikost obou operandů musí být stejná. Přesouvat lze obsah paměti, registru a konstantu. CMOVxx cíl, zdroj Instrukce provede přesun obsahu operandu zdroj do operandu cíl, pokud bude splněna podmínka xx. Význam této zkratky je vysvětlen dále u podmíněných skoků. I zde musí být velikost obou operandů stejná. Přesouvat lze obsah paměti, registru a konstantu. MOVZX cíl, zdroj Instrukce se používá v případě, že velikost operandu zdroj je menší, než velikost operandu cíl a provádí se rozšíření nulami. MOVSX cíl, zdroj Stejně jako MOVZX, ale provede se znaménkové rozšíření. XCHG cíl, zdroj Vymění se obsah obou operandů. BSWAP cíl XLATB Provede změnu pořadí bytů. Jedná se konverzi little a big endian formátu čísla. Instrukce provede: AL = [ EBX + AL ]. Do registru AL se přesune AL-tý znak z tabulky, na kterou ukazuje EBX (BX). LEA cíl, zdroj Do operandu cíl se přesune adresa operandu zdroj. LDS cíl, zdroj Obsah paměti na kterou ukazuje cíl se přesune do DS a operandu cíl. LES, LSS, LFS, LGS Stejně jako LDS, ale použije se ES, SS, FS, GS. PUSH zdroj POP cíl PUSHA Uloží na vrchol zásobníku obsah operandu zdroj a posune vrchol zásobníku. Z vrcholu zásobníku se přesune hodnota do operandu cíl a sníží vrchol zásobníku. Uloží na vrchol zásobníku všech 8 registrů.

POPA PUSHF POPF LAHF SAHF Obnoví z vrcholu zásobníku všech 8 registrů. Stavový registr procesoru se uloží na vrchol zásobníku. Hodnota na vrcholu zásobníku se přenese do stavového registru. Přesune spodních 8 bitů stavového registru do AH. Přesune obsah AH do spodních 8 bitů stavového registru. IN akumulátor, adresa Přesun z portu daného operátorem adresa do akumulátoru AL, AX, EAX. Pokud je adresa velikosti 8 bitů, lze použít konstantu, jinak musí být adresa v registru DX. OUT adresa, akumulátor Přesun z akumulátoru do portu na dané adrese. Podobně jako IN. 2.2 Logické a bitové instrukce Instrukce ovlivňují obsah příznakového registru procesoru. Logické instrukce mění SF a ZF, bitové posuny i CF. AND cíl, zdroj Instrukce provede bitově cíl = cíl and zdroj. TEST cíl, zdroj Instrukce provede bitově cíl and zdroj. Jde o operaci AND bez uložení výsledku. OR cíl, zdroj Instrukce provede bitově cíl = cíl or zdroj. XOR cíl, zdroj NOT cíl Instrukce provede bitově cíl = cíl xor zdroj. Instrukce provede negaci všech bitů operandu. SHL/SAL cíl, kolik Bitový i aritmetický posun doleva operandu cíl o požadovaný počet bitů. Operand kolik je konstanta nebo registr CL. SHR cíl, kolik Bitový posun doprava operandu cíl o požadovaný počet bitů. Operand kolik je konstanta nebo registr CL.

SAR cíl, kolik Aritmetický posun doprava operandu cíl o požadovaný počet bitů. Operand kolik je konstanta nebo registr CL. ROL cíl, kolik Bitová rotace doleva operandu cíl o požadovaný počet bitů. Operand kolik je konstanta nebo registr CL. ROR cíl, kolik Bitová rotace doprava operandu cíl o požadovaný počet bitů. Operand kolik je konstanta nebo registr CL. RCL cíl, kolik Bitová rotace doleva přes CF operandu cíl o požadovaný počet bitů. Operand kolik je konstanta nebo registr CL. RCR cíl, kolik Bitová rotace doprava přes CF operandu cíl o požadovaný počet bitů. Operand kolik je konstanta nebo registr CL. BT cíl, číslo Zkopíruje do CF hodnotu bitu daného operandem číslo z operandu cíl. BTR cíl, číslo Zkopíruje do CF hodnotu bitu daného operandem číslo z operandu cíl a nastaví jej na nulu. BTS cíl, číslo Zkopíruje do CF hodnotu bitu daného operandem číslo z operandu cíl a nastaví jej na jedničku. BTC cíl, číslo Zkopíruje do CF hodnotu bitu daného operandem číslo z operandu cíl a provede jeho negaci. 2.3 Aritmetické instrukce ADD cíl, zdroj Instrukce provede aritmetické sčítání cíl = cíl + zdroj ADC cíl, zdroj Instrukce provede aritmetické sčítání včetně CF cíl = cíl + zdroj + CF SUB cíl, zdroj Instrukce provede aritmetické odčítání cíl = cíl - zdroj CMP cíl, zdroj Instrukce provede aritmetické odčítání cíl - zdroj, ale neuloží výsledek.

SBB cíl, zdroj INC cíl DEC cíl NEG cíl Instrukce provede aritmetické odčítání s výpůjčkou cíl = cíl - zdroj - CF Instrukce provede zvýšení operandu o jedničku. Zvláštností je, že nemění CF. Instrukce provede snížení operandu o jedničku. Nemění CF. Instrukce provede změnu znaménka operandu. MUL zdroj Instrukce pro násobení dvou bezznaménkových čísel. Operandem zdroj se podle jeho velikosti (8, 16, 32) bitů násobí akumulátor (AL, AX, EAX) a výsledek se uloží do (AX, AX-DX, EAX-EDX). IMUL zdroj Instrukce pro násobení dvou znaménkových čísel. Operandem zdroj se podle jeho velikosti (8, 16, 32) bitů násobí akumulátor (AL, AX, EAX) a výsledek se uloží do (AX, AX-DX, EAX-EDX). DIV zdroj Instrukce pro dělení dvou bezznaménkových čísel. Operandem zdroj se podle jeho velikosti (8, 16, 32) bitů dělí připravená hodnota v (AX, AX- DX, EAX-EDX) a výsledek se uloží do (AL, AX, EAX) a zbytek po dělení bude v (AH, DX, EDX). IDIV zdroj CBW CWD CDQ Instrukce pro dělení dvou znaménkových čísel. Operandem zdroj se podle jeho velikosti (8, 16, 32) bitů dělí připravená hodnota v (AX, AX-DX, EAX-EDX) a výsledek se uloží do (AL, AX, EAX) a zbytek po dělení bude v (AH, DX, EDX). Instrukce pro znaménkové rozšíření registru AL do AX. Používá se před znaménkovým dělením. Instrukce pro znaménkové rozšíření registru AX do AX-DX. Používá se před znaménkovým dělením. Instrukce pro znaménkové rozšíření registru EAX do EAX-EDX. Používá se před znaménkovým dělením.

2.4 Skokové instrukce JMP cíl Provádění programu se přenese na adresu danou operandem cíl. Většinou jde o jméno návěští, kam se řízení přesouvá, ale může jít i o cíl daný adresou v registru nebo v paměti. CALL cíl RET N Volání podprogramu. Stejně jako JMP, ale na vrchol zásobníku se uloží adresa instrukce následující za CALL. Z vrcholu zásobníku se odebere adresa na kterou se následně předá řízení. Jde tedy o návrat z podprogramu. Volitelný operand N odstraní z vrcholu zásobníku dalších N bytů. LOOP cíl Vyjádřeno jazykem C se provede: if ( --ECX ) goto cíl;. Jde o řízení cyklu, kde počet opakování je dán registrem ECX. Registr ECX se dekrementuje před vyhodnocením podmínky! LOOPE/Z cíl Vyjádřeno jazykem C se provede: if ( --ECX && ZF ) goto cíl;. LOOPNE/NZ cíl JCXZ cíl Jxx cíl Vyjádřeno jazykem C se provede: if ( --ECX &&!ZF ) goto cíl;. Provede skok na požadované místo jen pokud je registr ECX (CX) nulový. Skupina podmíněných skoků. První podskupina řeší elementární podmíněné skoky: Instrukce JZ/E, JNZ/NE, JS, JNS, JC, JNC, JO, JNO testují přímo jednotlivé bity ve stavovém registru procesoru. Druhá podskupina řeší porovnávání čísel: JB/JNAE/JC - menší než, není větší nebo rovno JNB/JAE/JNC - není menší, větší nebo rovno JBE/JNA - menší nebo rovno, není větší JNBE/JA - není menší nebo rovno, je větší JL/JNGE - menší než, není větší nebo rovno JNL/JGE - není menší, větší nebo rovno JLE/JNG - menší nebo rovno, není větší JNLE/JG - není menší nebo rovno, je větší

Ve výše uvedených instrukcích mají písmena A-B-L-G-N-E svůj pevně daný význam. Pro operace s bezznaménkovými operandy se používá A (above) a B (below). U operandů znaménkových se používá L (less) a G (greater). Pro negaci je N (not) a pro rovnost E (equal). INT číslo Vyvolá se programové přerušení číslo. IRET Návrat z přerušení. 2.5 Řetězcové instrukce Řetězcové instrukce jsou vázány na povinnou konvenci používaných indexových registrů a velikost operandu: ES:EDI - cílový operand. DS:ESI - zdrojový operand. B/W/D - velikost operandu 1, 2 a 4 byty. O tuto hodnotu se posouvají indexové registry. DF - směr posunu (direction flag), nula nahoru, jednička dolů. Před každou řetězcovou instrukci je možno ještě použít prefix: REP: while (--ECX)... REPE/Z: while (--ECX && ZF)... REPNE/NZ: while (--ECX &&!ZF)... Řetězcové instrukce jsou jen přesunové a porovnávací: MOVSB/W/D Přesune jeden prvek ze zdroje do cíle. S prefixem může provést přesun bloku paměti. LODSB/W/D Přesune jeden prvek ze zdroje do akumulátoru (AL, AX, EAX). STOSB/W/D Přesune obsah akumulátoru (AL, AX, EAX) do cíle. S prefixem může vyplnit blok paměti požadovanou hodnotou. SCASB/W/D Porovnává obsah akumulátoru s cílem. S prefixem lze použít k vyhledání požadované hodnoty, nebo nalezení prvního rozdílu. CMPSB/W/D Porovnává obsah zdroje a cíle. S prefixem lze hledat první shodu nebo první rozdíl.

INSB/W/D Přečte z portu na adresa DX jednu položku do cíle. OUTSB/W/D Jednu položku ze zdroje přesune na port na adrese DX. 2.6 Pomocné a řídící instrukce CLD DF nastaví na nulu. STD DF nastaví na jedničku. CLC CF nastaví na nulu. STC CF nastaví na jedničku. CMC Provede negaci (complement) CF. NOP Prázdná instrukce.