Úroveň strojového kódu procesor Intel Pentium Úvod Štruktúra procesorov Intel Pentium Základné inštrukcie Vetvenia a cykly Praktické programovanie jed

Podobné dokumenty
Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

Zobrazenie čísiel v počítači Celé nezáporné čísla - čísla bez znamienka dvojková sústava iné používané sústavy - šestnástková a osmičková BCD kódovani

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

Microsoft PowerPoint - Prog_p08.ppt

Algoritmizácia a programovanie - Príkazy

Informačné technológie

NÁVRH UČEBNÝCH OSNOV PRE 1

Paralelné algoritmy, cast c. 2

ECDL Syllabus V50 SK-V01

MATEMATICKÁ OLYMPIÁDA NA STREDNÝCH ŠKOLÁCH 54. ročník, školský rok 2004/2005 Zadania úloh 3. kola kategórie P 1. súťažný deň Na riešenie úloh máte 4.5

Hardwarové prerušenie Nasledujúci kód ukazuje inštaláciu obsluhy časovača vrátane jeho inicializácie // inicializace časovače, přerušení každou milise

Microsoft Word - 6 Výrazy a vzorce.doc

Snímka 1

enum

Vnútorná reprezentácia údajových typov

Republika Srbsko MINISTERSTVO OSVETY, VEDY A TECHNOLOGICKÉHO ROZVOJA ÚSTAV PRE HODNOTENIE KVALITY VZDELÁVANIA A VÝCHOVY VOJVODINSKÝ PEDAGOGICKÝ ÚSTAV

DediĊnosť

Organizácia počítačových systémov Procesory Vnútorná pamäť Vonkajšie pamäte Vstupné a výstupné zariadenia Autor: Peter Tomcsányi Niektoré práva vyhrad

Microsoft Word - MAT_2018_1 kolo.docx

Úvod do lineárnej algebry Monika Molnárová Prednášky 2006

Katalóg cieľových požiadaviek k maturitnej skúške

Prezentace aplikace PowerPoint

Analýza toku dát Ján Šturc Zima 2010 Kompilátory

03_ControlFlow.dvi

Microsoft Word - 06b976f06a0Matice - Uzivatelska Dokumentacia

8 Cvičenie 1.1 Dokážte, že pre ľubovoľné body X, Y, Z platí X + Y Z = Z + Y X. 1.2 Dokážte, že pre ľubovoľné body A, B, D, E, F, G afinného priestoru

Súkromné gymnázium, Česká 10, Bratislava INFORMATIKA

1 Rekurencie este raz riesenia niektorych rekurencii z cvik. mame danu rekurenciu napr T (n) = at ( n b ) + k. idea postupu je postupne rozpisovat cle

Multithreading a komunikácia medzi procesmi a threadmi, Časová závislosť, kritická sekcia a vzájomné vylúčenie, súvislosti medzi týmito pojmami Riešen

Výzva na predkladanie ponúk zadávanie zákazky podľa 9 ods. 9 zákona č. 25/2006 Z. z. o verejnom obstarávaní a o zmene a doplnení niektorých zákonov v

MO_pred1

Microsoft Word - mpicv11.doc

PowerPoint Presentation

4. Pravidlo ret azenia. Často sa stretávame so skupinami premenných, ktoré zložitým spôsobom závisia od iných skupín premenných. Pravidlo ret azenia p

Photo Album

ŤAHÁK PRAKTICKÁ ČASŤ Prerekvizity: LINUX: WINDOWS: Inštalácia Oracle VirtualBoxu a vytvorenie virtuálneho stroja /návod nižšie/ Operačný system Window

Control no:

Snímka 1

GEODETICKÝ A KARTOGRAFICKÝ ÚSTAV BRATISLAVA Chlumeckého 4, Bratislava II Obsah 1. Export údajov ZBGIS do CAD formá

Vzorové riešenia úlohy 4.1 Bodovanie Úvod do TI 2010 Dôvod prečo veľa z Vás malo málo bodov bolo to, že ste sa nepokúsili svoje tvrdenia dokázať, prič

Snímka 1

Cvičenie 9 Riešené príklady 1. Príklad min f(x 1, x 2 ) = x x x 1 s.t. x 1 80 x 1 + x Pre riešenie úlohy vykonáme nasledujúce kroky

Metódy násobenie v stredoveku

Relačné a logické bázy dát

Novinky programu MSklad

fm 2012 a predajňa.doc

Microsoft Word - ASB-12150U_ASB-15180U_SK

História

RIMI-NABDA, s.r.o. Zabezpečovací systém SecoLink RIMI NABDA, spol. s r.o. ul. Z. Kodálya 1421/ Sládkovičovo IČO: , DIČ:SK O

1. KOMPLEXNÉ ČÍSLA 1. Nájdite výsledok operácie v tvare x+yi, kde x, y R. a i (5 2i)(4 i) b. i(1 + i)(1 i)(1 + 2i)(1 2i) (1 7i) c. (2+3i) a+bi d

Žiadosť o licenčnú zmluvu na podujatie Na adrese v sekcii hlavného menu kliknete na položku Používatelia. Zobrazí sa blokové menu,

Autoregresné (AR) procesy Beáta Stehlíková Časové rady, FMFI UK Autoregresné(AR) procesy p.1/22

2.5. Dotyčnica krivky, dotykový kužeľ. Nech f je krivka a nech P V (f) (t.j. m P (f) 1). Ak m P (f) = r a l je taká priamka, že I P (f, l) > r, potom

Úrad pre dohľad nad zdravotnou starostlivosťou Žellova 2, Bratislava Dátové rozhranie pre spracovanie lekárskych poukazov - očná optika Strana

Criss Cross je 3-valcový výherný prístroj, ktorý sa hrá až na 27 výherných líniách na všetkých pozíciách valcov. Hra je prístupná aj prostredníctvom m

Podvojné účtovníctvo, fakturácia a sklad ekasa: štandardný predaj priamo z programu Pri predaji s priamym napojením na softvér je potrebné mať online

Stravné - přecenění

Microsoft Word - skripta3b.doc

Axióma výberu

Microsoft Word prist_prava_ Popadic.doc

VH ELECTRONICS Tel./Fax: , Sady Cyrila a Metoda 21/ Nová Dubnica SLOVENSKÁ REPUBLIKA Výrobca:

2

Microsoft Word - mnohouholnik.doc

Súhrnné špecifikácie

Príklad 5 - Benzén 3. Bilančná schéma 1. Zadanie príkladu n 1 = kmol/h Definovaný základ výpočtu. Na základe informácií zo zadania si ho bude v

Návod na obsluhu AX-7020

Príloha č. 4 Údaje tranzitného vyhlásenia spolu s údajmi PCV o vstupe / výstupe V prípade, ak bude spolu s elektronickým tranzitným vyhlásením predlož

Slide 1

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy Beáta Stehlíková Časové rady, FMFI UK, 2011/2012 Jednotkový koreň(unit roo

Microsoft PowerPoint - OOP_prednaska_10.pptx

Centrum vedecko-technických informácií, Odbor pre hodnotenie vedy, Oddelenie pre hodnotenie publikačnej činnosti Vyhľadávanie a práca so záznamami - C

Rozvojom spoločnosti najmä v druhej polovici minulého storočia dochádza čím ďalej tým viac k zásahu človeka do životného prostredia

Prenosový kanál a jeho kapacita

Import absencí z ASC

PS

Prístup a Nastavenie pre KOMPAKT HOSTING

17. medzinárodná vedecká konferencia Riešenie krízových situácií v špecifickom prostredí, Fakulta špeciálneho inžinierstva ŽU, Žilina, máj 2

Matematický model činnosti sekvenčného obvodu 7 MATEMATICKÝ MODEL ČINNOSTI SEKVENČNÉHO OBVODU Konečný automat predstavuje matematický model sekvenčnéh

Navigácia po úvodnej stránke elektronickej schránky Dátum zverejnenia: Verzia: 10 Dátum aktualizácie: Navigácia po úvodnej st

dFlex Nitra spol. s r.o.

B _UZP_rocne_zuctovanie_A5_0718.indd

Číslo zmluvy: 7118/2018 ZMLUVA O DODÁVKE ELEKTRINY vrátane prevzatia zodpovednosti za odchýlku so zabezpečením distribúcie elektriny a súvisiacich sie

Snímka 1

ZB_Daikin_SETUP_HPSU_compact_V52_ _00_0417_SK.book

test z informatiky - hardvér Test vytvoril Stanislav Horváth Vstupno - výstupné zariadenia Otázka č.1: Aké zariadenie je na obrázku? (1 bod) a) vstupn

VH ELECTRONICS Tel./Fax: , Sady Cyrila a Metoda 21/ Nová Dubnica SLOVENSKÁ REPUBLIKA Výrobca:

midterm2019

Objektovo orientované programovanie

10 tipov pre tvoj forex úspech

Prehľad o umiestnení žiakov po prijímacom konaní na školský rok 2018/2019 Odbor 2697 K mechanik elektrotechnik v školskom systéme vzdelávania Plánovan

STRUČNÝ NÁVOD KU IP-COACHU

Paralelné algoritmy, cast c. 3

Telesá Príklady: 1) Vypočítajte objem a povrch pravidelného štvorbokého ihlana ak a = 10 cm s uhol ACV = 70 2) Kváder má rozmery a = 4 cm, b = 3 cm, c

Metodika práce s gitom Spôsob práce s gitom V projekte sa budú udržovať dve hlavné vetvy: - Master - Hlavná vetva, ktorá odráža otestovaný funkčný kód

Prezentace aplikace PowerPoint

Pokročilé programovanie mikropočítačov v jazyku C. Diel č.2 Publikované: , Kategória: Mikroprocesory Skúmame ADCčko Ahoj

Prepis:

Úroveň strojového kódu procesor Intel Pentium Úvod Štruktúra procesorov Intel Pentium Základné inštrukcie Vetvenia a cykly Praktické programovanie jednoduchých assemblerových funkcií Autor: Peter Tomcsányi, Niektoré práva vyhradené v zmysle licencie Creative Commons http://creativecommons.org/licenses/by-nc-sa/3./ 1/15

Štruktúra 32-bitových procesorov Intel Pentium EAX EBX ECX EDX ESI EDI EBP ESP Všeobecné registre 31 15 7 15 AH AX AL BH BX BL CH CX CL DH DX DL SI DI BP SP 31 EFLAGS EIP CS SS DS ES FS GS Segmentové registre Register príznakov Adresa nasledujúcej inštrukcie Pomocný smerník do zásobníka Adresa vrcholu zásobníka 2/15

Štruktúra 32-bitových procesorov Intel Pentium Register príznakov: 31 3 29 28 27 26 25 24 23 22 21 2 19 18 17 16 ID VIP VIF AC VM RF NT IOPL OF DF IF TF SF ZF AF PF 15 14 13 12 11 1 9 8 7 6 5 4 3 2 1 Niektoré príznaky sú výstupom z ALU - po vykonaní aritmetickej alebo logickej operácie nimi ALU oznamuje niektoré vlastnosti výsledku: CF - Carry flag je N+1-vý bit N-bitovej aritmetickej operácie, teda ak je 1, tak sa výsledok operácie s číslami bez znamienka "nezmestil" do N bitov, v prípade neznamienkovej operácie to znamená pretečenie. Dá sa nastavovať aj programovo špeciálnymi inštrukciami. PF - Parity Flag dopĺňa najnižší bajt výsledku do nepárneho počtu jednotiek AF - Auxiliary Carry Flag obsahuje prenos z dolných štyroch bitov ZF - Zero Flag je nastavený na 1 práve vtedy ak bol výsledok operácie nula SF - Sign Flag obsahuje kópiu najvyššieho bitu výsledku, teda je pre nezáporné výsledky a 1 pre záporné výsledky OF - Overflow Flag je nastavený na 1 práve vtedy ak výsledok operácie s číslami so znamienkom "nezmestil" do N bitov - pretečenie Iné príznaky umožňujú programátorovi nastaviť alebo zistiť isté nastavenie alebo režim práce procesora DF - Direction Flag určuje z ktorej strany sa vykonávajú reťazcové inštrukcie IF - Interrupt Enable Flag určuje, či sú dovolené prerušenia TF - Trap Flag prikazuje procesoru vykonať za každou inštrukciou ladiace prerušenie IOPL - Input-Output Privilege Level určuje najnižšiu úroveň oprávnenia pre vykonávanie vstupných a výstupných inštrukcií 3/15 1 CF

Základné inštrukcie procesora Intel Pentium Presuny údajov Logické inštrukcie MOV EAX,EBX MOV EAX, 5 MOV EBX,AL MOVSX EBX,AL MOVZX EBX,AL XCHG AL,AH Aritmetické inštrukcie ADD EAX,EBX EAX = EBX Nerovnaké dĺžky EAX = EAX+EBX OR EAX,EBX 111111111111111111111 1111111111111111111 11111111111111111111111111111 SUB BH,6 ADC EAX,EBX EAX = EAX+EBX+ CF AND AX,15 Nechá len 4 najspodnejšie bity MUL CL AX = AL*CL TEST AL,7 (neznamienkovo) IMUL CL AX = AL*CL (znamienkovo) CMP EBX,5 Vypočíta EBX-5 ale výsledok nikam neuloží Vypočíta AL AND 7 ale výsledok nikam neuloží Väčšinou po nej nasleduje podmienený skok Väčšinou po nej nasleduje podmienený skok EAX EBX Výsledok v EAX 1 OR 1 = 1 4/15

Prvý príklad lineárny výpočet Naprogramujte funkciu, ktorá na vstupe dostane dve 32-bitové celé čísla so znamienkom A a B a jej výsledkom bude hodnota výrazu 2*A+4*B long pocitaj(long a, long b) { asm long je 32-bitové celé číslo so znamienkom } { mov eax, a add eax, b add eax, b add eax, eax } ako operandy môžeme používať identifikátory premenných (detaily sa dozvieme neskôr) to, čo je teraz v EAX, bude výsledkom funkcie Pre programovanie v strojovom kóde je typické, že sa pri jednoduchom aritmetickom výpočte snažíme vyhnúť inštrukciám násobenia lebo ich použitie spotrebuje veľa registrov a zneprehľadní kód. 5/15

Rotácie a posuny ROL SHL ROR CF N-1 CF SAL N-1 RCL RCR CF N-1 CF N-1 CF SHR SAR N-1 N-1 CF CF N-1 N-1 CF Všetky tieto inštrukcie majú tvar INSTRUKCIA cieľ, imm8/cl Prvý operand je register alebo pamäťové miesto, ktoré sa rotuje alebo posúva. Druhý operand určuje o koľko bitov sa rotuje alebo posúva a je priamy (teda číslo napr. 1 alebo 2 alebo 7) alebo register CL (počet bitov je daný obsahom registra CL). (bit N-1 zostáva na mieste aj sa skopíruje do bitu N-2) 6/15

Vetvenie programu Namiesto štrukturovaných príkazov C (alebo Pythonu) sa program v strojovom kóde vetví pomocou podmienených skokov, ktoré typicky (ale nie vždy) nasledujú po operácii porovnania. znamienkovo väčší lebo x aj y sú znamienkové typy porovnanie long x; if (x == 5) { príkazy } MOV EAX,x CMP EAX,5 JNE a1 { príkazy } a1: podmienený skok je opačný než céčkový operátor lebo hovorí: ak sa EAX nerovná 5 tak preskoč <príkaz1> Pri nerovnostiach musíme vedieť, či sú čísla chápané znamienkovo (v dvojkovom doplnku) alebo neznamienkovo. Kompilátory jazykov ako Pascal alebo C to zistia z deklarácie premenných (viď Celočíselné typy v C), v strojovom kóde na to ale musí myslieť programátor. long x, y; if (x > y) { príkazy1 } else { príkazy2 } MOV EDX,x CMP EDX,y JLE a1 { príkazy1 } JMP a2 a1:{ príkazy2 } a2: nepodmienený skok Skoč ak je znamienkovo menší alebo rovný - zase opačný skok 7/15

Jednoduché cykly unsigned char a, b; while (a < b) { príkazy } a2:mov CL, a CMP CL, b JAE a1 { príkazy } JMP a2 a1: Používame opačné skoky Pri nerovnostiach záleží, či ide o čísla so znamienkom alebo bez znamienka. Tentokrát je a aj b bezznamienkový typ, preto použijeme neznamienkový skok JAE. signed short s; do { príkazy } while (s <= 18); a1:{ príkazy } MOV BX, s CMP BX, 18 JLE a1 Tu jediný je (jediný raz) porovnanie rovnaké ako skok v strojovom kóde. Je znamienkový lebo s je signed short. 8/15

Jednoduché cykly typu for for (i=; i < 1; i++) { príkazy } MOV ECX,1 a1:{ príkazy } LOOP a1 unsigned long n; for (i=; i < n; i++) { príkazy } MOV ECX,n JECXZ a2 a1:{ príkazy } LOOP @1 a2: Cyklus typu opakuj N-krát. Tento prístup funguje len ak je počet opakovaní nenulový. LOOP a1 znamená: DEC ECX JNZ a1 Teda zníži ECX o jednu a ak výsledok nie je nula, tak skočí na a1 Vo všeobecnosti (napr. keď je počet opakovaní výsledok predošlého výpočtu), musíme pridať test na nulu Ak môže byť výsledok predošlého výpočtu aj záporný, tak musí byť kód ešte zložitejší Pre všeobecný tvar cyklu for alebo ak vo vnútri cyklu potrebujeme premennú i sa musí cyklus for rozpísať na while. 9/15

Druhý príklad cykly a vetvenia skúsme to najprv v C Naprogramujte funkciu: unsigned char pocet1c(unsigned long x) Jej výsledkom je počet jedničiek v dvojkovom zápise čísla x. Riešenie z Cvičení 1: unsigned char pocet1c(unsigned long x) { unsigned char res = ; } while (x) { res += x & 1; x = x >> 1; } return res; 1/15

Druhý príklad cykly a vetvenia Prepíšme do assembleru Naprogramujte assemblerovú funkciu: unsigned char pocet1a(unsigned long x) Jej výsledkom je počet jedničiek v dvojkovom zápise čísla x. unsigned char pocet1a(unsigned long x) { asm { mov ebx, x mov al, // res = ; a1: cmp ebx, // while (x!= ) { je a2 mov cl,bl and cl,1 add al,cl // res += x & 1; shr ebx,1 // x = x >> 1; jmp a1 // } a2: // return res; }} V C bolo while(x) ale uvedomme si, že to znamená while (x!= ) 11/15

Druhý príklad cykly a vetvenia Vylepšime Naprogramujte assemblerovú funkciu: unsigned char pocet1a2(unsigned long x) Jej výsledkom je počet jedničiek v dvojkovom zápise čísla x. unsigned char pocet1a2(unsigned long x) { asm { mov ebx,x mov al, // res = ; // do { a1: shr ebx,1 // CF = x & 1; x = x >> 1; adc al, // res += CF; cmp ebx, // } while (x!= ); jne a1 // // return res; }} 12/15

Tretí príklad Naprogramujte assemblerovú funkciu: unsigned char obratene_cislo(unsigned char x) Jej výsledkom je číslo, ktoré vznikne obrátením zápisu x v dvojkovej sústave. unsigned char obratene_cislo(unsigned char x) { asm { // res = ; // v asm netreba (prečo?) mov bl,x mov ecx,8 // for (i = ; i < 8; i++) { a1: shr bl,1 // CF = x & 1; x = x >> 1; rcl al,1 // res = (res << 1) + CF; loop a1 // } // return res; }} 13/15

Štvrtý príklad Naprogramujte assemblerovú funkciu: bool je_palyndrom(unsigned long x) Jej výsledkom je true, práve vtedy ak je zápis vstupnej hodnoty x v dvojkovej sústave na 32 bitov palyndróm. bool obratene_cislo(unsigned long x) { asm { mov ebx,x // Otočíme x podľa 3. príkladu mov ecx,32 // ale teraz je x 32-bitové a1: ror ebx,1 // ror namiesto shr zachová x rcl eax,1 // v eax (prečo?) loop a1 cmp eax,ebx // if (otocene_x == x) jne a2 mov al,1 // return true; jmp a3 // else a2: mov al, // return false ; a3: }} Poznámka: bool je zobrazený v jednom bajte, je false a 1 je true. Je určite k dispozícii v MS C, v iných/starších verziách sa používa int a konštanty /1 14/15

Štvrtý príklad - Vylepšime Naprogramujte assemblerovú funkciu: bool je_palyndrom(unsigned long x) Jej výsledkom je true, práve vtedy ak je zápis vstupnej hodnoty x v dvojkovej sústave na 32 bitov palyndróm. bool obratene_cislo(unsigned long x) { asm { mov ebx,x // Otočíme x podľa 3. príkladu mov ecx,32 // ale teraz je x 32-bitové a1: ror ebx,1 // ror namiesto shr zachová x rcl eax,1 // v eax (prečo?) loop a1 cmp eax,ebx // return otocene_x == x; sete al }} Inštrukcia sete al dá do al 1 práve vtedy ak by skok je skočil (teda ak cmp nastavil EFLAGS tak, že sa jeho operandy rovnajú). Inak povedané: sete prevedie výsledok porovnania z bitov EFLAGS do hodnoty typu bool 15/15