910 likes | 1.01k Views
Vezérlés átadó utasítások Eljárásokkal kapcsolatos utasítások Eljárás hívás: CALL op ; eljárás hívás - közeli: push IP, IP op, - távoli: push CS, push IP, (CS:IP) op. Visszatérés az eljárásból: RET ; visszatérés a hívó programhoz (RETurn)
E N D
Vezérlés átadó utasítások Eljárásokkal kapcsolatos utasítások Eljárás hívás: CALL op ; eljárás hívás - közeli: push IP, IP op, - távoli: push CS, push IP, (CS:IP) op. Visszatérés az eljárásból: RET ; visszatérés a hívó programhoz (RETurn) - közeli: pop IP, - távoli: pop IP, pop CS. RET op ; . . . , SP SP+op ; op csak közvetlen adat lehet! 4. előadás
Feltétlen vezérlés átadás (ugrás) JMP op ; ha op közeli: IP op, ; ha távoli: (CS:IP) op. 4. előadás
A feltételek: Zero, Equal, No(Not), Greater, Less, Above, Below, Carry 4. előadás
A feltételek: Zero, Equal, No(Not), Carry, Sign, Overflow, Parity Even, Parity Odd. 4. előadás
Minden feltételes vezérlés átadás IP relatív címzéssel (SHORT) valósul meg! Pl.: JZ MESSZE ; Hibás, ha ; MESSZE messze van Megoldás: JNZ IDE ; Negált feltételű ugrás JMP MESSZE IDE: . . . 4. előadás
Ciklus szervező utasítások IP relatív címzéssel(SHORT)valósulnak meg. LOOP ipr ; CX CX – 1, ugrás ipr -re, ; ha CX 0 LOOPZ ipr ; CX CX – 1, ugrás ipr -re, ; ha (CX 0 és Z=1) LOOPE ipr ; ugyanaz mint LOOPZ LOOPNZ ipr ; CX CX – 1, ugrás ipr -re, ; ha (CX 0 és Z=0) LOOPNE ipr ; ugyanaz mint LOOPNZ 4. előadás
; B = A n-dik hatványa, ; A és n előjel nélküli byte, B word ; Feltétel: A n-1 –dik hatványa elfér AL –ben. mov cl, n ; a ciklus előkészítése xor ch, ch mov al, 1 ; lehetne: mov ax, 1 xor ah, ah ; akkor ez nem kell JCXZ kesz ; ha n=0, akkor 0-szor ; fut a ciklus mag c_mag: mul A ; ciklus mag LOOP c_mag ; ismétlés, ha kell kesz: mov B, ax 4. előadás
; Két vektor skalár szorzata. 1. változat code segment para public ’code’ assume cs:code, ds:data, ss:stack, es:nothing skalar proc far push ds ; visszatérési cím a verembe xor ax,ax ; ax 0 push ax ; visszatérés offset címe mov ax,data ; ds a data szegmensre mutasson mov ds,ax ; sajnos „mov ds,data” ; nem megengedett ; A 4. előadás
mov cl,n ; cl n, 0 n 255 xor ch,ch ; cx = n szavasan xor dx,dx ; az eredmény ideiglenes helye jcxz kesz ; ugrás a kesz címkére, ; ha CX (=n) = 0 xor bx,bx ; bx 0, ; bx-et használjuk indexezéshez 4. előadás
ism: mov al,a[bx] ; al a[0], később a[1], ... imul b[bx] ; ax a[0]b[0], a[1]b[1], ... add dx,ax ; dx részösszeg inc bx ; bx bx+1, az index növelése ; B dec cx ; cx cx-1, (vissza)számlálás jcxz kesz ; ugrás a kész címkére, ha cx=0 jmp ism ; ugrás az ism címkére kesz: mov ax,dx ; a skalár szorzat értéke ax-ben ; C 4. előadás
call hexa ; az eredmény kiírása ; hexadecimálisan mov si,offset kvse ; kocsi vissza soremelés call kiiro ; kiírása ret ; vissza az Op. rendszerhez skalar endp ; a skalár eljárás vége ; D 4. előadás
Egyszerűsítési lehetőség: ; B dec cx ; cx cx-1, (vissza)számlálás jcxz kesz ; ugrás a kész címkére, ha cx=0 jmp ism ; ugrás az ism címkére kesz: mov ax,dx ; a skalár szorzat értéke ax-ben helyett: ; B LOOP ism ; ugrás az ism címkére, ; ha kell ismételni kesz: mov ax,dx ; a skalár szorzat értéke ax-ben 4. előadás
Annak érdekében, hogy a skalárszorzatot kiszámító program ne rontson el regisztereket, kívánatos ezek mentése: ; A PUSH BX ; mentés PUSH CX PUSH DX és visszamentése: POP DX ; visszamentés POP CX POP BX ; C 4. előadás
A paraméterek szabványos helyen történő átadása ; Két vektor skalár szorzata. 2. változat . . . ; A ; ELJÁRÁS HÍVÁS A PARAMÉTEREK ; SZABVÁNYOS HELYEN TÖRTÉNŐ ÁTADÁSÁVAL CALL SKAL ; ELJÁRÁS HÍVÁS ; eredmény az AX regiszterben ; C call hexa ; az eredmény kiírása mov si,offset kvse ; kocsi vissza, soremelés call kiiro ; kiírása . . . ret ; vissza az Op. rendszerhez skalar endp ; a skalár eljárás vége ; D 4. előadás
SKAL PROC ; KÖZELI (NEAR) ELJÁRÁS ; KEZDETE ; Az A-tól C-ig tartó program rész: PUSH BX ; MENTÉSEK PUSH CX PUSH DX mov cl,n ; cl n, 0 n 255 xor ch,ch ; cx = n szavasan xor dx,dx ; az eredmény ideiglenes helye jcxz kesz ; ugrás a kesz címkére, ha n=0 xor bx,bx ; bx 0, ; bx-et használjuk indexezéshez 4. előadás
ism: mov al,a[bx] ; al a[0], később a[1], ... imul b[bx] ; ax a[0]b[0], a[1]b[1],... add dx,ax ; dx részösszeg inc bx ; bx bx+1, az index növelése ; B LOOP ism ; ugrás az ism címkére, ; ha kell ismételni kesz: mov ax,dx ; a skalár szorzat értéke ax-ben POP DX ; VISSZAMENTÉSEK POP CX POP BX ; C RET ; VISSZATÉRÉS A HÍVÓ ; PROGRAMHOZ SKAL ENDP ; A SKAL ELJÁRÁS VÉGE ; D … Csak az a és b vektor skalár szorzatát tudja kiszámolni! 4. előadás
A paraméterek regiszterekben történő átadása ; Két vektor skalár szorzata. 3. változat . . . ; A ; ELJÁRÁS HÍVÁS A PARAMÉTEREK ; REGISZTEREKBEN TÖRTÉNŐ ÁTADÁSÁVAL MOV CL, n ; PARAMÉTER BEÁLLÍTÁSOK XOR CH, CH ; CX = n, ÉRTÉK MOV SI,OFFSET a ; SI a OFFSET CÍME MOV DI,OFFSET b ; DI b OFFSET CÍME call skal ; eljárás hívás ; eredmény az ax regiszterben call hexa ; az eredmény kiírása mov si,offset kvse ; kocsi vissza, soremelés call kiiro ; kiírása . . . ret ; visszatérés az Op. rendszerhez skalar endp ; a skalár eljárás vége 4. előadás
skal proc ; Közeli (NEAR) eljárás kezdete push bx ; mentések push cx push dx xor dx,dx ; az eredmény ideiglenes helye jcxz kesz ; ugrás a kesz címkére, ha n=0 xor bx,bx ; bx 0, ; bx-et használjuk indexezéshez 4. előadás
ism: mov al,[SI+BX] ; FÜGGETLEN a-tól imul BYTE PTR [DI+BX]; FÜGGETLEN b-től ; csak „BYTE PTR”-ből derül ki, hogy 8 bites a szorzás add dx,ax ; dx részösszeg inc bx ; bx bx+1, az index növelése loop ism ; ugrás az ism címkére, ; ha kell ismételni kesz: mov ax,dx ; a skalár szorzat értéke ax-ben pop dx ; visszamentések pop cx pop bx ret ; visszatérés a hívó programhoz skal endp ; a skal eljárás vége ; D . . . Így csak kevés paraméter adható át! 4. előadás
; Két vektor skalár szorzata. 4. változat . . . ; A ; ELJÁRÁS HÍVÁS A PARAMÉTEREK ; VEREMBEN TÖRTÉNŐ ÁTADÁSÁVAL MOV AL,n ; AL-t nem kell menteni, mert XOR AH,AH ; AX-ben kapjuk az eredményt PUSH AX ; AX=n a verembe MOV AX,OFFSET a ; AX a OFFSET címe PUSH AX ; a verembe MOV AX,OFFSET b ; AX b OFFSET címe PUSH AX ; a verembe A verembe került: n értéke, a címe, b címe paraméterek 4. előadás
call skal ; eljárás hívás ; eredmény az ax regiszterben ADD SP,6 ; paraméterek ürítése a veremből . . . ret ; visszatérés az Op. rendszerhez skalar endp ; a skalár eljárás vége call skal Hatására a verembe került a visszatérési cím 4. előadás
skal proc ; Közeli (near) eljárás kezdete PUSH BP ; BP értékét mentenünk kell MOV BP,SP ; BP SP, ; a stack relatív címzéshez PUSH SI ; mentések PUSH DI push bx push cx push dx A verem tartalma: n értéke, a címe, b címe paraméterek visszatérési cím, bp, si, di, bx, cx, dx mentett regiszterek 4. előadás
A verem tartalma: n értéke, a címe, b címe paraméterek visszatérési cím, bp, si, di, bx, cx, dx mentett regiszterek (SS:SP) dxPUSH BP ; BP értékét mentenünk kell + 2 cxMOV BP,SP ; BP SP, + 4 bx + 6 di + 8 si +10 bp - - - - - - - - - - - - - - - - - - - - - (SS:BP) +12 visszatérési cím + 2 +14 b címe + 4 +16 a címe + 6 +18 n értéke + 8 . . . korábbi mentések . . . 4. előadás
+10 bp - - - - - - - - - - - - - - - - - - - - - (SS:BP) +12 visszatérési cím + 2 +14 b címe + 4 +16 a címe + 6 +18 n értéke + 8 . . . korábbi mentések . . . MOV SI,6[BP] ; SI az egyik vektor címe MOV DI,4[BP] ; DI a másik vektor címe MOV CX,8[BP] ; CX a dimenzió értéke xor dx,dx ; az eredmény ideiglenes helye jcxz kesz ; ugrás a kesz címkére, ha n=0 xor bx,bx ; bx 0, indexezéshez 4. előadás
ism: mov al,[si+bx] ; független a-tól imul byte ptr [di+bx] ; független b-től ; csak „byte ptr”-ből derül ki, hogy 8 bites a szorzás add dx,ax ; dx részösszeg inc bx ; bx bx+1, az index növelése loop ism ; ugrás az ism címkére, ; ha kell ismételni kesz: mov ax,dx ; a skalár szorzat értéke ax-ben 4. előadás
pop dx ; visszamentések pop cx pop bx POP DI POP SI POP BP ret ; visszatérés a hívó programhoz skal endp ; a skal eljárás vége ; D . . . ADD SP,6 ; paraméterek ürítése a veremből helyett más megoldás: RET 6 ; visszatérés a hívó programhoz ; verem ürítéssel: . . . SP = SP + 6 4. előadás
C konvenció Hogy egy eljárás különböző számú paraméterrel legyen hívható, azt úgy lehet elérni, hogy a paramétereket fordított sorrendben tesszük a verembe, mert ilyenkor a visszatérési cím alatt lesz az első, alatta a második, stb. paraméter, és általában a korábbi paraméterek döntik el, hogy hogyan folytatódik a paramétersor. 4. előadás
Lokális adat terület, rekurzív és re-entrant eljárások Ha egy eljárás működéséhez lokális adat területre, munkaterületre van szükség, és a működés befejeztével a munkaterület tartalma fölösleges, akkor a munkaterületet célszerűen a veremben alakíthatjuk ki. A munkaterület lefoglalásának ajánlott módja: . . . proc . . . PUSH BP ; BP értékének mentése MOV BP,SP ; BP SP, ; a stack relatív címzéshez SUB SP,n ; n byte-os munkaterület lefoglalása . . . ; további regiszter mentések 4. előadás
Lokális adat terület (NEAR eljárás esetén) (SS:SP) lokális adat terület . . . + 2 . . . . . . . . . . . . – 2 bp - - - - - - - - - - - - - - - - - - - - - (SS:BP) visszatérési cím + 2 paraméterek . . . korábbi mentések . . . A munkaterület negatív displacement érték mellett stack relatív címzéssel érhető el. (A veremben átadott paraméterek ugyancsak stack relatív címzéssel, de pozitív displacement érték mellett érhetők el.) 4. előadás
A munkaterület felszabadítása visszatéréskor a . . . ; visszamentések MOV SP,BP ; a munkaterület felszabadítása POP BP ; BP értékének visszamentése ret . . . ; visszatérés utasításokkal történhet. 4. előadás
Rekurzív és re-entrant eljárások Egy eljárás rekurzív, ha önmagát hívja közvetlenül, vagy más eljárásokon keresztül. Egy eljárás re-entrant, ha többszöri belépést tesz lehetővé, ami azt jelenti, hogy az eljárás még nem fejeződött be, amikor újra felhívható. A rekurzív eljárással szemben a különbség az, hogy a rekurzív eljárásban „programozott”, hogy mikor történik az eljárás újra hívása, re-entrant eljárás esetén az esetleges újra hívás ideje a véletlentől függ. Ez utóbbi esetben azt, hogy a munkaterületek ne keveredjenek össze, az biztosítja, hogy újabb belépés csak másik processzusból képzelhető el, és minden processzus saját vermet használ. 4. előadás
Rekurzív és re-entrant eljárások Ha egy eljárásunk készítésekor betartjuk, hogy az eljárás a paramétereit a vermen keresztül kapja, kilépéskor visszaállítja a belépéskori regiszter tartalmakat – az esetleg eredményt tartalmazó regiszterek kivételével –, továbbá a fenti módon kialakított munkaterületet használ, akkor az eljárásunk rekurzív is lehet, és a többszöri belépést is lehetővé teszi (re-entrant). 4. előadás
Gyorsító tár (cache – 2.16. ábra) A processzorok mindig gyorsabbak a memóriáknál. A CPU lapkára integrálható memória gyors, de kicsi. Feloldási lehetőség: a központi memória egy kis részét (gyorsító tár) a CPU lapkára helyezni: Amikor egy utasításnak adatra van szüksége, akkor először itt keresi, ha nincs itt, akkor a központi memóriában. Lokalitási elv: Ha egy hivatkozás a memória A címére történik, akkor a következő valószínűleg valahol A közelében lesz (ciklus, mátrix manipulálás, …). Ha A nincs a gyorsító tárban, akkor az A-t tartalmazó (adott méretű) blokk (gyorsító sor - cache line) kerül beolvasásra a memóriából a gyorsító tárba. 4. előadás
Találati arány (h): az összes hivatkozás mekkora hányada szolgálható ki a gyorsító tárból. Hiba arány:1-h. Ha a gyorsító tár elérési ideje: c, a memória elérési ideje: m, akkor az átlagos elérési idő = c + (1- h) m. A gyorsító tár mérete: nagyobb tár – drágább. A gyorsító sor mérete: nagyobb sor – nagyobb a sor betöltési ideje is. Ugyanakkora tárban kevesebb gyorsító sor fér el. 4. előadás
Osztott (külön utasítás és adat) gyorsító tár előnyei: • Egyik szállítószalag végzi az utasítás, másik az operandus előolvasást. • Az utasítás gyorsító tárat sohasem kell visszaírni (az utasítások nem módosulnak). Egyesített gyorsító tár: nem lehetséges párhuzamosítás. Hierarchia: • elsődleges, a CPU lapkán, • másodlagos, a CPU-val egy tokban, • külön tokban. 4. előadás
Direkt leképezésű gyorsító tár működése: (4_38_abrahoz) Ha a gyorsító tár Vonal által mutatott sorában V=1 (valid), és a TAG megegyezik a címben lévő TAG-gel, akkor az adat bent van a gyorsító tárban (ebben a sorban). 4. előadás
Halmazkezelésű (csoportasszociatív) gyorsító tár Ha egy program gyakran használ olyan szavakat, amelyek távol vannak egymástól, de ugyanoda képződnek le a gyorsító tárban, akkor sűrűn kell cserélni a gyorsító sort. Ha minden címhez n bejegyzés van, akkor n utas halmazkeresésű gyorsító tárról beszélünk. Ritka a több, mint 4 utas kezelés. LRU (Least Recently Used) algoritmus: gyorsító sor betöltése előtt a legrégebben használt bejegyzés kerül ki a gyorsító tárból. 4. előadás
Halmaz kezelésű gyorsító tár (4.39. ábra) D bejegyzés A bejegyzés B bejegyzés C bejegyzés Ha a gyorsító tár Vonal által mutatott sorában az A, B, C és D bejegyzések egyikében V=1 (valid), és a hozzá tartozó TAG megegyezik a címben lévő TAG-gel, akkor az adat bent van a gyorsító tárban (ebben a bejegyzésben). 4. előadás
Memóriába írás Stratégiák: Írás áteresztés (write through): az írás a memóriába történik. Ha a cím a gyorsítóban van, oda is be kell írni, különben el kellene dobni a gyorsító sort. Késleltetett írás (write deferred, write back): ha a cím bent van a gyorsító tárban, akkor csak a gyorsító tárba írunk, a memóriába csak gyorsító sor cserénél. Ha a cím nincs a gyorsító tárban, akkor előtte betölthetjük: írás allokálás (write allocation) – többnyire ezt alkalmazzák késleltetett írás esetén. 4. előadás
regiszterek Gyorsító tár Központi memória Mágneslemez Optikai lemez Szalag Elérési idő: néhány nanosec >100 msec Kapacitás: néhány bájt néhány száz GB Memória hierarchia (2.18. ábra) 4. előadás
címzés adat sínvezérlésmegszakítások sínütemezés/kiosztássegédprocesszorállapotvegyes Φ+5V földelés órajel tápfeszültség CPU (Central Processing Unit) Általában egyetlen lapkán van. Lábakon keresztül kommunikál a többi egységgel (3.34. ábra). CPU 4. előadás
címzés adat sínvezérlésmegszakítások sínütemezés/kiosztás segédprocesszorállapotvegyes CPU Φ+5V Lábak (pins) három típusa: cím, adat, vezérlés. Ezek párhuzamos vezetékeken, az un. sínen keresztül kapcsolódnak a memória, az I/O egységek hasonló lábaihoz. 4. előadás
címzés adat sínvezérlésmegszakítások sínütemezés/kiosztás segédprocesszorállapotvegyes CPU Φ+5V Lényeges a cím- és adatlábak száma (3.34. ábra): • Ha m címláb van, akkor 2m memóriarekesz érhető el (tipikus m = 16, 20, 32, 64). • Ha n adatláb van, akkor egyszerre n bit olvasható illetve írható (tipikus n = 8, 16, 32, 36, 64). 4. előadás
címzés adat sínvezérlésmegszakítások sínütemezés/kiosztás segédprocesszorállapotvegyes CPU Φ+5V Óra, áram (3.3 v. 5V), föld, továbbá vezérlőlábak: • sín vezérlés (bus control): mit csináljon a sín, • megszakítások, • sín kiosztás (ütemezés, egyeztetés – bus arbitration): kinek dolgozzon a sín, • segéd processzor vezérlése, jelzései, • állapot, • egyebek. 4. előadás
címzés adat sínvezérlésmegszakítások sínütemezés/kiosztás segédprocesszorállapotvegyes CPU Φ+5V Pl. utasítás betöltése: • A CPU kéri a sín használat jogát, • Az utasítás címét a cím lábakra teszi, • vezérlő vonalon informálja a memóriát, hogy olvasni szeretne, • a memória a kért szót az adat vonalakra teszi, kész jelzést tesz egy vezérlő vonalra, • a CPU végrehajtáshoz átveszi az utasítást. 4. előadás
CPU lapka regiszterek memória-sín memória sínvezérlő B/K sín ALU modem nyomtató lemez Lapkán belüli sínek Sín (bus): Korai személyi számítógépeknél egyetlen (külső) rendszersín, manapság legalább kettő van: egy belső és egy külső (I/O), 3.35. ábra. 4. előadás
Sínprotokoll: a sín működésének + a csatlakozások mechanikai, elektronikus definíciója Mesterek (masters): aktív (kezdeményező) berendezések (CPU, lemez vezérlő). Szolgák (slaves): passzív (végrehajtó) berendezések (lemez vezérlő, CPU), 3.35. ábra. Ez a szereposztás tranzakciónként eltérő lehet. A memória sohasem lehet mester! 4. előadás
A sínhez kapcsolódó lapkák lényegében erősítők.Mester – sín vezérlő (bus driver) – sín. Sín – sín vevő (bus receiver) – szolga.Mester–szolgáknál: sín adó-vevő (bus transceiver). A csatlakozás gyakran tri-state device vagy open collector – wired-OR segítségével történik. Sávszélesség: (továbbítható bitek száma) / sec. Sávszélesség növelése:Gyorsítás: probléma a sín aszimmetria (skew), kompatibilitás. Sínszélesség: szélesebb sín drágább, kompatibilitás. 4. előadás
8086 80286 80386 20 bites cím vezérlés 4 bites 8 bites Sínszélesség (pl. IBM PC: 3.37., 3.51. ábra). 3.37. ábra. A cím szélességének növekedése az elmúlt időszakban 4. előadás
3.51. ábra.A PC/AT sín két komponense, az eredeti PC és az új rész 4. előadás