74
Máté: Architektú rák 5. előadás 1 String kezelő utasítások Az s forrás területet (DS:SI), a d cél területet pedig (ES:DI) címzi. A mnemonik végződése (B / W) vagy az operandus jelzi, hogy bájtos vagy szavas a művelet. A címzésben résztvevő indexregiszterek értéke 1-gyel módosul bájtos, 2-vel szavas művelet esetén. Ha a D (Direction) flag értéke 0, akkor az indexregiszterek értéke növekszik, 1, akkor csökken. CLD; D 0 STD; D 1

String kezelő utasítások

  • Upload
    shiela

  • View
    30

  • Download
    4

Embed Size (px)

DESCRIPTION

String kezelő utasítások Az s forrás területet ( DS:SI ), a d cél területet pedig ( ES:DI ) címzi. A mnemonik végződése ( B / W ) vagy az operandus jelzi, hogy bájtos vagy szavas a művelet. - PowerPoint PPT Presentation

Citation preview

Page 1: String kezelő utasítások

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

String kezelő utasításokAz s forrás területet (DS:SI),

a d cél területet pedig (ES:DI) címzi. A mnemonik végződése (B / W) vagy az operandus

jelzi, hogy bájtos vagy szavas a művelet.A címzésben résztvevő indexregiszterek értéke

1-gyel módosul bájtos, 2-vel szavas művelet esetén.

Ha a D (Direction) flag értéke 0, akkor az indexregiszterek értéke növekszik, 1, akkor csökken.

CLD ; D 0STD ; D 1

Page 2: String kezelő utasítások

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

Az alábbi utasítások – mint általában az adat mozgató utasítások –

érintetlenül hagyják a flag-eket

Átvitel az (ES:DI) által mutatott címre a (DS:SI) által mutatott címről:

MOVSB ; MOVe String Byte

MOVSW ; MOVe String Word

MOVS d,s ; MOVe String (byte vagy word)

d és s csak azt mondja meg, hogy bájtos vagy szavas az átvitel!

Page 3: String kezelő utasítások

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

Betöltés AL-be illetve AX-be a (DS:SI) által mutatott

címről (csak SI módosul):

LODSB ; LOaD String Byte

LODSW ; LOaD String Word

LODS s ; LOaD String (byte vagy word)

Tárolás az (ES:DI) által mutatott címre AL-ből illetve

AX-ből (csak DI módosul):

STOSB ; STOre String Byte

STOSW ; STOre String Word

STOS d ; STOre String (byte vagy word)

Page 4: String kezelő utasítások

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

Az alábbi utasítások beállítják a flag-eket

Az (ES:DI) és a (DS:SI) által mutatott címen lévő byte illetve szó összehasonlítása, a flag-ek s – d (!!!) értékének megfelelően állnak be.CMPSB ; CoMPare String ByteCMPSW ; CoMPare String WordCMPS d,s ; CoMPare String (byte vagy word)

Az (ES:DI) által mutatott címen lévő byte (word) összehasonlítása AL-lel (AX-szel), a flag-ek AL – d illetve AX – d (!!!) értékének megfelelően állnak be.SCASB ; SCAn String ByteSCASW ; SCAn String WordSCAS d ; SCAn String (byte vagy word)

Page 5: String kezelő utasítások

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

Ismétlő prefixumokREP REPZ REPE és REPNZ REPNE

A Z, E, NZ és NE végződésnek hasonló szerepe van, mint a LOOP utasítás esetén.

Ismétlő prefixum használata esetén a string kezelő utasítás CX-szer kerül(het) végrehajtásra:

• ha CX = 0, akkor egyszer sem (!!!), • különben minden végrehajtást követően 1-gyel

csökken a CX regiszter tartalma. Amennyiben CX csökkentett értéke 0, akkor nem történik további ismétlés.

A flag beállító string kezelő utasítás ismétlésének további feltétele, hogy a flag állapota megegyezzen a prefixum végződésében előírttal.

Page 6: String kezelő utasítások

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

Ismétlő prefixumokREP REPZ REPE és REPNZ

REPNE

A program jobb olvashatósága érdekében

• flag-et nem állító utasítások előtt mindig REP-et használjunk,

• flag-et beállító utasítás előtt pedig sohase REP-et, hanem helyette a vele egyenértékű REPE-t vagy REPZ-t!

Page 7: String kezelő utasítások

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

; A 100 elemű array nevű tömbnek van-e ; 3-tól különböző eleme?

mov cx, 100mov di, -1 ; előbb lehessen inc, mint cmpmov al, 3

NEXT: inc dicmp array[di], al ; array di-edik eleme = 3?LOOPE NEXT ; ugrás NEXT-re,

; ha CX0 és a di-edik elem=3JNE NEM3 ; CX = 0 vagy array[di] 3. . . ; array 3. . .

NEM3: . . . ; di az első 3-tól különböző . . . ; elem indexe

Page 8: String kezelő utasítások

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

Ugyanennek a feladatnak a megoldása string kezelő utasítás segítségével:

; A 100 elemű array nevű tömbnek van-e ; 3-tól különböző eleme?

mov cx,100mov di,offset arraymov AL,3

REPE SCAS array ; array 0., 1., ... eleme = 3?JNE NEM3. . . ; array 3,. . .

NEM3: DEC DI ; DI az első 3 elemre mutat

. . .

Page 9: String kezelő utasítások

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

A 100 elemű array nevű tömbnek van-e 3-tól különböző eleme?

mov cx, 100mov di, -1mov al, 3

NEXT: inc dicmp array[di], alLOOPE NEXT

JNE NEM3. . .. . .

NEM3: . . .. . .

mov cx,100mov di,offset

arraymov AL,3

REPE SCAS array

JNE NEM3. . .. . .

NEM3: DEC DI. . .

Használja ES-t. Sokkal gyorsabbNem minden eltérés lényeges!

Page 10: String kezelő utasítások

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

Egyszerűsített lexikális elemző

Feladata, hogy azonosító, szám, speciális jelek és a program vége jel előfordulásakor rendre A, 0, , és . karaktert írjon a képernyőre. Az esetleges hibákat ? jelezze.

XLAT utasítás alkalmazásának tervezése:

Karakter típusok karakterek kód

Betű A … Z a … z 2

Számjegy 0 … 9 4

Speciális jel , . tabulátor ; + - ( ) cr lf 6

Vége jel $ 8

Hibás karakter a többi 0

Page 11: String kezelő utasítások

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

data segment para public ’data’

; ugró táblák a szintaktikus helyzetnek megfelelően:

; kezdetben, speciális és hibás karakter után

; következő karakter

t_s dw hiba ; hibás kar.: ? spec. jel szint

dw lev_a ; betű: A azonosító szint

dw lev_n ; számjegy: 0 szám szint

dw lev_s ; spec. jel: , spec. jel szint

dw vege ; $: . program vége

Page 12: String kezelő utasítások

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

; azonosító szintt_a dw hiba ; hibás kar.: ? spec. jel szint

dw ok ; betű: nincs teendődw ok ; számjegy: nincs teendődw lev_s ; speciális jel: , spec. jel szintdw vege ; $: . program vége

; szám szintt_n dw hiba ; hibás kar.: ? spec. jel szint

dw hiba ; betű: hiba: ? spec. jel szintdw ok ; számjegy: nincs teendődw lev_s ; speciális jel: , spec. jel szintdw vege ; $: . program vége

Page 13: String kezelő utasítások

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

level dw ? ; az aktuális ugrótábla címe

c_h db 0 ; hibás karakter kódjac_b db 2 ; betű kódjac_n db 4 ; számjegy kódjac_s db 6 ; speciális jel kódjac_v db 8 ; végjel kódjaspecjel db ’ ,. ;+-()’, 13, 10 ; a speciális jelekvegjel db ’$’ ; vége jel, kihasználjuk,

; hogy itt van!

table db 256 dup (?) ; átkódoló tábla (256 byte)

text db ’a,tz.fe&a 21 a12 12a $’ ; elemzendő szöveg

data ends

Page 14: String kezelő utasítások

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

code segment para public ’code’assume cs:code, ds:data, es:data, ss:stack

lex proc farpush dsxor ax,axpush ax ; visszatérési cím a

verembenmov ax,datamov ds,axmov es,ax ; assume miatt

call prepare ; átkódoló tábla elkészítésemov si, offset text ; az elemzendő szöveg

; kezdőcímecall parsing ; elemzés

ret ; vissza az Op. rendszerhez

lex endp

Page 15: String kezelő utasítások

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

prepare proc ; az átkódoló tábla elkészítése

; az eljárás rontja ax, bx, cx, di, si tartalmát

cld ; a string műveletek iránya pozitív

mov bx, offset table

mov di,bx

mov al,c_h ; hibás karakter kódja

mov cx,256 ; a tábla hossza

rep stos table; table minden karakter hibás

Page 16: String kezelő utasítások

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

mov al,c_b ; betű kódja

mov di,’A’ ; A ASCII kódja

add di,bx ; A helyének offset címe

mov cx,’Z’-’A’+1 ; a nagybetűk száma

; a betűk ASCII kódja folyamatos!

rep stosb

mov di,’a’ ; a ASCII kódja

add di,bx ; a helyének offset címe

mov cx,’z’-’a’+1 ; a kisbetűk száma

rep stosb

Page 17: String kezelő utasítások

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

mov al,c_n ; számjegy kódja

mov di,’0’ ; 0 ASCII kódja

add di,bx ; 0 helyének offset címe

mov cx,’9’-’0’+1 ; a számjegyek száma

; a számjegyek ASCII kódja folyamatos!

rep stosb

Page 18: String kezelő utasítások

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

mov si,offset specjel; speciális jelek

; feldolgozása

xor ah,ah ; hogy ax=al legyen

pr1: lods specjel ; speciális jel ASCII kódja

mov di,ax ; ah=0 miatt ax = a jel kódja

cmp al,vegjel ; vegjel közvetlenül a

; speciális jelek után van!

je pr2 ; ez már a vegjel

mov al,c_s ; speciális karakter kódja

mov [bx+di],al ; elhelyezés a táblában

jmp pr1 ; ciklus vége

Page 19: String kezelő utasítások

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

pr2: mov al,c_v ; a végjel kódja

mov [bx+di],al ; elhelyezés a táblában

ret ; vissza a hívó eljáráshoz

prepare endp

Page 20: String kezelő utasítások

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

parsing proc ; elemzés; az eljárás rontja ax, bx, cx, di, si tartalmát

cld ; a string műveletek iránya pozitívmov bx, offset tablemov di,offset t_s ; spec. jel szint

lv1: mov level,di ; szint beállításxor ah,ah ; hogy ax=al legyen

ok: lods text ; a következő karakterxlat ; al 0, 2, 4, 6 vagy 8mov di, level ; di az akt. ugrót. címe add di, ax ; az ugrótáblán belüli címjmp [di] ; kapcsoló utasítás

Page 21: String kezelő utasítások

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

hiba: mov di,offset t_s ; hibás karakter,

; spec. jel szint következik

mov al,’?’

lv2: mov ah,14 ; BIOS hívás előkészítése

int 10h ; BIOS hívás:

; karakter írás a képernyőre

jmp lv1

lev_a: mov di,offset t_a ; azonosító kezdődik

mov al,’A’

jmp lv2

Page 22: String kezelő utasítások

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

lev_n: mov di,offset t_n ; szám kezdődikmov al,’0’jmp lv2

lev_s: mov di,offset t_s ; speciális jelmov al,’,’jmp lv2

vege: mov al,’.’ ; szöveg végemov ah,14 ; BIOS hívás előkészítéseint 10h ; BIOS hívás:

; karakter írás a képernyőreret ; elemzés vége, vissza a hívóhoz

parsing endp

code ends

Page 23: String kezelő utasítások

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

stack segment para stack ’stack’

dw 100 dup (?) ; 100 word legyen a verem

stack ends

end lex ; modul vége, start cím: lex

Page 24: String kezelő utasítások

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

Mikroarchitektúra szint

Feladata az ISA (Instruction Set Architecture – gépi utasítás szint) megvalósítása. Nincs rá általánosan elfogadott, egységes elv.

A ISA-szintű utasítások „függvények”, ezeket egy főprogram hívja meg végtelen ciklusban.

A függvények a mikroarchitektúra szintjén valósulnak meg (mikroprogram).

A mikroprogram változói (a regiszterek) definiálják a számítógép állapotát, pl.: PC (Program Counter, utasításszámláló).

Page 25: String kezelő utasítások

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

Mic-1Adatút (Data Path, 4.1. ábra)32 bites regiszterek, sínek,ALU, léptető SLL8 8 bittel balra, SRA1 1 bittel jobbra léptet. ALU bemenetei: H (Holding – tartó), B sín.

Egy cikluson belül lehetséges egy regiszterből olvasni és az eredményt akár ugyanoda visszaírni 4.3. ábra.

Vezérlő jelek

B sínre írja a regisztertC sínt a regiszterbe írja

memóriábamemóriából

Léptető vezérlés

6

2

ALUvezérlés

A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0.

Csín

Bsín

Memória vezérlő

regiszterek

ALU

MAR

MDR

PC

MBR

SP

LV

CPP

TOS

OPC

H

Léptető

mem

ória

Page 26: String kezelő utasítások

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

Pl. SP = SP + 1

• SP B sín

• ALU: B+1 C

• C SP

Vezérlő jelek

B sínre írja a regisztertC sínt a regiszterbe írja

memóriábamemóriából

Léptető vezérlés

6

2

ALUvezérlés

A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0.

Csín

Bsín

Memória vezérlő

regiszterek

ALU

MAR

MDR

PC

MBR

SP

LV

CPP

TOS

OPC

H

Léptető

mem

ória

Page 27: String kezelő utasítások

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

2

6ALU

vezérlés

Pl. SP = SP + 1

• SP B sín

• ALU: B+1 C

• C SP

Vezérlő jelek

B sínre írja a regisztertC sínt a regiszterbe írja

memóriábamemóriából

Léptető vezérlés

A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0.

Csín

Bsín

Memória vezérlő

regiszterek

ALU

MAR

MDR

PC

MBR

SP

LV

CPP

TOS

OPC

H

Léptető

mem

ória

Page 28: String kezelő utasítások

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

Pl. SP = SP + 1

• SP B sín

• ALU: B+1 C

• C SP

Vezérlő jelek

B sínre írja a regisztertC sínt a regiszterbe írja

memóriábamemóriából

Léptető vezérlés

6

2

ALUvezérlés

A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0.

Csín

Bsín

Memória vezérlő

regiszterek

ALU

MAR

MDR

PC

MBR

SP

LV

CPP

TOS

OPC

H

Léptető

mem

ória

Page 29: String kezelő utasítások

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

Pl. SP = SP + 1

• SP B sín

• ALU: B+1 C

• C SP

Vezérlő jelek

B sínre írja a regisztertC sínt a regiszterbe írja

memóriábamemóriából

Léptető vezérlés

6

2

ALUvezérlés

A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0.

Csín

Bsín

Memória vezérlő

regiszterek

ALU

MAR

MDR

PC

MBR

SP

LV

CPP

TOS

OPC

H

Léptető

mem

ória

Page 30: String kezelő utasítások

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

Memóriaműveletek (4.1. ábra) • Szócímzés: 32 bites adat írása, olvasása.

szó cím = 4 * (bájt cím), a túlcsorduló bitek elvesznek

MAR (Memory Address Register)MDR (Memory Data Register)

• Bájtcímzés: gépi szintű utasítás bájt olvasás.PC (Program Counter): bájt cím,MBR (Memory Byte Register): bájt.

MBR kétfajta értelmezése (két vezérlőjel):• MBR: MBR előjel kiterjesztéssel kerül a B sínre,• MBRU: MBR előjel nélküli kiterjesztéssel kerül a B sínre.

MAR

MDR

PC

MBR

mem

ória

Page 31: String kezelő utasítások

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

Léptető vezérlés

N

Z

9 jel: a B sínre írás a regiszterekből,8 jel: 6 az ALU és 2 a léptető vezérlésére, 9 jel: a C sínről regiszterekbe írás, 3 jel: a memória eléréshez 2 jel: szó íráshoz/olvasáshoz

1 jel: bájt olvasáshoz.Összesen 29 jel szükséges

A B sínre csak egy regiszter írhat egyszerre, ezért 9 helyett elég 4 jel, összesen24 vezérlő jelre van szükség.

Az adatút vezérlése (4.1. ábra)

6

2

ALUvezérlés

A B

Csín

Bsín

ALU

MAR

MDR

PC

MBR

SP

LV

CPP

TOS

OPC

H

Léptető

mem

ória

Page 32: String kezelő utasítások

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

NE

XT

AD

DR

ES

S

JMP

C

JAM

NJA

MZ

SL

L8

SR

A1

F0

F1

EN

AE

NB

INV

AIN

CH

OP

CT

OS

LV SP

PC

MD

RM

AR

WR

ITE

RE

AD

FE

TC

HB

sín

9 3 8 9 3 4

Mikroutasítások24 bit: az adatút vezérléséhez 9 bit: a következő utasítás címének megadásához, 3 bit: a következő utasítás kiválasztásának módjára. Ez adja a 36 bites mikroutasítást: 4.5. ábra.

0 = MDR 1 = PC 2 = MBR 3 = MBRU 4 = SP

5 = LV 6 = CPP 7 = TOS 8 = OPC 9-15 semmi

Addr JAM ALU C Mem B

Page 33: String kezelő utasítások

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

SP B sín; ALU C; C SP

Page 34: String kezelő utasítások

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

Memória ciklus

A memória ciklus az adatút végén kezdődik (a C sínről a regiszterek feltöltése után), ezért ha a memória címet módosította ez a mikroutasítás, akkor a memória cím a módosított

MAR ill. PC regiszter értéke lesz.

Az olvasás eredménye csak két ciklussal később használható az ALU-ban, mert MDR ill. MBR csak a következő adatút ciklus vége felé töltődik fel a memó-riából, addig MDR ill. MBR régi értéke érhető el.

MAR

MDR

PC

MBR

mem

ória

Page 35: String kezelő utasítások

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

Memória ciklus: MAR = LV; rd; TOS = MDR

Page 36: String kezelő utasítások

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

Mic-1: 4.6. ábra. • 512x36 bites vezérlőtár a

mikroprogramnak,• MPC (MicroProgram Counter):

mikroprogram-utasításszámláló.• MIR (MicroInstruction Register):

mikroutasítás-regiszter.

Az adatút ciklus (4.6. ábra) elején MIR feltöltődik a vezérlőtár MPC által mutatott szavával.

Addr J ALU C M B

9

512x36 bites vezérlőtár (ROM) a mikroprogram

tárolására

MIR

MPC

4-ről 16-ra dekódoló

A mikroprogram

Page 37: String kezelő utasítások

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

Adatút ciklus (4.6. ábra): • (MIR feltöltődik a vezérlőtár MPC által mutatott szavával.) • Kialakul a B sín kívánt tartalma, ALU és a léptető megtudja, mit kell csinálnia,• Az ALU és a léptető elvégzi a feladatát, a C sín, N (Negative) és Z (Zero) megkapja az új értékét, • A regiszterek feltöltődnek a C sínről.

MBR/MDR megkapja az értékét, ha az előző ciklus adatot kért a memóriából.• Kialakul MPC új értéke.• Memória ciklus kezdete.

NZ

6

2

A B

Csín

Bsín

ALU

MAR

MDR

PC

MBR

SP

LV

CPP

TOS

OPC

H

Léptető

mem

ória

Page 38: String kezelő utasítások

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

Mic-1: 4.6. ábra.

Addr J ALU C M B

9

9

512x36 bites vezérlőtár (ROM)

a mikroprogram tárolására

MIR

MPC

N

Z

MBR 8

JAMN/JAMZ

JMPC

1 bites flip-flopok

(N&JAMN) + (Z&JAMZ)

+

MPC új tartalmának kialakítása

1

2

3

Page 39: String kezelő utasítások

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

MPC új tartalma, JAMN/JAMZ • A 9 bites következő cím (Addr) az MPC-be kerül.• (JAMN ÉS N) VAGY (JAMZ ÉS Z) és MPC

legmagasabb bitjének logikai vagy kapcsolata képződik MPC legmagasabb helyértékén. Pl.:

esetén a mikroprogram a 0x092 címen folytatódik, ha Z = 0,0x192 címen folytatódik, ha Z = 1.

Feltételes ugrás – elágazás – a mikroprogramban.

Cím Addr JAM Adatút vezérlő bitek

0x75 0x092 001 . . . JAMZ =1

Page 40: String kezelő utasítások

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

JAMN: if(LV-H < 0) goto L1; else goto L2

L2+

0x100=

L1

Page 41: String kezelő utasítások

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

MPC új tartalma, JMPC

• JMPC esetén MPC 8 alacsonyabb helyértékű bitjének és MBR 8 bitjének bitenkénti vagy kapcsolata képződik MPC-ben az adatút ciklus vége felé (MBR megérkezése után). Ilyenkor Addr 8 alacsonyabb helyértékű bitje általában 0 Feltétlen ugrás az MBR-ben tárolt címre – kapcsoló utasítás:

goto(MBR) vagy goto(MBR OR 0x100)

Kezdődhet az újabb mikroutasítás végrehajtása.

Page 42: String kezelő utasítások

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

JMPC: TOS=H+SP+1; goto(MBR)

Page 43: String kezelő utasítások

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

Mic-1 működése

• (MPC) MIR

• regiszter B sín, Addr MPC

ALU, léptető megtudja,

mit kell csináljon,

• eredmény C, N, Z

• C regiszterekbe JAMN, JAMZ és (N), (Z)

mem. MDR és/vagyalapján módosul MPC

mem. MBR

• Memória ciklus indítása JMPC és (MBR) (rd, wr, fetch) alapján módosul MPC.

Page 44: String kezelő utasítások

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

Mic-1 programozása (4.5, 6. ábra)

36 bites bináris utasításokat kellene megadnunk.

Pl.: Egy ciklusban növeljük SP-t 1-gyel és olvasást kezdeményezünk a memóriából, folytatás a 122-es utasításnál. Szimbolikusan ilyesmi:

ReadRegister = SP, ALU = INC, Write SP, Read, NextAddress = 122;

Nehézkes, helyette:

SP = SP + 1; rd

A folytatás címet csak akkor tüntetjük fel, ha az nem a következőként írt mikroutasítás (pl. goto Main1).

Page 45: String kezelő utasítások

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

MAL (Micro Assembly Language )

SOURCE: a B sínre kötött regiszterek bármelyike: MDR, PC, MBRU (előjel nélküli - MBR Unsigned), MBR, SP, LV, CPP, TOS, OPC.

DEST: a C sínre kapcsolt regiszterek bármelyike: MAR, MDR, PC, SP, LV, CPP, TOS, OPC, H. Több regiszter is kaphatja ugyanazt az értéket.

wr: memóriába írás MDR-ből a MAR címre.

rd: memóriából olvasás MDR-be a MAR címről.

fetch: 8 bites utasításkód betöltése MBR-be a PC címről.

NZ

6

2

A B

Csín

Bsín

ALU

MAR

MDR

PC

MBR

SP

LV

CPP

TOS

OPC

H

Léptető

mem

ória

Page 46: String kezelő utasítások

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

Nem megengedett pl. az alábbi utasítás pár:

MAR = SP; rdMDR = H // A memóriából is most kapna értéket!

Page 47: String kezelő utasítások

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

Feltétlen ugrás:

goto Main1

Az Addr mezőbe Main1 címét kell írni.

Feltétlen ugrás MBR szerint (kapcsoló utasítás): Ilyenkor JMPC = 1

goto (MBR OR value)

value általában 0 vagy 0x100.

Page 48: String kezelő utasítások

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

Feltételes elágazás, pl.: TOS (Top Of Stack) alapjánZ = TOS ; if (Z) goto L1; else goto L2

// Z=1, ha TOS=0, különben Z=0.

esetén a mikroprogram az L2 0x092 címen folytatódik, ha Z = 0,L1 0x192 címen folytatódik, ha Z = 1.

Az L1 és L2 címek különbsége 256 (0x100) kell legyen (4.7. ábra)!

Cím Addr JAM Adatút vezérlő bitek

0x75 0x092 001 . . . JAMZ =1

Page 49: String kezelő utasítások

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

Eljárás: paraméterek, munka terület.

A hívó és hívott eljárás paraméterei, változói nem lehetnek azonos területen: lokális változók.

Verem (stack): LV (Local Variable), SP (Stack Pointer) verem mutató (4.8. ábra).

SP → d5d4d3d2

LV → d1a3a2a1

SP → a3a2

LV → a1

SP → b4b3b2

LV → b1a3a2a1

SP → c2LV → c1

b4b3b2b1a3a2a1

Page 50: String kezelő utasítások

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

A verem operandusok és az eredmény ideiglenes tárolására is használható (operandus verem), pl. (4.9. ábra):

a1 = a2 + a3

SP → a2a3a2

LV → a1

SP → a3a2a3a2

LV → a1

SP → a2+a3a3a2

LV → a1

SP → a3a2

LV → a2+a3

Page 51: String kezelő utasítások

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

IJVM (Integer Java Virtual Machine): a JVM egész értékű aritmetikát tartalmazó része.

Az IJVM utasítások szerkezete: • az első mező az opcode (Operation Code, műveleti

kód), • az esetleges második mezőben az operandus

meghatározására szolgáló adat van.

Mikroprogram: betölti, értelmezi és végrehajtja az IJVM utasításokat:

betöltés-végrehajtás (fetch-execute) ciklus.

Page 52: String kezelő utasítások

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

Az IJVM memóriamodellje (4.10. ábra)A 4 GB memória, 1 G szóként is szervezhető.

CPP →

Konstans terület

SP → Aktuálisoperandusok 3.

LV →Aktuális lokális

változók 3.

lokális változók 2.

lokális változók 1.

PC →

Metódusterület

Konstansok, mutatók

Tartalma a program betöltésekor alakul ki, ISA utasítások nem írhatják felül

Program

PC bájtot címez a metódus

területen belül

Verem

lokális változók és operandus verem

Page 53: String kezelő utasítások

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

IJVM néhány utasítása: 4.11. ábra (részlet).

hex Mnemonic jelentés

10 BIPUSH byte Beteszi a byte–ot a verembe

A7 GOTO offset Feltétel nélküli ugrás offset -re

60 IADDKivesz a veremből két szót, az összegüket a verembe teszi

99 IFEQ offset Kivesz a veremből egy szót, ha 0, akkor offset -re ugrik

9F IF_ICMPEQ offsetKivesz a veremből két szót, ha egyenlők, akkor offset -re ugrik

15 ILOAD varnum Beteszi varnum -ot a verembe

36 ISTORE varnum Kivesz a veremből egy szót, és eltárolja varnum -ba

64 ISUBKivesz a veremből két szót, a különbségüket a verembe teszi

00 NOP Nem csinál semmit

5F SWAP A verem két felső szavát megcseréli

Page 54: String kezelő utasítások

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

Java (C) IJVM program 4.14. ábra Bin. kódprogram

1 ILOAD j // i = j + k 15 02 2 ILOAD k 15 03i = j + k; 3 IADD 60if(i = = 3) 4 ISTORE i 36 01 k = 0; 5 ILOAD i // if(i = = 3) 15 01else 6 BIPUSH 3 10 03 j = j – 1; 7 IF_ICMPEQ L1 9F 00 0D 8 ILOAD j // j = j – 1 15 02

9 BIPUSH 1 10 01 10 ISUB 64 11 ISTORE j 36 02 12 GOTO L2 A7 00 0F 13 L1: BIPUSH 0 // k = 0 10 00 14 ISTORE k 36 03 15 L2:

Page 55: String kezelő utasítások

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

IJVM megvalósítása Mic-1-en (4.11., 17. ábra) Előkészület a gép indításakor: PC a végrehajtandó

utasítás címét, MBR az utasítás kódját tartalmazza.A főciklus legelső mikroutasítása a Main1, ez:

PC=PC+1; fetch; goto(MBR);

PC most a végrehajtandó utasítás utáni bájtra mutat, ez lehet egy újabb utasítás kódja, vagy operandus.

PC új értékének kialakulása után indul a fetch-csel kezdeményezett memória ciklus, ez a program következő bájtját olvassa MBR-be (a következő mikroutasítás végén lesz MBR-ben a bájt).

goto (MBR) elugrik az utasítás feldolgozásához.

Page 56: String kezelő utasítások

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

Minden utasítás feldolgozását végző függvény első mikroutasítása az utasítás kódnak megfelelő címen van a mikroprogram tárban.

Page 57: String kezelő utasítások

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

A mikroutasítások elhelyezkedése a mikroprogram tárban (részlet)

0 8

1 9

2 A

3 B

4 C

5 D

6 E

7 F

0 NOP1 IAND3 POP3 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6

8 LDC_W3 LDC_W4 IINC3 IINC4 IINC5 IINC6 IFLT2 IFLT3

10 BIPUSH1 BIPUSH2 BIPUSH2 LDC_W1 LDC_W2 ILOAD1 ILOAD2 ILOAD3

18 ILOAD4 ILOAD5 IFLT4 INVOKEV19 INVOKEV20 INVOKEV21 INVOKEV22 INVOKEV23

20 F F2

28

30 ISTORE1 ISTORE2

38 ISTORE3 ISTORE4 ISTORE5 ISTORE6

40

48

50 POP1

58 POP2 DUP1 DUP2 SWAP1

60 IADD1 IADD2 IADD3 ISUB1 ISUB2 ISUB3

68

70

78 IAND1 IAND2

80 IOR1 IOR2 IOR3 IINC1 IINC2 INVOKEV1 INVOKEV2

88 INVOKEV3 INVOKEV4 INVOKEV5 INVOKEV6 INVOKEV7 INVOKEV8 INVOKEV9 INVOKEV10

Page 58: String kezelő utasítások

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

Látható, hogy nem helyezhetjük egymás után az egyes utasítások feldolgozását végző mikroutasítás sorozatot, ezért inkább azt a megoldást választottuk, hogy minden mikroutasítás tartalmazza a következő címét.

Ha az első utasítás pl. NOP (No OPeration, nem csinál semmit), ennek a kódja 0x00, ezért a 0x00 címen kezdődik a NOP feldolgozását végző függvény. Ez egyetlen goto Main1 mikroutasítás.

Page 59: String kezelő utasítások

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

IJVM megvalósítása Mic-1-en (4.11., 17. ábra)

A főciklus a Main1-nél kezdődik; PC a végrehajtandó utasítás címét, MBR az utasítás kódját tartalmazza.

Main1 a következő utasítást vagy adatbájtot olvassa.

Címke Műveletek // kommentár

Main1 PC = PC + 1; fetch; goto(MBR)

nop1 goto Main1

iadd1 MAR = SP = SP – 1; rd

iadd2 H = TOS

iadd3 MDR = TOS = MDR + H; wr; goto Main1

Page 60: String kezelő utasítások

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

Page 61: String kezelő utasítások

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

FeladatokMilyen string kezelő utasításokat ismer?Melyik flag módosítja a string kezelő utasítások

működését?Melyik szegmens regiszterek befolyásolják a string

kezelő utasítások működését?Mi a szerepe a string kezelő utasításokban az

operandusoknak?Mely string kezelő utasítások módosítják/nem

módosítják a flag-eket?Mit csinál a MOVSW utasítás?Mit csinál a STOS utasítás?

Page 62: String kezelő utasítások

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

Feladatok

Azonos-e a MOVSW hatása két egymás utáni MOVSB hatásával? Indokolja a válaszát!

Hogy állítja be a flag-eket a CMP d,AL utasítás?

Hogy állítja be a flag-eket a CMPSB utasítás?

Hogy állítja be a flag-eket a SCAS d utasítás?

Milyen ismétlő prefixumokat ismer?

Mi az egyes ismétlő prefixumok hatása?

Mely prefixumok használata ajánlott flag-eket beállító illetve flag-eket nem módosító string kezelő utasítások előtt?

Page 63: String kezelő utasítások

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

FeladatokAz alábbi feladatok megoldásában használjon

ismétlési prefixumot!Állapítsa meg egy 0-ra végződő bájtokból/szavakból

álló string hosszát!Keresse meg egy n bájtból álló string-ben az A betű

első/utolsó előfordulását (ha van)!Keresse meg egy 0-ra végződő string-ben az A betű

első/utolsó előfordulását (ha van)!Helyes-e a SCASW utasítás használata az AB betű

kombináció keresésében 2n bájt hosszú stringben? Indokolja a válaszát!

Page 64: String kezelő utasítások

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

FeladatokÍrjon eljárást, amely megállapítja, hogy egy 0-ra

végződő string-ben előfordul-e az ABC jelsorozat!Írjon eljárást, amely megállapítja, hogy egy string-ben

előfordul-e egy másik string!Töltse fel az n hosszúságú bájt vektort az ABC

mintával!Írjon eljárást egy n bájt hosszúságú forrás terület cél

területre másolására (a két terület átfedhet)!2n bájt hosszúságú forrás terület cél területre másolása

mindig megoldható MOVSW utasításokkal? (A két terület átfedhet!)

Page 65: String kezelő utasítások

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

FeladatokMi az egyszerűsített lexikális elemző feladata?Miért szerepel az assume utasításban es: data?Mire szolgál a CLD utasítás?Milyen ugrótáblákat tartalmaz a program?Milyen adatokat tartalmaz egy ugró tábla? Hogy értük el, hogy ugró táblát alkalmazhatunk a

programban?Hogy működik az XLAT utasítás?Miért alkalmaztunk más módszert az átkódoló tábla

kialakításakor a nagy betűk kódjának beírásához, mint a speciális jelek kódjának beírásához?

Page 66: String kezelő utasítások

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

FeladatokMilyen eljárásokkal valósítottuk meg az egyszerűsített

lexikális elemzőt? Melyiknek mi a feladata?Milyen karakter eredményez hibát szám beolvasása

közben?Milyen szintaktikus helyzetbe kerül a program hiba

észlelése után?Hogyan kezeli a program a különböző szintaktikus

helyzeteket?Magyarázza el a JMP [ax] utasítás működését!Mit kellene módosítani a programban, hogy a vége jel

csak speciális jel után következhessen?

Page 67: String kezelő utasítások

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

FeladatokMi a mikroarchitektúra szint feladata?Hogy valósítja meg a feladatát?Mi az adatút?Milyen sínjei vannak a Mic-1 -nek?Mely regiszterek csatlakoznak az A sínhez?Mely regiszterek csatlakoznak a B sínhez?Mely regiszterek csatlakoznak a C sínhez?Milyen jelek szükségesek az adatút vezérléséhez?Mire szolgál az SP regiszter két vezérlő bemenete?Mire szolgál az MBR regiszter két vezérlő bemenete?

Page 68: String kezelő utasítások

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

FeladatokHogy történik a memóriából olvasás?Hogy történik a memóriába írás?Mire szolgál a MAR/MDR regiszter?Ha egy mikroutasítás módosítja MAR tartalmát, és

olvas a memóriából, akkor mely címről fog olvasni?Memóriából olvasás után mikor használható MDR új

értéke az adatúton illetve MPC meghatározásához?Mire szolgál a PC és az MBR regiszter?Mire szolgál az N és a Z regiszter?Mire szolgál a H regiszter?

Page 69: String kezelő utasítások

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

FeladatokMilyen memória műveletei vannak a Mic-1 -nek?Milyen jelek szükségesek a Mic-1 adatútjának

vezérléséhez?Hány jel szolgál az A sín vezérlésére?Hány jel szolgál a B sín vezérlésére?Hány jel szolgál az ALU és a léptető vezérlésére?Hány jel szolgál a C sín vezérlésére?Hány jel szolgál a memória elérésére?Milyen részei vannak a Mic-1 mikroutasításainak?Milyen részei vannak az adatút ciklusnak?

Page 70: String kezelő utasítások

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

FeladatokMilyen részei vannak a Mic-1 mikroutasításainak?Milyen típusú memória a mikroprogram tároló?Mire szolgál az MPC regiszter?Mire szolgál az MIR regiszter?Miért van szükség az Addr mezőre?Milyen részei vannak az adatút ciklusnak?Hány bit kell a B/C sín vezérléséhez?Mire szolgál a JMPN/JMPZ bit?Mire szolgál a JMPC bit?Hogy alakul ki MPC új tartalma?

Page 71: String kezelő utasítások

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

FeladatokMiért nem megengedett az

MAR = SP; rdMDR = H

utasítás pár?Hogy valósítható meg feltétlen ugrás a

mikroprogramban?Hogy valósítható meg feltételes ugrás a

mikroprogramban?Hogy valósítható meg kapcsoló utasítás a

mikroprogramban?

Page 72: String kezelő utasítások

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

FeladatokMilyen részei vannak az egy bites ALU-nak?Milyen vezérlő bemenetei vannak az ALU-nak?Milyen vezérlő bemenetek esetén lesz 1 az eredmény?Milyen eredményt szolgáltat az F0=0, F1=1, ENA=0,

ENB=0, INVA=1, INC=1 vezérlő bemenet? A Mic-1 mely regisztere lehet az ALU bal/jobb

operandusa?Hova tárolhatja a Mic-1 az eredményt?Érvényes utasítás-e Mic-1-en a H=OPC-H? Miért?Érvényes utasítás-e Mic-1-en a H=H-OPC? Miért?

Page 73: String kezelő utasítások

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

FeladatokMilyen utasításai vannak a Mic-1 gépnek?Milyen ugró utasításai vannak a Mic-1 gépnek?Milyen értékeket vehet föl a SOURCE operandus?Milyen értékeket vehet föl a DEST operandus?Mit jelent a wr?Mely utasítások tudnak olvasni a memóriából, és hogy

működnek?Hogy lehet védekezni az ellen, hogy MDR egyszerre

kapjon értéket a memóriából és a C sínről?Mi az operandus verem?

Page 74: String kezelő utasítások

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

FeladatokMinek a rövidítése az IJVM?Ismertesse az IJVM memóriamodelljét!Milyen utasításai vannak az IJVM-nek?Mi a BIPUSH/DUP/IADD/SWAP utasítás feladata?Mi a GOTO utasítás feladata?Mi a IFEQ/IF_ICMPEQ utasítás feladata?Hogy működik a Mic-1 főciklusa?Mit tartalmaz PC és MBR a főciklus indulásakor?Hogy valósítható meg Mic-1-en a NOP utasítás?Hogy valósítható meg Mic-1-en az IADD utasítás?