A verem két felső szavának cseréje (ábra)

52
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! Most hátrány! swap6 csak TOS frissítése miatt kell! 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 teteje swap5 MAR = SP – 1; wr

description

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! Most hátrány! swap6 csak TOS frissítése miatt kell!. A WIDE utasítás - PowerPoint PPT Presentation

Transcript of A verem két felső szavának cseréje (ábra)

Page 1: A verem két felső szavának cseréje (ábra)

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!

Most hátrány! swap6 csak TOS frissítése miatt kell!

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 teteje

swap5 MAR = SP – 1; wr // a 2. szóba.

swap6 TOS = H; goto Main1 // TOS frissítése.

Page 2: A verem két felső szavának cseréje (ábra)

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ó verembe

varnum a lokális változó 8 bites indexe.

WIDE

ILOAD varnum lokális változó verembe

varnum a lokális változó 16 bites indexe.

w_iload1 címe = iload1 címe + 0x100

Page 3: A verem két felső szavának cseréje (ábra)

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

Page 4: A verem két felső szavának cseréje (ábra)

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 offset értékét. offset két bájtos előjeles érték. Mic-1 program:

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

Page 5: A verem két felső szavának cseréje (ábra)

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.

iflt1 MAR=SP=SP-1; rd // 2. szó a veremből

iflt2 OPC=TOS // TOS mentése

iflt3 TOS=MDR // TOS= a verem új teteje

iflt4 N=OPC; if(N) goto T; else goto F //elágazás

T OPC=PC-1; fetch; goto goto2 // igaz ág

F PC=PC+1 // hamis ág, nincs ugrás

F2 PC=PC+1; fetch // PC új értéke

F3 goto (Main1) // a folytatás 1. utasítása

Page 6: A verem két felső szavának cseréje (ábra)

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.

Page 7: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 7

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.

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

Page 8: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 8

INVOKEVIRTUAL: paraméterek száma 2 bájt a metódus elején

invo6 PC = MDR; fetch // PC: új metódus eleje

invo7 PC = PC + 1; fetch // paraméterek számainvo8 H = MBRU << 8invo9 H = MBRU OR H // paraméterek száma

Page 9: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 9

INVOKEVIRTUAL: lokálisok száma 2 bájt a paraméterek száma után

Talán logikusabb lenne a 11, 12, 10, 13 sorrend.

invo10 PC = PC + 1; fetch // lokálisok száma 1. bájtinvo11 TOS = SP – H // OBJREF is

paraméter!invo12 TOS = MAR = TOS + 1 // OBJREF címeinvo13 PC = PC + 1; fetch // lokálisok száma 2. bájtinvo14 H = MBRU << 8invo15 H = MBRU OR H // lokálisok száma

Page 10: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 10

INVOKEVIRTUAL: verem kezelés

OBJREF cseréje a hívó PC-jét mutató mutatóra

invo16 MDR = SP + H + 1; wr // OBJREF cseréje

invo17 MAR = SP = MDR // hívó PC-jének helye invo18 MDR = OPC; wr // hívó PC vermeléseinvo19 MAR = SP = SP + 1 // hívó LV-jének a

helye invo20 MDR = LV; wr // hívó LV

vermeléseinvo21 PC = PC + 1; fetch // utasítás olvasásinvo22 LV = TOS // LV új értékeinvo23 TOS = MDR; goto Main1 // TOS=hívó LV-je

Page 11: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 11

IRETURN // ~4.13. ábra

*) rd lehetne egy utasítással korábban is!

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 // hívó LV címe

iret5 PC = MDR; rd; fetch // *

iret6 MAR = SP // visszatérési érték címe

iret7 LV = MDR // hívó LV

iret8 MDR = TOS; wr; goto Main1

Page 12: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 12

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.

Page 13: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 13

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.

Page 14: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 14

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)

Page 15: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 15

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’”

Page 16: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 16

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)

Page 17: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 17

Ö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!

Page 18: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 18

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.

Str_típus STRUC ; struktúra (típus) definíció ... ; mező (field) definíciók: ... ; egyszerű adat definíciós ... ; utasításokStr_típus ENDS ; 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.

Page 19: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 19

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 ; 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

Page 20: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 20

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

Page 21: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 21

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:

MOV AL,[BX].F3MOV AL,[BX]+F3MOV AL,F3.[BX]MOV AL,F3[BX]

Page 22: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 22

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!

Page 23: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 23

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.

Page 24: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 24

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, ez a mező 0-val való inicializálását írja elő.

Page 25: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 25

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

Page 26: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 26

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

Page 27: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 27

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

; maszkolásaMOV CL,Y ; léptetés előkészítéseSHR AX,CL ; kész vagyunk.

SAR nem lenne korrekt: nem biztos, hogy az Y mező nem tartalmazza az előjel bitet.

Page 28: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 28

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.

Page 29: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 29

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.

Page 30: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 30

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

Page 31: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 31

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

Page 32: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 32

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ú

Page 33: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 33

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ú

...

Page 34: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 34

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.

Page 35: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 35

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.

Page 36: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 36

Természetesen előfordulhat, hogy egy kifejezés egyik szintaktikus helyzetben megengedett, a másikban nem, pl.:

mov ax,[BX]; [BX] megengedettmul [BX] ; [BX] hibás, demul WORD PTR [BX] ; megengedett

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.

Page 37: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 37

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

Page 38: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 38

Pl.:v dw 20 dup (?)rec record x:3,y:4tabledw 10 dup (1,3 dup (?))str db ”12345”

esetén:mov ax,LENGTH v ; ax 20mov ax,LENGTH rec ; ax 1mov ax,LENGTH table ; ax 10

; belső DUP ignorálvamov ax,LENGTH str ; ax 1

; str egy elem

Page 39: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 39

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

; belső DUP ignorálvamov ax,SIZE str ; ax 1

; str bájtos

Page 40: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 40

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

Page 41: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 41

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ó.

Page 42: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 42

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)

Page 43: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 43

– 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

Page 44: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 44

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!

Page 45: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 45

5.– LOW kifejezés: egy szó alsó (alacsonyabb

helyértékű) byte-ja– HIGH kifejezés: egy szó felső (magasabb

helyértékű) byte-jaPl.:

mov al,LOW ADATW ; al 34Hmov ah,HIGH ADATW ; ah 12H

6. Előjelek:– + : pozitív előjel– – : negatív előjel

Page 46: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 46

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?

Page 47: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 47

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!

Page 48: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 48

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?

Page 49: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 49

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?

Page 50: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 50

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?

Page 51: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 51

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?

Page 52: A verem két felső szavának cseréje (ábra)

Máté: Architektúrák 7. előadás 52

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?