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

61
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

Upload: peter-pickett

Post on 02-Jan-2016

34 views

Category:

Documents


3 download

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

TRANSCRIPT

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!

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

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

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

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

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

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

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

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

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!

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

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.

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

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

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

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

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

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

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

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!

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

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.

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

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.

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

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)

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

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

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

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)

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

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!

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

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.

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

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

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

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

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

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:

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

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

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

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

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.

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

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

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

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

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

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

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

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

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

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.

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

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!

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

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

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

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

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

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ú

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

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ú

...

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

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.

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

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.

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

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

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

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

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

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”

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

; a belső DUP ignorálva!mov ax,LENGTH str ; ax 1

; str egy elem

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

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

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

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

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

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

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

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

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)

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

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

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

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!

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

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

helyértékű) byte-jaPl.:ADATW dw 1234H

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

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

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

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

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!

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

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 :

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

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

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

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

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

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?

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

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!

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

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!

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

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?

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

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?

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

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?

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

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?

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

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?

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

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?