Bevezetés a számítástechnikába, Címzési módok, Assembly Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. november 2/9.
ú utasítás Binárisan kódolt vezérlő információ, amely a processzort valamilyen művelet végrehajtására utasítja A számítógépek gépi utasításainak összességét a számítógép gépi nyelvének nevezzük. A gépi nyelv általában kötött. Egy gépi kódú program csak akkor futtatható egy adott számítógépen, ha a gép tudja értelmezni a gépi kódú a programot illető gép "nyelvén" írták ú utasítás műveleti rész operandusrész (összetett: pl. "ADD"-nál tartalmazza a számok tárcímeit + hova kell a végeredményt rakni) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 2 / 41
4 címes utasítás Részei: műveleti kód első operandus tárcíme második operandus tárcíme eredmény címe közvetkező végrehajtandó utasítás címe A 4 utasításból álló program nagy helyet foglal a tárban A mai gépeken az utasítások nincsenek "láncra fűzve" (korai számítógépeken használták) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 3 / 41
3 címes utasítás PC használata nincs láncrafűzött utasítássor 3 cím is elég Vezérlő Egységben (VE) speciális tárrekesz regiszter Regiszter (saját címe van) operandus részben szerepelhet Regiszter utasítások gyorsak HW felépítés + beírás/kiolvasás a memóriából nem kell Eredmény címe lehet operatív tár rekeszcíme, de lehet ALU regiszter is 4 és 3 címes utasítások hibája a nagy helyfoglalás A mai számítógépeken nem használják (elavultnak tekinthető) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 4 / 41
2 címes utasítás A korszerű számítógépek utasítása operandusok címe helyett közvetlen adat is lehet (ritkán célszerű programmódosítás) Vezérlő Egységben (VE) speciális tárrekesz regiszter Regiszter (saját címe van) operandus részben szerepelhet Regiszter utasítások gyorsak HW felépítés + beírás/kiolvasás a memóriából nem kell Kétcímes utasításokban nincs eredmény eredmény 1. operandus helyére (Ha szükség van még rá, akkor menteni kell!) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 5 / 41
1+1 címes utasítás A korszerű számítógépek utasítása Egyetlen operandus címezhető a másik már eleve a vezérlőegység valamelyik regiszterében van Külön utasítással kell oda betölteni a másik operandust műveletvégzés előtt, az eredmény a vezérlőegység regiszterében képződik. operandusok címe helyett közvetlen adat is lehet (ritkán célszerű programmódosítás) Vezérlő Egységben (VE) speciális tárrekesz regiszter Regiszter (saját címe van) operandus részben szerepelhet Regiszter utasítások gyorsak HW felépítés + beírás/kiolvasás a memóriából nem kell Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 6 / 41
1 címes utasítás Egyszerűbb processzoroknál utasítások (8 bites µp) egycímesek Egyik operandus valamint a végeredmény az ALU speciális regiszterébe (akkumulátor) kerül. Egyetlen operandus címezhető a másik már eleve a vezérlőegység valamelyik regiszterében van Külön utasítással kell oda betölteni a másik operandust műveletvégzés előtt, az eredmény a vezérlőegység regiszterében képződik. operandusok címe helyett közvetlen adat is lehet (ritkán célszerű programmódosítás) Vezérlő Egységben (VE) speciális tárrekesz regiszter Regiszter (saját címe van) operandus részben szerepelhet Regiszter utasítások gyorsak HW felépítés + beírás/kiolvasás a memóriából nem kell Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 7 / 41
végrehajtása Utasításban nincs kijelölve a következő végrehajtandó utasítás, processzor speciális rekesze (utasításszámláló (PC, Program Counter) Utasításregister (IP, Instruction Pointer)) tartalmazza a következő végrehajtandó utasítás címét Utasításoknak egymás után kell lenniük a memóriában (végrehajtás sorrendje!) Aktuális utasításhossz Program végrehajtásának menete: Betöltőprogram (loader) betölti a program gépi kódú utasításait Betöltési cím IP IP-ben lévő címről utasítás betöltése (műveleti kódból derül ki az utasítás hossza) Végrehajtás Következő utasítás vagy program vége Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 8 / 41
végrehajtása Némely utasítás nem a tárolási sorrend szerint hajtődik végrehajtás Például: Elágazás a programban (IF-THEN) más helyen kell folytatni a végrehajtást feltétel függvényében (utasítássorozat kikerülésére) vezérlésátadó vagy ugró utasítások Egyes utasítások operandus címén kívül meg kell adni a hosszát (Például: n és m jegyű BCD operandusok) műveleti kód 1. op. hossza 2. op. hossza 1. op. címe 2. op. címe Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 9 / 41
Kétcímes utasítás végrehajtása Kétcímes utasítás végrehajtása utasításszámláló regiszter (IP) ALU és az operatív tár közötti kommunikáció címregiszterrel (AR), adatregiszterrel (DR) VE adatot akar betölteni ALU-ba 1. térrekesz címétbetölti címregiszterbe (olvasási művelet ez alapján keresi meg) 2. olvasás: tár (adat) DR (íráskor cím AR, DR tár(adat)) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 10 / 41
Kétcímes utasítás végrehajtása 6 byte-os utasítás végrehajtásának lépései Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 11 / 41
Vezérlőegység működése Vezérlőegység működése Utasítások végrehajtása (lépések sokasága) címek kiszámítása műveleti kód dekódolása I/O processzor működtetése Rövidebb vezérlőjelsorozatok sokaságából állnak az utasítások Előállítása lehet: Mikroprogram Vezérlőjel sorozatot generál 1 utasítás 1 jellemző bitsorozat mikroprogram Mikroprogramtár Utasításkészlet Logikai áramkörökkel Huzalozott utasítások Adott utasítás meghatározott áramköri kapcsolatok Gyors, bonyolultabb Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 12 / 41
Címzési módok Címzési módok Programoknál előnyös, ha az operandusrészben (utasítás) nem a tárrekesz abszolútcíme áll kiszámításhoz szükséges adatok egy része, többi rész programon kívül adott Például (több felhasználó): A program nem mindig ugyanazon címre töltődik nem lehet abszolút címhivatkozást megvalósítani adattömb (kezdőcím + index) könnyen szervezhető utasítások több címzési mód Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 13 / 41
1. Közvetlen adathivatkozás Címzési módok Operátor helyén nem egy adat címe, hanem maga az adat szerepel műveleti kód innen adatot keres, és vesz fel a vezérlő Két operandusos műveleteknél: Az első operandus nem lehet adat (cím- vagy regiszter hívatkozás) kötött, nem változtatható a program megváltoztatása nélkül Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 14 / 41
2. Közvetlen címzés Címzési módok Az operandus abszolút tárcím Hátrányai: cím nehezen módosítható cím sok helyet foglal mindig ugyanarra a tárrekeszre vonatkozik Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 15 / 41
3. Regiszteres címzés Címzési módok Operandus nem az operatív tárban van, hanem a CPU egyik regiszterében Előny: operandusért nem kell a tárhoz fordulni gyors Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 16 / 41
4. Regiszteres indirekt címzés Címzési módok Utasítás operandusa egy címre való hivatkozás, ahol a tényleges adat címe található Előny: Különösen alkalmas tömbkezelésre Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 17 / 41
5. Indirekt címzés Címzési módok Operandus olyan tárcímre mutat, ami az adat címét tartalmazza Hátrány: kétszer kell az operatív tárhoz fordulni, ha az op.hossz nem elég a teljes tár címzésére (8bit 64k) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 18 / 41
6. Bázisregiszteres címzés Címzési módok Adat abszolút címe = bázisregiszterben (VE regiszterekben) lévő címkonstans (báziscím) + eltolási (displacement) cím (ALU adja össze) Programok áthelyezhetőségének alapja (bármelyik tárhelyen működőképes, több program egyidejű használatának lehetősége. Operációs rendszer betölti a báziscímet, 1 utasítással áthelyezhető) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 19 / 41
7. Indexregiszteres címzés Címzési módok Abszolút cím = indexregiszter tartalma + operandus cím abban különbözik a bázisregisztertől, hogy az indexregisztert a program maga is bármikor felülírhatja! elsősorban a programon belül adattömbök kezelésére szolgál Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 20 / 41
felépítése RR: műv. kód R1 R2 0 7 8 11 12 15 mindkét operandus a regiszterben van (16 regiszter 4 biten címezhető) RX: műv. kód R1 X2 B2 D2 0 7 8 15 16 20 31 1. operandus regiszterben 2. operandus a tárban címzése bázisregiszteres, címet indexregiszter módosítja 2.op.cme = X 2 + B 2 + D 2 X 2, B 2 általános célú regiszter (lehetnek 0 értékűek is!) D 2 eltolási mező (12 bit 4k címzése) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 21 / 41
felépítése RS: műv. kód R1 R3 B2 D2 0 7 8 15 16 20 31 R 1, R 3 általános célú regiszter; B 2, D 2 2. op. címét állítja elő 3 címes utasítás SI: műv. kód I2 B1 D1 0 7 8 15 20 31 1. operandus bázisregiszteres 2. operandus 1 byte-os adat (aritmetikai logikai műv.) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 22 / 41
felépítése SS1: műv. kód L B1 D1 B2 D2 0 7 8 15 36 47 bázisregiszteres címzés azonos hosszú operandusok: L operandusok byteokban kifejezett hossza pl. sztringmozgatás ( L = 8 bit max. 255 hosszú) SS2: műv. kód L1 L2 B1 D1 B2 D2 0 7 8 11 16 32 36 47 bázisregiszteres címzés eltérő hosszú operandusokat is kezel: L 1 1. operandus hossza L 2 2. operandus hossza alkalmas tömörített BCD kódú számokkal végzett aritmetikai műveletekre (L 1, L 2 15 max. 31-jegyű előjeles számú) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 23 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Intel 8086 regiszterei Intel 8086/80x86 regiszterei Spec. rend. reg. Címzés Vezérlő Szeg. reg. Akkumulátor Bázisregiszter Számolóregiszter Ált. (adat) reg. Index.reg. Index.reg. Verem bázisreg. Veremmutató Utasításmutató Jelzőszó Kód szeg.reg. Adat szegmens reg. Extra szeg.reg. Verem szegm.reg. AX BX (áthelyezhetőség) CX (ciklus) DX SI (source - forrás) DI (destination - cél) BP SP IP FLAG CS DS ES SS Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 24 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Intel 8086/80x86 regiszterei Intel 32 bites processzorainak regiszterei Spec. rend. reg. Címzés Vezérlő Szeg. reg. Akkumulátor Bázisregiszter Számolóregiszter Ált. (adat) reg. Index.reg. Index.reg. Verem bázisreg. Veremmutató Utasításmutató Jelzőszó Kód szeg.reg. Adat szegmens reg. Extra szeg.reg. Verem szegm.reg. EAX EBX (áthelyezhetőség) ECX (ciklus) EDX ESI (source - forrás) EDI (destination - cél) EBP ESP EIP EFLAGS CS DS FS GS ES SS Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 25 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Intel 8086/80x86 regiszterei Intel 32 bites processzorainak regiszterei Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 26 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Flag regiszter (i8086) Intel 8086/80x86 regiszterei NT IOPL OF DF IF TF SF ZF AF PF CF NT Noted flag egymásba ágyazott toldalékjelszó IOPL I/O privilege level flag IO kiváltságos szintjelző OF Overflow flag túlcsordulás DF Direction flag irány (sztringműveletek) IF Interrupt flag megszakítás engedélyezése TF Trap flag csapdajelző (lépésenkénti üzemmód) SF Sign flag előjel ZF Zero flag AG Auxillary carry flag PF Parity flag parítás jelző bit CF Carry flag átvitel Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 27 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Assembly nyelv Assembly nyelv Alacsonyszintű programozási nyelv Minden utasítás (nmemoric) a processzor 1 utasításának felel meg ( szöveges gépikód) Előnyök: Rövid tömör kód Csak a programozó által írt utasítások kerülnek végrehajtásra Alkalmazása: alacsony szintű függvények/eljárások Hátrányok: Hosszú fejlesztési idő Hardware függő Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 28 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Instruction Set Matrix Assembly nyelv Gépikód-Mnemonic kapcsolata grafikus formában Az operandusok jobban áttekinthetőek A gépikód visszakódolásánál hasznos Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 29 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése ADD - Összeadás (példa) Assembly nyelv Gépikód-Mnemonic Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 30 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése ADD - Összeadás (példa) Assembly nyelv Flagek: Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 31 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése ADD - Összeadás (példa) Assembly nyelv Végrehajtási idő Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 32 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Assembly nyelv Magasszintű nyelvek és az assembly kapcsolata (példa) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 33 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Utasításkészlet csoportosítása Intel 8086-os utasításkészlete Aritmetikai utasítások Logikai utasítások Vezérlésátadó utasítások Verem kezelő utasítások Adatokat manipulálló utasítások Lebegőpontos utasítások (Nem mindegyik CPU támogatja) Multimédiás utasítások (Pentium után) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 34 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Fontosabb aritmetikai utasítások Intel 8086-os utasításkészlete INC Increment by 1 DEC Decrement by 1 ADD Add ADC Add with carry SUB Subtraction MUL Unsigned multiply IMUL Signed multiply DIV Unsigned divide IDIV Signed divide DAA Decimal adjust AL after addition (BCD számításoknál) AAA ASCII adjust AL after addition (BCD számításoknál) NEG Two s complement negation Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 35 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Fontosabb logikai utasítások Intel 8086-os utasításkészlete AND Logical AND OR Logical OR XOR Exclusive OR NOT Negate the operand, logical NOT CMP Compare operands CMPSB Compare bytes in memory CLC Clear carry flag CLI Clear interrupt flag STC Set carry flag STI Set interrupt flag SHL Shift left (unsigned shift left) SHR Shift right (unsigned shift right) ROL Rotate left ROR Rotate right Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 36 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Fontosabb vezérlésátadó utasítások Intel 8086-os utasításkészlete Jxx Jump if condition (JA, JAE, JB, JBE, JC, JCXZ, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ) CALL Call procedure RET Return from procedure RETN Return from near procedure RETF Return from far procedure LOOP/LOOPx Loop control (LOOPE, LOOPNE, LOOPNZ, LOOPZ) REPxx Repeat CMPS/MOVS/SCAS/STOS (REP, REPE, REPNE, REPNZ, REPZ) WAIT Wait until not busy Megszakítással kapcsolatos utasítások INT Call to interrupt INTO Call to interrupt if overflow IRET Return from interrupt HLT Enter halt state Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 37 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Verem kezelő utasítások Intel 8086-os utasításkészlete POP Pop data from stack POPF Pop data into flags register PUSH Push data onto stack PUSHF Push flags onto stack Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 38 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Intel 8086-os utasításkészlete Fontosabb adatokat manipulálló utasítások MOV Move MOVSB Move byte from string to string MOVSW Move word from string to string LODSB Load byte LODSW Load word XCHG Exchange data XLAT Table look-up translation OUT Output to port IN Input from port Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 39 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Lebegőpontos utasítások végrehajtása A PC lebegőpontos és egyéb műveleteket végző utasításai 8087, (80287) FADD, FSUB, FMUL, FDIV FSQRT FWAIT, FCOMP 80387 (80487) FCOS, FSIN Pentium már képes lebegőpontos számításokra Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 40 / 41
Intel 8086/80x86/Px processzorok rövid ismertetése Egyéb utasításcsoportok A PC lebegőpontos és egyéb műveleteket végző utasításai MMX MMX+ EMMX 3DNow! (AMD K6-2) 3DNow!+ (AMD Athlon) SEE (Intel P3) SEE2 (Intel P4) SEE3 (Intel P4) SSSE (Intel Xeon) SEE4 (Intel Core2, Phenom, Nehalem) Intel AVX FMA (Advanced Vector Extensions Fused Multiply-add ) Fodor Attila (Pannon Egyetem) Bevezetés a számítástechnikába 2010. november 41 / 41