32
Máté: Architektú rák 7. előadás 1 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! 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 verem két felső szavának cseréje

  • Upload
    laurie

  • View
    40

  • Download
    0

Embed Size (px)

DESCRIPTION

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!. A WIDE utasítás - PowerPoint PPT Presentation

Citation preview

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

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

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!

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

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

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

*) MDR most kapott értéket!

iload1 H = LViload2 MAR = MBRU + H; rdiload3 MAR = SP = SP + 1iload4 PC = PC + 1; fetch; wr // *iload5 TOS = MDR; goto Main1wide1 PC = PC + 1; fetch; goto(MBR OR 0x100)w_iload1 PC = PC + 1; fetch // index 2.

bájtjaw_iload2 H = MBRU << 8 // 1. bájt léptetésew_iload3 H = MBRU OR H // H = a 16 bites indexw_iload4 MAR = LV + H; rd; goto iload3

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

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

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 5: A verem két felső szavának cseréje

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

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 olvassainvo2 H = MBRU << 8 // disp 1. bájtját léptetiinvo3 H = MBRU OR H // H = dispinvo4 MAR = CPP + H; rd // kezdő cím olvasásainvo5 OPC = PC + 1 // visszatérési

cím

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

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

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 7: A verem két felső szavának cseréje

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

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

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 8: A verem két felső szavának cseréje

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

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 rekesze 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 9: A verem két felső szavának cseréje

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

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 10: A verem két felső szavának cseréje

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

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 11: A verem két felső szavának cseréje

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

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 12: A verem két felső szavának cseréje

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

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, ...), kifejezés lehet. Ha nem akarunk kezdőértéket adni, akkor ? -et kell írnunk.

kifejezés DUP (adat)

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

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

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 14: A verem két felső szavának cseréje

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

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 15: A verem két felső szavának cseréje

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

Ö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 16: A verem két felső szavának cseréje

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

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 17: A verem két felső szavának cseréje

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

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 18: A verem két felső szavának cseréje

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

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

; F5-é 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 19: A verem két felső szavának cseréje

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

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

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 20: A verem két felső szavának cseréje

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

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 21: A verem két felső szavának cseréje

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

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

MOV AL,S_v.F3[BX] ; AL az i-dik elem F3 mezeje.

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

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

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.

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

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

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 24: A verem két felső szavának cseréje

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

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 25: A verem két felső szavának cseréje

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

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 tudjuk, hogy az Y mező tartalmazza-e az előjel bitet.

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

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

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

A szöveg konstansokat a DB utasításban ” vagy ’ jelek között adhatjuk meg.

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

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

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 28: A verem két felső szavának cseréje

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

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 29: A verem két felső szavának cseréje

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

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 30: A verem két felső szavának cseréje

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

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 31: A verem két felső szavának cseréje

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

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 32: A verem két felső szavának cseréje

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

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.