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
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
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!
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)
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)
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.
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!
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
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
. . .
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!
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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ó).
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
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
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
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
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
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
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
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
Máté: Architektúrák 5. előadás 33
SP B sín; ALU C; C SP
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
Máté: Architektúrák 5. előadás 35
Memória ciklus: MAR = LV; rd; TOS = MDR
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
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
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
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
Máté: Architektúrák 5. előadás 40
JAMN: if(LV-H < 0) goto L1; else goto L2
L2+
0x100=
L1
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.
Máté: Architektúrák 5. előadás 42
JMPC: TOS=H+SP+1; goto(MBR)
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.
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).
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
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!
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.
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
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
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
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.
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
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
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:
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.
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.
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
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.
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
Máté: Architektúrák 5. előadás 60
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?
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?
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!
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!)
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?
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?
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?
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?
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?
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?
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?
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?
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?
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?