Máté: Architektú rák 7. előadás 1 A verem két felső szavának cseréje (ábra) 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! swap6 csak TOS frissítése miatt kell, hátrány! swap1 MAR = SP – 1; rd // A 2. szó címe, olvasás swap2 MAR = SP // MAR a verem tetejére mutat swap3 H = MDR; wr // 2. szó H-ba, verem tetejére swap4 MDR = TOS // verem régi teteje
A verem két felső szavának cseréje (ábra) 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! swap6 csak TOS frissítése miatt kell, hátrány!. A WIDE utasítás - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Máté: Architektúrák 7. előadás 1
A verem két felső szavának cseréje (ábra)
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!
swap6 csak TOS frissítése miatt kell, hátrány!
swap1 MAR = SP – 1; rd // A 2. szó címe, olvasás
swap2 MAR = SP // MAR a verem tetejére mutat
swap3 H = MDR; wr // 2. szó H-ba, verem tetejére
swap4 MDR = TOS // verem régi teteje
swap5 MAR = SP – 1; wr // a 2. szóba
swap6 TOS = H; goto Main1 // TOS frissítése
Máté: Architektúrák 7. előadás 2
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 varnum lokális változó a verembe
varnum a lokális változó 8 bites indexe.
WIDE
ILOAD varnum lokális változó a verembe
varnum a lokális változó 16 bites indexe.
w_iload1 címe = iload1 címe + 0x100
Máté: Architektúrák 7. előadás 3
*) MDR az előző utasítás végén kapott értéket!
iload1 H = LV
iload2 MAR = MBRU + H; rd // rd(H+varnum)
iload3 MAR = SP = SP + 1
iload4 PC = PC + 1; fetch; wr // *
iload5 TOS = MDR; goto Main1
wide1 PC = PC + 1; fetch; goto(MBR OR 0x100)
w_iload1 PC = PC + 1; fetch // index 2. bájtja
w_iload2 H = MBRU << 8 // 1. bájt léptetése
w_iload3 H = MBRU OR H // H = a 16 bites index
w_iload4 MAR = LV + H; rd; goto iload3
Máté: Architektúrák 7. előadás 4
Az GOTO offset utasítás. PC relatív: PC értékéhez hozzá kell adni a két bájtos, előjeles offset értékét. Mic-1 program:
Goto6 azért kell, hogy Main1 végrehajtásakor a program következő bájtja már MBR-ben legyen!
goto1 OPC=PC-1 // korábban volt: PC=PC+1
goto2 PC=PC+1; fetch // offset 2. bájtja
goto3 H=MBR<<8 // 1. (előjeles) bájt léptetése
goto4 H=MBRU OR H // 16 bites offset
goto5 PC=OPC+H; fetch // PC új értéke
goto6 goto (Main1) // a folytatás 1. utasítása
Máté: Architektúrák 7. előadás 5
A IFLT offset utasítás (Mic-1)
Kivesz egy szót a veremből és ugrik, ha negatív.Fontos: T címe = F címe + 0x100
iflt1 MAR=SP=SP-1; rd // 2. szó a verembőliflt2 OPC=TOS // TOS
mentéseiflt3 TOS=MDR // TOS= a verem új
tetejeiflt4 N=OPC; if(N) goto T; else goto F //elágazásT OPC=PC-1; fetch; goto goto2 // igaz ágF PC=PC+1 // hamis ág, át kell lépni offset-et F2 PC=PC+1; fetch // PC új értékeF3 goto (Main1) // a folytatás 1. utasítása
Máté: Architektúrák 7. előadás 6
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.
Máté: Architektúrák 7. előadás 7
INVOKEVIRTUAL disp (~4.12. ábra) Hívó LV-je
Hívó PC-jeHívott lokális
változóinak helye3. paraméter2. paraméter1. paraméterÖsszekötőElőző LVElőző PC
Hívó lokális változóinak helye
2. paraméter1. paraméterÖsszekötő
3. paraméter2. paraméter1. paraméter
OBJREFElőző LVElőző PC
Hívó lokális változóinak helye
2. paraméter1. paraméterÖsszekötő ← LV
← LV
← SP
← SP
A verem új alapja
Betett paraméterek
A verem alapja hívás előtt
A hívó lokális területe
verem a hívás előtt
verem a hívás után
Máté: Architektúrák 7. előadás 8
INVOKEVIRTUAL disp
A CPP által mutatott táblázat disp indexű eleme a meghívandó metódusra mutat. disp első bájtjának MBR-be olvasását már Main1 kezdeményezte.
invo1 PC = PC + 1; fetch // disp 2. bájtját olvassa
invo2 H = MBRU << 8 // disp 1. bájtját lépteti
invo3 H = MBRU OR H // H = disp
invo4 MAR = CPP + H; rd // kezdő cím olvasása
invo5 OPC = PC + 1 // OldPC = visszatérési cím
Máté: Architektúrák 7. előadás 9
INVOKEVIRTUAL: a metódus elején lévő 2 bájt tartalmazza a paraméterek számát.
invo6 PC = MDR; fetch // PC: új metódus eleje
invo7 PC = PC + 1; fetch // paraméterek száma
invo8 H = MBRU << 8
invo9 H = MBRU OR H // paraméterek száma
invo10 TOS = SP – H // OBJREF is paraméter!
invo11 TOS = MAR = TOS + 1 // OBJREF címeTOS-ban tároljuk ideiglenesen OBJREF címét, ide
mutat majd a hívott metódus LV-je.
Az utasítások sorrendje más, mint a könyvben!
Máté: Architektúrák 7. előadás 10
INVOKEVIRTUAL: lokálisok száma 2 bájt a paraméterek száma után, OBJREF cseréje
invo12 PC = PC + 1; fetch // lokálisok száma 1. bájt
invo13 PC = PC + 1; fetch // lokálisok száma 2. bájt
invo14 H = MBRU << 8
invo15 H = MBRU OR H // lokálisok száma
invo16 MDR = SP + H + 1; wr // OBJREF cseréje
OBJREF helyére kerül az Összekötő, az Összekötő a lokális változók fölötti címre kell mutasson. A mutatott címre kerül majd a Hívó PC-je.
Máté: Architektúrák 7. előadás 11
INVOKEVIRTUAL disp (~4.12. ábra) Hívó LV-je
Hívó PC-jeHívott lokális
változóinak helye3. paraméter2. paraméter1. paraméterÖsszekötőElőző LVElőző PC
Hívó lokális változóinak helye
2. paraméter1. paraméterÖsszekötő
3. paraméter2. paraméter1. paraméter
OBJREFElőző LVElőző PC
Hívó lokális változóinak helye
2. paraméter1. paraméterÖsszekötő ← LV
← LV
← SP
← SP
A verem új alapja
Betett paraméterek
A verem alapja hívás előtt
A hívó lokális területe
verem a hívás előtt
verem a hívás után
Máté: Architektúrák 7. előadás 12
INVOKEVIRTUAL: a hívó PC-je és LV-je
invo17 MAR = SP = MDR // hívó PC-jének helye
invo18 MDR = OPC; wr // hívó PC vermelése
invo19 MAR = SP = SP + 1 // hívó LV-jének a helye
invo20 MDR = LV; wr // hívó LV-jének vermelése
invo21 PC = PC + 1; fetch // utasítás olvasás
invo22 LV = TOS // LV új értéke
invo23 TOS = MDR; goto Main1 // TOS=hívó LV-jeTOS = MDR nélkül TOS az Összekötő címét (a hívott LV-jét) tartalmazná!
Máté: Architektúrák 7. előadás 13
IRETURN
~4.12. ábraVisszatérési é.
Hívó LV-jeHívó PC-je
Hívott lokális változóinak helye
3. paraméter2. paraméter1. paraméterÖsszekötőElőző LVElőző PC
Hívó lokális változóinak helye
2. paraméter1. paraméterÖsszekötő
Visszatérési é.Előző LVElőző PC
Hívó lokális változóinak helye
2. paraméter1. paraméterÖsszekötő
← LV
← LV
← SP
← SP
Betett paraméterek
A verem alapja
IRETURN után
A hívó lokális területe
A verem alapja
IRETURN előtt
Verem IRETURN előtt
Verem IRETURN után
Máté: Architektúrák 7. előadás 14
IRETURN // ~4.13. ábra
iret1 MAR = SP = LV; rd // összekötő olvasása
iret2 H = H // vár, hogy az olvasás befejeződjön
iret3 LV = MAR = MDR; rd // hívó PC olvasása
iret4 MAR = LV + 1; rd // hívó LV címe
iret5 PC = MDR; rd; fetch
iret6 LV = MDR // hívó LV
iret7 MAR = SP // visszatérési érték címe
iret8 MDR = TOS; wr; goto Main1
iret3-4: MAR nem lehet SOURCE operandus!
Máté: Architektúrák 7. előadás 15
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 végrehajtandó 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.
Máté: Architektúrák 7. előadás 16
Assembly programozás
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.
Máté: Architektúrák 7. előadás 17
Adat definíciós utasításokAz 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, ...) és kifejezés lehet. Ha nem akarunk kezdőértéket adni, akkor ? -et kell írnunk.
DUP operátorkifejezés DUP (adat)
Máté: Architektúrák 7. előadás 18
Egyszerű adat definíciós utasítások
Define Byte (DB):
Adat1db 25 ; 1 byte, kezdőértéke decimális 25
Adat2db 25H ; 1 byte, kezdőértéke hexadec. 25
Adat3db 1,2 ; 2 byte (nem egy szó!)
Adat4db 5 dup (?); 5 inicializálatlan byte
Kar db ’a’,’b’,’c’ ; 3 ASCII kódú karakter
Szoveg db ”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’”
Máté: Architektúrák 7. előadás 19
Define Word (DW):
Szo dw 0742H,452
Szo_címe dw Szo ; Szo offset címe
Define Double (DD):
Szo_f dd Szo ; Szo távoli ; (segment + offset) címe
Define Quadword (DQ)
Define Ten bytes (DT)
Máté: Architektúrák 7. előadás 20
Ö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!
Máté: Architektúrák 7. előadás 21
StruktúraStruktú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.
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.
Máté: Architektúrák 7. előadás 22
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.:
S STRUC ; struktúra (típus) definícióF1 db 1,2 ; híváskor nem lehet
felülírniF2 db 10 dup (?) ; nem lehet felülírniF3 db 5 ; felülírhatóF4 db ’a’,’b’,’c’; nem lehet felülírni, deF5 db ’abc’ ; felülírhatóS ENDS
Máté: Architektúrák 7. előadás 23
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ólS2 S <,,7,,’FG’> ; F3 kezdőértéke 7,
; F5-é ’FG ’ S3 S <,,’A’> ; F3 kezdőértéke ’A’ ,
; a többi a definícióból
Struktúrából vektort is előállíthatunk, pl.:S_v S 8 dup (<,,’A’>)
; 8 elemű struktúra vektor
Máté: Architektúrák 7. előadás 24
Struktúra mezőre hivatkozás: A struktúra változó nevéhez tartozó OFFSET cím a struktúra OFFSET címét , míg a mező neve 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.:
MOV AL,S1.F3A . bármely oldalán lehet másfajta cím is, pl.
MOV BX, OFFSET S1után az alábbi utasítások mind ekvivalensek az előzővel:
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
MOV AL,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
MOV AL,S_v[i].F3
; szintaktikusan is HIBÁS!
Máté: Architektúrák 7. előadás 26
Mindkét esetben programmal kell kiszámíttatni az elem offset-jét, pl. ha i word:
MOV AX,TYPE S ; S hossza byte-okban
; (l. később)
MUL i ; Az indexet 0-tól számoljuk!
MOV BX,AX ; az adat nem „lóghat ki” a
; szegmensből (DX=0)
MOV AL,S_v.F3[BX] ; AL az i-dik elem F3 mezeje.
Máté: Architektúrák 7. előadás 27
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ípus RECORD mező_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, ha elmarad, az a mező 0-val való inicializálását írja elő.
Máté: Architektúrák 7. előadás 28
Pl.:
R RECORD X:3,Y:4=15,Z:5
Az R rekord szavas (12 bit), a következőképpen helyezkedik el egy szóban:
X X X Y Y Y Y Z Z Z Z Z
0 0 0 1 1 1 1 0 0 0 0 0
Máté: Architektúrák 7. előadás 29
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.
R1 R < > ; 01E0H, kezdőértékek a ; definícióból
R2 R <,,7> ; 01E7H, X, Y kezdőértéke a; definícióból, Z-é 7
R3 R <1,2> ; 0240H, X kezdőértéke 1, Y-é 2, ; Z-é a definícióból
Rekordból vektort is előállíthatunk, pl.:R_v R 5 dup (<1,2,3>) ; 0243H,
; 5 elemű rekord vektor
Máté: Architektúrák 7. előadás 30
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ékenMOV AX,R3 ; R3 szavas rekord!AND AX,MASK Y ; Y mezőhöz tartozó bitek
SAR nem lenne korrekt: nem biztos, hogy az Y mező nem tartalmazza az előjel bitet.
Máté: Architektúrák 7. előadás 31
KifejezésEgy művelet operandusa lehet konstans, szimbólum
vagy kifejezés. KonstansA 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 ; 2 n 16 , n decimális
A szöveg konstansokat a DB utasításban ” vagy ’ jelek között adhatjuk meg.
Máté: Architektúrák 7. előadás 32
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.
Ha egy szimbólumot EQU-val definiálunk, akkor ezt a szimbólumot a modulban másutt nem definiálhatjuk!
Máté: Architektúrák 7. előadás 33
S = 1 ; S értéke 1
N EQU 14 ; N értéke 14
MOV CX,N ; CX 14ISM:
S = S+1 ; S értéke ezután 2, függetlenül ; attól, hogy hányadszor fut a ciklus
MOV AX,S ; AX 2 LOOP ISM
N = 5 ; hibás
N EQU 5 ; hibás
S = 5 ; helyes
S EQU 5 ; hibás
Máté: Architektúrák 7. előadás 34
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
Máté: Architektúrák 7. előadás 35
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ú
BETA LABEL FAR; FAR típusú
GAMMA: ... ; BETA is ezt az utasítást
; címkézi, de GAMMA NEAR típusú
Máté: Architektúrák 7. előadás 36
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.:
A PROC ; NEAR típusú
...
B PROC NEAR ; NEAR típusú
...
C PROC FAR ; FAR típusú
...
Máté: Architektúrák 7. előadás 37
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.
Máté: Architektúrák 7. előadás 38
Kifejezés
A kifejezés szimbólumokból és konstansokból épül fel az alább ismertetendő műveletek segítségével. Kifejezés az operátorok, pszeudo operátorok operandus részére írható. Értékét a fordítóprogram határozza meg, és a kiszámított értéket alkalmazza operandusként. Szimbólumok értékén konstansok esetében természetesen a konstans értékét, címkék, változók esetében a hozzájuk tartozó címet – és nem a tartalmat – értjük. Az érték nemcsak számérték lehet, hanem minden, ami az utasításokban megengedett címzési módok valamelyikének megfelel. Pl. [BX] is kifejezés és értéke a BX regiszterrel történő indirekt hivatkozás, és ehhez természetesen a fordító programnak nem kell ismernie BX értékét.
Máté: Architektúrák 7. előadás 39
Természetesen előfordulhat, hogy egy kifejezés egyik szintaktikus helyzetben megengedett, a másikban nem, pl.:
Egy kifejezés akkor megengedett, ha az értéke fordítási időben meghatározható és az adott szintaktikus helyzetben alkalmazható, pl. az adott utasítás lehetséges címzési módja megengedi. A megengedett kifejezés értékeket az egyes utasítások ismertetése során megadtuk.
Máté: Architektúrák 7. előadás 40
A műveletek, csökkenő precedencia szerinti sorrendben:
1. ( ) és [ ] (zárójelek) továbbá < >: míg a ( ) zárójel pár a kifejezés kiértékelésében csupán a műveletek sorrendjét befolyásolja, addig a [ ] az indirekció előírására is szolgál. Ha a [ ] -en belüli kifejezésre nem alkalmazható indirekció, akkor a ( ) -lel egyenértékű– LENGTH változó: a változó-hoz tartozó adat
terület elemeinek száma – SIZE változó: a változó-hoz tartozó adat terület
hossza byte-okban– WIDTH R/F: az R rekord vagy az F (rekord) mező
szélessége bitekben– MASK F: az F (rekord) mező bitjein 1, másutt 0
Máté: Architektúrák 7. előadás 41
Pl.:v dw 20 dup (?)rec record x:3,y:4tabledw 10 dup (1,3 dup (?))str db ”12345”
v dw 20 dup (?)rec record x:3,y:4tabledw 10 dup (1,3 dup (?))str db ”12345”
esetén: mov ax,SIZE v ; ax 40
mov ax,SIZE rec ; ax 1mov ax,SIZE table ; ax 20
; a belső DUP ignorálvamov ax,SIZE str ; ax 1
; str bájtos
Máté: Architektúrák 7. előadás 43
v dw 20 dup (?)
rec record x:3,y:4
tabledw 10 dup (1,3 dup (?))
str db ”12345”
esetén:
mov ax,WIDTH rec ; ax 7mov ax,WIDTH x ; ax 3mov ax,MASK x ; ax 70H
Máté: Architektúrák 7. előadás 44
2. . (pont): struktúra mezőre hivatkozásnál használatos 3. : mező szélesség (rekord definícióban) és explicit
szegmens megadás (segment override prefix). Az explicit szegmens megadás az automatikus szegmens regiszter helyett más szegmens regiszter használatát írja elő, pl.:
mov ax, ES:[BX]; ax (ES:BX) címen lévő szó
Nem írható felül az automatikus szegmens regiszter az alábbi esetekben:– CS program memória címzésnél,– SS stack referens utasításokban (PUSH, POP, ...),– ES string utasításban DI mellett,
de az SI-hez tartozó DS átírható.
Máté: Architektúrák 7. előadás 45
4.– típus PTR cím: (típus átdefiniálás) ahol típus lehet BYTE, WORD, DWORD, QWORD, TBYTE, illetve NEAR, FAR (előre hivatkozás esetén fontos) és PROC. Pl.:
MUL BYTE PTR [BX] ; a [BX] címet
; byte-osan kell kezelni
– OFFSET kifejezés: a kifejezés OFFSET címe (a szegmens kezdetétől számított távolsága byte-okban)
– SEG kifejezés: a kifejezés szegmens címe (abban az értelemben, ahogy a szegmens regiszterben szokásos tárolni, tehát valós üzemmódban a szegmens tényleges kezdőcímének 16-oda)
Máté: Architektúrák 7. előadás 46
– TYPE változó: az elemek hossza byte-okban, ha változó, de
TYPE string = 1, TYPE konstans = 0, TYPE NEAR címke = -1, TYPE FAR címke = -2
JMP (TYPE cím) PTR [BX]
; NEAR vagy FAR ugrás
– ... THIS típus: a program szöveg adott pontján adott típusú szimbólum létrehozása
Máté: Architektúrák 7. előadás 47
Pl.:
ADATB EQU THIS BYTE
; BYTE típusú változó, helyfoglalás nélkül
ADATW dw 1234H
; ez az adat ADATB-vel byte-osan érhető el
. . .
mov al,BYTE PTR ADATW ; al 34H, helyes
mov al,ADATB ; al 34H, helyes
mov ah,ADATB+1 ; ah 12H, helyes
Emlékeztetünk arra, hogy szavak tárolásakor az alacsonyabb helyértékű byte kerül az alacsonyabb címre!
Máté: Architektúrák 7. előadás 48
5.– LOW kifejezés: egy szó alsó (alacsonyabb
helyértékű) byte-ja– HIGH kifejezés: egy szó felső (magasabb
7. Multiplikatív műveletek: : szorzás– / : osztás– MOD: (modulo) a legkisebb nem negatív maradék, pl.:
mov al,20 MOD 16 ; al 4 – kifejezés SHL lépés: kifejezés léptetése
balra lépés bittel – kifejezés SHR lépés: kifejezés léptetése
jobbra lépés bittel lépés is lehet kifejezés!
A kifejezésben előforduló műveleti jelek (SHL, SHR, és a később előforduló NOT, AND, OR, és XOR) nem tévesztendők össze a velük azonos alakú műveleti kódokkal: az előbbieket a fordító program, az utóbbiakat a futó program hajtja végre!
Máté: Architektúrák 7. előadás 50
8. Additív műveletek:– + : összeadás– - : kivonás
9. Relációs operátorok (igaz=-1, hamis=0): általában feltételes fordítással kapcsolatban fordulnak elő– EQ : = // -1 EQ 0FFFFFFFFH igaz– NE : // -1 NE 0FFFFFFFFH hamis– LT : 33 bites argumentumok!– LE : 1 GT -1 igaz– GT : 1 GT 0FFFFFFFFH hamis– GE :
Máté: Architektúrák 7. előadás 51
10. NOT : bitenkénti negálás
11. AND : bitenkénti és művelet
12. Bitenkénti vagy és kizáró vagy művelet:– OR : bitenkénti vagy művelet– XOR : bitenkénti kizáró vagy művelet
Máté: Architektúrák 7. előadás 52
13. – SHORT : 8 bites IP relatív címzés kikényszerítése– .TYPE kifejezés: 0, ha kifejezés érvénytelen,
különben:
Bit sorszám
Ha a bit = 0 Ha a bit = 1
0 Nem a programmal kapcsolatos
A programmal kapcsolatos
1 Nem adattal kapcsolatos Adattal kapcsolatos
5 Nem definiált Definiált
7 Lokális v. PUBLIC EXTERN
Máté: Architektúrák 7. előadás 53
FeladatokWIDE ILOAD programja átalakítható úgy, hogy
eggyel kevesebb mikroutasításból álljon (ehhez ILOAD programját is módosítani kell). Hogyan?
Gyorsabb lesz-e WIDE ILOAD programja az átalakítás után?
Mire szolgál az INVOKEVIRTUAL utasítás?Hol található az INVOKEVIRTUAL disp utasítással
hívott metódus?Milyen információ van a metódus elején?Hogy néz ki a veremnek egy metódus számára látható
része?
Máté: Architektúrák 7. előadás 54
Feladatok
Mely regiszterek tartalmát kell menteni metódus hívás esetén?
Hogy találhatók meg a mentett regiszter tartalmak visszatéréskor?
Miért nem lenne jó IRETURN megvalósításábaniret3: MAR = MDR; rdiret4: MAR = MAR + 1 ?
Hol található a metódus visszatérési értéke az IRETURN utasítás után?
Elemezze a 4.17. ábra programjait!
Máté: Architektúrák 7. előadás 55
Feladatok
Az IRETURN utasítás mikroprogramozását úgy is megvalósíthattuk volna, hogy az Összekötőt nem használjuk, hanem SP értékéből indulunk ki. Így 7 utasítás is elegendő lett volna. Miért jobb mégis az előadáson bemutatott megoldás?
Elemezze a 4.17. ábra programjait!
Máté: Architektúrák 7. előadás 56
FeladatokMilyen adat definíciós utasítást ismer?Hogy használható a DUP operátor?Milyen adatok definiálhatók a DB operátorral?Milyen adatok definiálhatók a DW operátorral?Milyen operátor segítségével adhatunk meg távoli cím
konstanst?Milyen összetett adat definíciós utasítást ismer?Hogy definiálhatunk struktúrát?Hogy hozhatunk létre struktúra példányt?Hogy hozhatunk létre struktúra vektort?
Máté: Architektúrák 7. előadás 57
Feladatok
Hogy inicializálhatjuk egy struktúra valamely mezejét?
Mit kell tudni a struktúra és mező névről?
Hogy hivatkozhatunk egy struktúra valamely mezejére?
Hogy hivatkozhatunk egy struktúra vektor valamely mezejére?
Mi a rekord?
Hogy definiálhatunk rekordot?
Hogy adhatunk kezdőértéket egy rekordnak?
Máté: Architektúrák 7. előadás 58
Feladatok
Mit kell tudni a rekord és mező névről?
Hogy hivatkozhatunk egy rekord valamely mezejére?
Hogy hivatkozhatunk egy rekord vektor valamely mezejére?
Mi a szimbólum?
Hogy definiálhatunk szimbolikus konstanst?
Mi a különbség az EQU-val és az = jellel történt konstans definíció között?
Mi egy szimbolikus konstans értéke?
Hogy definiálhatunk címkét?
Máté: Architektúrák 7. előadás 59
Feladatoka dw 5 dup (1,2)b recordx:3,y:4,z:5c dw 10 dup (1,2 dup (3))d db ”szoveg”Alkalmazza a, b, c, d, x, y,és z-re a LENGTH, SIZE, WIDTH, MASK és a NOT MASK, operátort (ha lehet)! Milyen eredményeket kap?
Melyik címet jelenti az ES:5[BX+DI] hivatkozás?Miért hibás a
MUL ES:[DI]utasítás? Hogy javítható ki?
Máté: Architektúrák 7. előadás 60
Feladatoka db 12Hb db 23HC dw ?esetén, mi lesz AX, BL és BH tartalma a
mov AX, word ptr amov c, AXmov BL, low cmov BH, byte ptr c
utasítások után?
Máté: Architektúrák 7. előadás 61
Feladatoka = 7b equ a shl 2
mov cx, not b mod 5 or 8esetén, mi lesz cx tartalma?