Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaAdél Szilágyiné Megváltozta több, mint 10 éve
1
Máté: Architektúrák7. előadás1 A verem két felső szavának cseréje Megállapodás szerint TOS tartalmazza a verem tetején lévő szót! Ez többnyire előny, de néha hátrány! Most hátrány! swap6 csak TOS frissítése miatt kell! swap1MAR = SP – 1; rd // A 2. szó címe, olvasás. swap2MAR = SP // MAR a verem tetejére mutat. swap3H = MDR; wr // 2. szó H-ba, verem tetejére. swap4MDR = TOS // verem teteje swap5MAR = SP – 1; wr // a 2. szóba. swap6TOS = H; goto Main1 // TOS frissítése.
2
Máté: Architektúrák7. előadás2 A WIDE utasítás A WIDE utasítás valójában prefixum: önmagában nem csinál semmit, csak jelzi, hogy a következő utasításnak 16 bites indexe van. Pl.: ILOAD varnumlokális változó verembe varnum a lokális változó 8 bites indexe. WIDE ILOAD varnumlokális változó verembe varnum a lokális változó 16 bites indexe. w_iload1 címe = iload1 címe + 0x100
3
Máté: Architektúrák7. előadás3 *) MDR most kapott értéket! iload1H = LV iload2MAR = MBRU + H; rd iload3MAR = SP = SP + 1 iload4PC = PC + 1; fetch; wr // * iload5TOS = MDR; goto Main1 wide1PC = PC + 1; fetch; goto(MBR OR 0x100) w_iload1PC = PC + 1; fetch // index 2. bájtja w_iload2H = MBRU << 8 // 1. bájt léptetése w_iload3H = MBRU OR H // H = a 16 bites index w_iload4MAR = LV + H; rd; goto iload3
4
Máté: Architektúrák7. előadás4 INVOKEVIRTUAL disp (~4.12. ábra), A CPP által mutatott területen a disp (2 bájt) indexű szó mutat a meghívandó metódus kezdő szavára. Ennek a szónak - az első két bájtja tartalmazza a metódus paramétereinek számát, - a második két bájtja a metódus lokális változóinak számát. A metódus végrehajtása a metódus 5. bájtján indul.
5
Máté: Architektúrák7. előadás5 INVOKEVIRTUAL disp // ~4.12. ábra A CPP által mutatott táblázat disp indexű eleme mutat a meghívandó metódusra. disp első bájtját Main1 már beolvasta MBR-be. invo1PC = PC + 1; fetch // disp 2. bájtját olvassa invo2H = MBRU << 8 // disp 1. bájtját lépteti invo3H = MBRU OR H // H = disp invo4MAR = CPP + H; rd // kezdő cím olvasása invo5OPC = PC + 1 // visszatérési cím
6
Máté: Architektúrák7. előadás6 INVOKEVIRTUAL: paraméterek száma 2 bájt a metódus elején invo6PC = MDR; fetch // PC: új metódus eleje invo7PC = PC + 1; fetch // paraméterek száma invo8H = MBRU << 8 invo9H = MBRU OR H // paraméterek száma
7
Máté: Architektúrák7. előadás7 INVOKEVIRTUAL: lokálisok száma 2 bájt a paraméterek száma után invo10PC = PC + 1; fetch // lokálisok száma 1. bájt invo11TOS = SP – H // OBJREF is paraméter! invo12TOS = MAR = TOS + 1 // OBJREF címe invo13PC = PC + 1; fetch // lokálisok száma 2. bájt invo14H = MBRU << 8 invo15H = MBRU OR H // lokálisok száma
8
Máté: Architektúrák7. előadás8 INVOKEVIRTUAL: verem kezelés OBJREF cseréje a hívó PC-jét mutató mutatóra invo16MDR = SP + H + 1; wr // OBJREF cseréje invo17MAR = SP = MDR // hívó PC-jének helye invo18MDR = OPC; wr // hívó PC vermelése invo19MAR = SP = SP + 1 // hívó LV rekesze invo20MDR = LV; wr // hívó LV vermelése invo21PC = PC + 1; fetch // utasítás olvasás invo22LV = TOS // LV új értéke invo23TOS = MDR; goto Main1 // TOS=hívó LV-je
9
Máté: Architektúrák7. előadás9 IRETURN // ~4.13. ábra *) rd lehetne egy utasítással korábban is! iret1MAR = SP = LV; rd // összekötő olvasása iret2H = H // vár, hogy az olvasás befejeződjön iret3LV = MAR = MDR; rd // hívó PC olvasása iret4MAR = LV + 1 // hívó LV címe iret5PC = MDR; rd; fetch // * iret6MAR = SP // visszatérési érték címe iret7LV = MDR // hívó LV iret8MDR = TOS; wr; goto Main1
10
Máté: Architektúrák7. előadás10 Az egyes IJVM utasításokat megvalósító mikroprogram az utasításkódnak megfelelő címnél kezdődik, a további utasítások nem feltétlenül ebben a sorrendben vannak a vezérlőtárban (minden mikroutasítás tartalmazza az utána következő mikroutasítás címét)! Házi feladat: A 4.17. ábra többi része. Továbbfejlesztések: több sínes rendszerek.
11
Máté: Architektúrák7. előadás11 Pszeudo utasítások A pszeudo utasításokat a fordítóprogram hajtja végre. Ez a végrehajtás fordítás közbeni tevékenységet vagy a fordításhoz szükséges információ gyűjtést jelenthet.
12
Máté: Architektúrák7. előadás12 Adat definíciós utasítások Az adatokat általában külön szegmensben szokás és javasolt definiálni iniciálással vagy anélkül. Az adat definíciós utasítások elé általában azonosítót (változó név) írunk, hogy hivatkozhassunk az illető adatra. Egy-egy adat definíciós utasítással – vesszővel elválasztva – több azonos típusú adatot is definiálhatunk. A kezdőérték – megfelelő típusú – tetszőleges konstans (szám, szöveg, cím,...), kifejezés lehet. Ha nem akarunk kezdőértéket adni, akkor ? -et kell írnunk. kifejezés DUP (adat)
13
Máté: Architektúrák7. előadás13 Egyszerű adat definíciós utasítások Define Byte (DB): Adat1db25; 1 byte, kezdőértéke decimális 25 Adat2db25H; 1 byte, kezdőértéke hexadec. 25 Adat3db1,2; 2 byte (nem egy szó!) Adat4db5 dup (?); 5 inicializálatlan byte Kardb’a’,’b’,’c’ ; 3 ASCII kódú karakter Szovegdb”Ez egy szöveg”,13,0AH ; ACSII kódú szöveg és 2 szám Szov1db ’Ez is ”szöveg”’ Szov2db”és ez is ’szöveg’”
14
Máté: Architektúrák7. előadás14 Define Word (DW): Szodw0742H,452 Szo_címedwSzo; Szo offset címe Define Double (DD): Szo_fddSzo ; Szo távoli (segment + offset) címe Define Quadword( DQ ) Define Ten bytes( DT )
15
Máté: Architektúrák7. előadás15 Összetett adat definíciós utasítások Struktúra és a rekord. Először a típust kell definiálni. A típus definíció nem jelent helyfoglalást. A struktúra illetve rekord konkrét példányai struktúra illetve rekord hívással definiálhatók. A struktúra illetve rekord elemi részeit mezőknek (field) nevezzük. A hardware nem ismeri ezeket az adat típusokat, a kezelésükről sofware-esen kell gondoskodni!
16
Máté: Architektúrák7. előadás16 Struktúra Struktúra definíció: a struktúra típusát definiálja a későbbi struktúra hívások számára, ezért a memóriában nem jár helyfoglalással. Str_típusSTRUC; struktúra (típus) definíció...; mező (field) definíciók:...; egyszerű adat definíciós...; utasítások Str_típusENDS; struktúra definíció vége A mező (field) definíció csak egyszerű adat definíciós utasítással történhet, ezért struktúra mező nem lehet másik struktúra vagy rekord.
17
Máté: Architektúrák7. előadás17 A mezők definiálásakor megadott értékek kezdőértékül szolgálnak a későbbiekben történő struktúra hívásokhoz. A definícióban megadott kezdőértékek közül azoknak a mezőknek a kezdőértéke híváskor felülbírálható, amelyek csak egyetlen adatot tartalmaznak (ilyen értelemben a szöveg konstans egyetlen adatnak minősül). Pl.: SSTRUC; struktúra (típus) definíció F1db1,2; nem lehet felülírni F2db10 dup (?); nem lehet felülírni F3db5; felülírható F4db’a’,’b’,’c’; nem lehet felülírni, de F5db’abc’; felülírható SENDS
18
Máté: Architektúrák7. előadás18 Struktúra hívás: A struktúra definíciójánál megadott Str_típus névnek a műveleti kód részen történő szerepeltetésével hozhatunk létre a definíciónak megfelelő típusú struktúra változókat. A kezdőértékek fölülbírása a kívánt értékek közötti felsorolásával történik S1 S; kezdőértékek a definícióból S2 S ; F3 kezdőértéke 7, ; F5 -é ’FG’ S3 S ; F3 kezdőértéke ’A’, ; F5 -é a definícióból Struktúrából vektort is előállíthatunk, pl.: S_v S 8 dup ( ) ; 8 elemű struktúra vektor
19
Máté: Architektúrák7. előadás19 Struktúra mezőre hivatkozás: A struktúra változó névhez tartozó OFFSET cím a struktúra OFFSET címét, míg a mező név a struktúrán belüli címet jelenti. A struktúra adott mezejére úgy hivatkozhatunk, hogy a struktúra és mező név közé. -ot írunk, pl.: MOVAL,S1.F3 A. bármely oldalán lehet másfajta cím is, pl. MOVBX, OFFSET S1 után az alábbi utasítások mind ekvivalensek az előzővel: MOVAL,[BX].F3 MOVAL,[BX]+F3 MOVAL,F3.[BX] MOVAL,F3[BX]
20
Máté: Architektúrák7. előadás20 A fentiekből az is következik, hogy a mező név – ellentétben a magasabb szintű programozási nyelvekkel – szükségképpen egyedi név, tehát sem másik struktúra definícióban, sem közönséges változóként nem szerepelhet. A struktúra vektorokat a hagyományos módon még akkor sem indexezhetjük, ha az index konstans. Ha pl. 5, akkor MOVAL,S_v[5].F3 ; szintaktikusan helyes de [5] nem a vektor ötödik elemére mutató címet fogja eredményezni, csupán 5 byte-tal magasabb címet, mint S_v.F3. Ha i változó, akkor MOVAL,S_v[i].F3 ; szintaktikusan is HIBÁS!
21
Máté: Architektúrák7. előadás21 Mindkét esetben programmal kell kiszámíttatni az elem offset-jét, pl. ha i word: MOVAX,TYPE S ; S hossza byte-okban (l. később) MULi; Az indexet 0-tól számoljuk! MOVBX,AX; az adat nem „lóghat ki” a ; szegmensből MOVAL,S_v.F3[BX] ; AL az i -dik elem F3 mezeje.
22
Máté: Architektúrák7. előadás22 Rekord Rekord definíció: Csak a rekord típusát definiálja a későbbi rekord hívások számára. Rec_típusRECORDmező_specifikációk Az egyes mező specifikációkat, -vel választjuk el egymástól. Mező specifikáció: mező_név:szélesség=kezdőérték szélesség a mező bit-jeinek száma. Az =kezdőérték el is maradhat.
23
Máté: Architektúrák7. előadás23 Pl.: RRECORDX:3,Y:4=15,Z:5 Az R rekord szavas (12 bit), a következőképpen helyezkedik el egy szóban: XXXYYYYZZZZZ 000111100000
24
Máté: Architektúrák7. előadás24 Rekord hívás: A rekord definíciójánál megadott névnek a műveleti kód részen történő szerepeltetésével hozhatunk létre a definíciónak megfelelő típusú rekord változókat. A kezdőértékek fölülbírálása a kívánt értékek közötti felsorolásával történik. R1R ; 01E0H, kezdőértékek a definícióból R2R ; 01E7H, ; X, Y kezdőértéke a definícióból, Z -é 7 R3R ; 0240H, ; X kezdőértéke 1, Y -é 2, Z -é a definícióból Rekordból vektort is előállíthatunk, pl.: R_vR 5 dup ( ) ; 0243H, ; 5 elemű rekord vektor
25
Máté: Architektúrák7. előadás25 Rekord mezőre hivatkozás A mező név olyan konstansként használható, amely azt mondja meg, hány bittel kell jobbra léptetnünk a rekordot, hogy a kérdéses mező az 1-es helyértékre kerüljön. MASK és NOT MASK operátor ; AX R3 Y mezeje a legalacsonyabb helyértéken MOVAX,R3; R3 szavas rekord! ANDAX,MASK Y; Y mezőhöz tartozó bitek ; maszkolása MOVCL,Y; léptetés előkészítése SHRAX,CL; kész vagyunk. SAR nem lenne korrekt: nem biztos, hogy tudjuk, hogy az Y mező tartalmazza-e az előjel bitet.
26
Máté: Architektúrák7. előadás26 Kifejezés Egy művelet operandusa lehet konstans, szimbólum vagy kifejezés. Konstans A konstans lehet numerikus vagy szöveg konstans. A numerikus konstansok decimális, hexadecimális, oktális és bináris számrendszerben adhatók meg. A számrendszert a szám végére írt D, H, O illetve B betűvel választhatjuk ki..RADIXn A szöveg konstansokat a DB utasításban ” vagy ’ jelek között adhatjuk meg.
27
Máté: Architektúrák7. előadás27 Szimbólum A szimbólum lehet szimbolikus konstans, változó név vagy címke. Szimbolikus konstans: Az = vagy az EQU pszeudo utasítással definiálható. Szimbolikus szöveg konstans csak EQU -val definiálható. A szimbolikus konstans a program szövegnek a definíciót követő részében használható, értékét a használat helyét megelőző utolsó definíciója határozza meg.
28
Máté: Architektúrák7. előadás28 S=1; S értéke 1 NEQU14; N értéke 14 MOVCX,N; CX 14 ISM: S=S+1; S értéke ezután 2, függetlenül ; attól, hogy hányadszor fut a ciklus MOVAX,S; AX 2 LOOPISM N=5; hibás NEQU5; hibás S=5; helyes SEQU5; hibás
29
Máté: Architektúrák7. előadás29 Szimbolikus konstansként használhatjuk a $ jelet (helyszámláló), melynek az értéke mindenkor a program adott sorának megfelelő OFFSET cím. A helyszámláló értékének módosítására az ORG utasítás szolgál, pl.: ORG$+100H; 100H byte kihagyása ; a memóriában
30
Máté: Architektúrák7. előadás30 Címke: Leggyakoribb definíciója, hogy valamelyik utasítás előtt a sor első pozíciójától :-tal lezárt azonosítót írunk. Az így definiált címke NEAR típusú. Címke definícióra további lehetőséget nyújt a LABEL és a PROC pszeudo utasítás: ALFA:...; NEAR típusú BETALABELFAR; FAR típusú GAMMA:...; BETA is ezt az utasítást ; címkézi, de GAMMA NEAR típusú
31
Máté: Architektúrák7. előadás31 Az eljárás deklarációt a PROC pszeudo utasítással nyitjuk meg. A címke rovatba írt azonosító az eljárás neve és egyben a belépési pontjának címkéje. Az eljárás végén az eljárás végét jelző ENDP pszeudo utasítás előtt meg kell ismételnünk ezt az azonosítót, de az ismétlés nem minősül címkének. Az eljárás címkéje aszerint NEAR vagy FAR típusú, hogy maga az eljárás NEAR vagy FAR. Pl.: APROC; NEAR típusú... BPROCNEAR; NEAR típusú... CPROCFAR; FAR típusú...
32
Máté: Architektúrák7. előadás32 Címkére vezérlés átadó utasítással hivatkozhatunk, NEAR típusúra csak az adott szegmensből, FAR típusúra más szegmensekből is. Változó: Definíciója adat definíciós utasításokkal történik. Néha (adat) címkének is nevezik.
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.