Programátorský model x86

Podobné dokumenty
Procesor z pohledu programátora

ISU Cvičení 3. Marta Čudová

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

ISU Cvičení 7. Marta Čudová

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

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

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

REbejs. 1. workshop (draft0)

Adresní mody procesoru

Michal Brandejs. Mikroprocesory Intel

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

Assembler DRUHÁ ČÁST OBSAH.

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

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

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

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

Michal Brandejs. Mikroprocesory Intel Pentium

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

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

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

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

x86 assembler and inline assembler in GCC

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

Komerèní využití stavebních návodù je povoleno jen s písemným souhlasem autora a nakladatelství. Soubory na CD ROM mající pøímo vztah ke knize, které

IMTEE Přednáška č. 8. interrupt vector table CPU při vzniku přerušení skáče na pevně dané místo v paměti (obvykle začátek CODE seg.

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

) skoky (nepodmínìné a podmínìné) þneproduktivníÿ operace. pomìrnì dlouhá

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

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

MCP BIOS řídicí jednotky Kit386EXR

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

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

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

Vnitřní a vnější paměti Část: vnitřní paměti

Popis instrukční sady procesoru ADOP


Podrobný obsah CHARAKTERISTIKA A POROVNÁNÍ ØADY PIC16F87X A PIC16F87XA TYPY POUZDER A PØIØAZENÍ VÝVODÙ PIC16F87X TYPY POUZDER A PØIØAZENÍ

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

Adapter ROM BIOS. Fakulta informačních technologií VUT v Brně Ústav informatiky a výpočetní techniky. Personální počítače, technická péče cvičení

Přerušovací systém s prioritním řetězem

Srovnání procesorů řady 80x86 Procesor 8086


Vnitřní a vnější paměti Část: vnitřní paměti

Přidělování paměti II Mgr. Josef Horálek

DOKOPO. Komunikaèní karta se samostatným procesorem a dual-port pamìtí. Technická pøíruèka. verze 2.0. A plikace Mikroprocesorové Techniky

ISU Cvičení 2. Marta Čudová

Pohled do nitra mikroprocesoru Josef Horálek

Algoritmizace a programování

Přerušení POT POT. Přerušovací systém. Přerušovací systém. skok do obslužného programu. vykonávaný program. asynchronní událost. obslužný.

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

Princip funkce počítače

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

Pohled do nitra mikroprocesoru

/2*,.$ 5(6(7 Ë=(1Ë +$/7 *(1(5È ',129é & 6./ $/8. ' /,ý. ýë7$ý 5(*,675 5(*, é. 6e5,29é 5(*,675 * $.808/È725 5:0. %8',ý(/ 45(*,675 5(*

Pamět ová hierarchie, virtuální pamět. doc. Ing. Róbert Lórencz, CSc.

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

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

B4B35OSY: Operační systémy

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Architektura počítačů

ISU Cvičení 2. Marta Čudová

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

ŘÍZENÍ ELEKTRICKÝCH POHONŮ. Systémová struktura počítače Řízení běhu programu. České vysoké učení technické Fakulta elektrotechnická

1 Systémová volání (celkem max. 1b)

RISC a CISC architektura

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

HelenOS ARM port. Pavel Jančík Michal Kebrt Petr Štěpán

Instrukční soubory, registrové struktury, způsoby adresace. INP 2008 FIT VUT v Brně

Systém přerušení. Algoritmizace a programování. Struktura počítače - pokračování. Systémová struktura počítače pokrač.


Architektury CISC a RISC, uplatnění v personálních počítačích

Memory Management vjj 1


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



Operační systémy. Přednáška 8: Správa paměti II

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Systémová struktura počítače

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

Katolícka univerzita v Ružomberku Pedagogická fakulta. programovací jazyk ASSEMBLER. 1. ročník IN-FY

Přednáška. Strojový kód a data. 4. Přednáška ISA J. Buček, R. Lórencz

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

Sběrnicová architektura POT POT. Jednotlivé subsystémy počítače jsou propojeny sběrnicí, po které se přenáší data oběma směry.

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

Jednočipové mikropočítače

Periferní operace využívající přerušení

Memory Management vjj 1

Mikrořadiče řady 8051.

poèáteèní nastavení vyhodnocení efektivní pøeru¹ení ¹íøka datové sbìrnice: 1 slovo

Linux a 64 bitů. SUSE Labs. Michal Ludvig Vojtěch Pavlík

Dekódování adres a návrh paměťového systému

Operační systémy a programování

Segmentovanie a stránkovanie v procesoroch Intel Pentium

Historie osmibitových mikroprocesoru a mikroradicu ZILOG.

09. Memory management. ZOS 2006, L.Pešička


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

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

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

Transkript:

Úvod Programátorský model x86 - programátorským modelem se rozumí soubor vlastností a fyzických souèástí procesoru, které ovlivòují jeho programování v nízkoúrovòových jazycích - zejména popisuje uspoøádání pamìti, využitelné registry, nativní typy dat daného procesoru, instrukèní soubor, pøerušovací systém, atp.

Registry - I. Všeobecné registry procesoru x86 (od 80386 dále) 31 23 EAX EBX ECX EDX ESI EDI EBP ESP 15 7 0 AH AX AL BH CH DH BX CX DX SI DI BP SP BL CL DL }všeob. støadaèe (Accumulators) Source Index Destination Index Base Pointer Stack Pointer - tyto registry jsou obecnì použitelné v programu k doèasnému ukládání dat (až na ESP - s tím opatrnì) - naplòují se instrukcí MOV reg, hodnota, napø. MOV BL, 5

Registry - II. Segmentové registry procesoru x86 (od 80386 dále) 15 7 0 CS DS SS ES FS GS Code Segment Data Segment Stack Segment Extra Segment Extra Segment Extra Segment - viditelná èást segmentových registrù je 16-bitová, plnit je lze instrukcí MOV nebo spec. instrukcemi LDS, LES, LFS, LGS a LSS, napø. LDS EBX, dword-ptr, která umístí do registrového páru DS:EBX 32-bitovou adresu dword-ptr - zmìna obsahu CS má fatální následky (CS obsahuje tzv. selektor kódového segmentu)

Registry - III. Registry se zvláštním významem CS:EIP (Extended Instruction Pointer) selektor segmentu není to pøímo adresa v pamìti, jedná se o index do tabulky GDT/LDT (Global/Local Descriptor Table), pozice GDT je v registru GDTR, LDT v registru LDTR EIP ukazuje na pozici v kódovém segmentu, kde leží právì provádìná instrukce, tj. pár CS:EIP udává pozici právì vykonávané instrukce EIP 8A00 8A01 8A02 8A03 8A04 8A05 8A06 8A07 8A08 8A09 8A0A 8A0B 8A0C 8A0D 8A0E 8A0F 8A10 CS ADD EAX, 5 MUL EAX, EBX JC 8A0A SHR EAX, 1 CMP EAX, 0 JE 8A0D NEG EAX JMP 8A0F... Toto je pouze ilustrativní obrázek - instrukce ve skuteènosti nezabírají stejné množství pamìti...

Registry - IV. Registry se zvláštním významem CS:EIP - pozice vykonávané instrukce programátora (zvláštì (mìní ji sám procesor) SS:ESP - pozice vrcholu zásobníku nezkušeného) (mìní ji instrukce PUSH a POP)}pro read-only! DS:ESI - zdrojová adresa pro instrukce blokového pøesunu dat (MOVS/MOVSB/MOVSW) ES:EDI - cílová adresa pro instrukce blokového pøesunu dat LDS SI, <adresa zdrojového øetìzce> LES DI, <adresa cílového øetìzce> MOV CX, <poèet prvkù øetìzce> REP MOVSB kopírování øetìzce (pole bytù)

Registr EFLAGS Pøíznakový registr EFLAGS (32-bitový) Obsahuje dva druhy vlajek (1-bitových pøíznakù): (i) nastavované procesorem po provedení instrukce indikují vlastnosti výsledku (CF, PF, AF, ZF, SF, OF), (ii) nastavované programátorem øídí èinnost procesoru (TF, IF, DF, VM, RF, NT, IOPL). Virtual-Mode Direction Interrupt-Enable Trap 0 0 0 0 0 NT IOPL 0 OF 0 DF 0 IF Resume 17 16 0 0 0 0 0 0 0 VM RF TF SF ZF 0 AF 0 PF 1 CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Nested-Task I/O-Privilege-Level Overflow Sign Zero Aux Carry Parity Carry

Typy dat Typy dat - byte (8 bitù), deklarace v asm instrukcí DB (Define Byte) - word (16 bitù), deklarace DW (Define Word) - dword (32 bitù), deklarace DD (Define Double-word) - qword (64 bitù), deklarace DQ (Define Quad-word) Jako operandy instrukcí akceptuje 80386 maximálnì 32 bitù ve 32-bitových registrech (E??). Nìkteré instrukce pracují i se 64-bitovými slovy, ta se pak pøedávají v registrových párech EAX & EDX a EBX & ECX (vždy takto spolu)..data mstr db 'Hello', 0 xp db 100 icnt dw? ptrs dd 20 dup(0).code...

Edian Endian procesoru (èili uspoøádání bytù ve slovech) Procesory Intel (a jejich klony) používají Little Endian, tj. nižší øády jsou na nižších adresách: 8E07 78h 8E08 56h 12345678h 8E09 34h 8E0A 12h } Procesory Motorola, AIM PowerPC (po G5), Sun SPARC (starší verze do V9), IBM System/370 používají Big Endian, tzn. nižší øády na vyšších adresách (vlastnì tak, jak se èíslo píše na papír). Nìkteré procesory umí endian podle potøeby pøepínat, napø. ARM, SPARC V9, MIPS, PA-RISC, IA64, DEC Alpha, nìkteré PowerPC => tzv. Bi-Endian.

Pøerušení - I. Pøerušení (8086) - tabulka pøerušovacích vektorù je umístìná na fyzickém poèátku pamìti od adresy 0000:0000 - adresa ukazuje na zaèátek obslužné rutiny pøerušení (musí konèit instrukcí IRET) - pøerušení mùže být vyvolané buï HW (z vnìjšku pøivedením log. úrovnì na daný pin procesoru) nebo SW instrukcí INT n - HW pøerušení lze maskovat vynulováním pøíznaku IF instrukcí CLI (kromì vnitøních a NMI). 03FC 000C 0008 0004 0000 segment offset INT 0FFh... segment segment segment segment offset offset offset offset INT 3 INT 2 INT 1 INT 0 8E07 8E08 8E09 8E0A... XOR AX, AX IN AX, 00h NOT AX IRET...

Pøerušení - II. Èinnost CPU pøi pøerušení (8086) Nastalo pøerušení n nebo CPU dekódoval instrukci INT n: (i) do zásobníku se uloží registr pøíznakù (FLAGS), (ii) vynulují se pøíznaky IF a TF, (iii) do zásobníku se uloží registr CS, (iv) CS se naplní obsahem adresy n * 4 + 2, (v) do zásobníku se uloží IP ukazující na další neprovedenou instrukci, (vi) IP se naplní obsahem adresy n * 4. INT n Význam 0 1 2 3 4 Dìlení nulou (Divide By Zero) Krokovací režim (Single-Step) Nemaskovatelná pøerušení (NMI) Ladicí bod (Breakpoint Trap) Pøeplnìní (Overflow Trap) } záleží na operaèním systému, jak tato pøerušení obslouží

Pøerušení - III. Pøerušení (80386 a dále) - zjednodušenì - tabulka popisovaèù segmentù obsluhy pøerušení (IDT = Interrupt Descriptor Table) mùže být umístìna kdekoliv v pamìti, adresa IDT je umístìna v registru IDTR (ète/plní se instrukcí SIDT/LIDT) - položka IDT se nazývá popisovaè brány pøerušení, brány jsou pro (i) maskovatelná pøerušení (Interrupt Gate) a (ii) nemaskovatelná pøerušení (Trap Gate) 000C 0008 0004 0000 IDTR báze 0000h selektor 0000h selektor 0000h selektor.. limit oprávnìní offset oprávnìní offset oprávnìní offset a INT 1 INT 0 8E07 8E08 8E09 8E0A... XOR AX, AX IN AX, 00h NOT AX IRET...

Podprogramy - I. Volání podprogramù - záleží na pamì ovém modelu, jaká návratová adresa se ukládá do zásobníku - pøedávání parametrù je na programátorovi èi pøekladaèi STACK SEG...0A18 0000...0A16 0020...0A14 001C...0A12 0E7F }...0A10 2007 }EAX SS:ESP zásobník je adresovaný po wordech (16-bit) 0E7F2001 0E7F2002 0E7F2007 0E7F2009 F00A80E0 F00A80E3 F00A80E4 CODE SEG PUSH EAX CALL 001C:F00A80E0 CMP EAX, 0 JE 0E7F201C MOV EAX, SS:[ESP+6] ADD EAX, 1 RETF

Podprogramy - II. Volání podprogramù (assembler) - pokud se externí modul v assembleru linkuje k programu pøeloženému pøekladaèem C, musí se shodovat pamì ový model a volací konvence (zpùsob pøedávání p-metrù) - rùzné pøekladaèe používají rùzné PM a VK _TEXT SEGMENT WORD PUBLIC 'CODE' public _power2 _power2 proc near push ebp mov ebp, esp mov eax, [ebp+4] ; mov ecx, [ebp+6] shl eax, cl pop ebp _power2 _TEXT ret endp ends END pamì ový model FLAT tj. CS = DS = ES = SS první argument ; druhý argument ; EAX = EAX * ( 2 ^ CL ) assembler MASM-like, pøekladaè Microsoft Visual C/C++ 2005

Pamì ové modely Pamì ové modely - pamì ový model urèuje, jaká èást programu je umístìna v jakém segmentu (kód, data, zásobník), èím jsou tedy naplnìné segmentové registry a jak velké jsou pointery - situace je ponìkud nepøehledná, na 16-bitové platformì Intel x86 existuje 6 pamì ových modelù: TINY, SMALL, MEDIUM, COMPACT, LARGE, HUGE - moderní 32- a 64-bitové platformy používají zejména model FLAT, což je obdoba TINY, tj. všechny segmentové registry jsou nastavené na stejnou hodnotu - výše uvedený pamì ový model se takto jeví z hlediska programátora, nikoliv operaèního systému - ten techniku segmentace pamìti využívá (oprávnìní, stránkování, atd.) - problematika je znaènì rozsáhlá a komplikovaná, mimo rámec pøedmìtu PC, zájemci http://www.intel.com

Porty, V/V operace Komunikace procesoru s okolními zaøízeními - dìje se pomocí I/O portù, sbìrnice mùže pøenášet data buï mezi CPU a pamìtí nebo ostatními zaøízeními na MB - signál M/IO urèuje, za adresa nastavená na adresních vodièích A - A je adresou pamìti nebo I/O portu 0 15 @L1: mov al, 0Ah ; 0Ah - offset valid out 70h, al ; 70h - CMOS index port in al, 71h ; 71h - CMOS data port test al, 10000000b jnz @L1 ; bit7 = 1, znovu xor al, al out 70h, al in al, 71h ; èteme bajt 0 - sekundy in eax, 61h in eax, dx out 20h, eax out dx, eax