1 / 74

String kezelő utasítások

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.

keola
Download Presentation

String kezelő utasítások

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 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! 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) 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 Byte CMPSW ; CoMPare String Word CMPS 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 Byte SCASW ; SCAn String Word SCAS d ; SCAn String (byte vagy word) 5. előadás

  5. Ismétlő prefixumok REP  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-gyelcsö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. 5. előadás

  6. Ismétlő prefixumok REP  REPZ  REPE és REPNZ  REPNE A program jobb olvashatósága érdekében • flag-et nem állító utasítások előtt mindigREP-ethasználjunk, • flag-et beállító utasítás előtt pedigsohaseREP-et, hanemhelyette a vele egyenértékűREPE-tvagy REPZ-t! 5. előadás

  7. ; A 100 elemű array nevű tömbnek van-e ; 3-tól különböző eleme? mov cx, 100 mov di, -1 ; előbb lehessen inc, mint cmp mov al, 3 NEXT: inc di cmp array[di], al ; array di-edik eleme = 3? LOOPE NEXT ; ugrás NEXT-re, ; ha CX0 és a di-edik elem=3 JNE NEM3 ; CX = 0 vagy array[di]  3 . . . ; array  3 . . . NEM3: . . . ; di az első 3-tól különböző . . . ; elem indexe 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,100 mov di,offset array mov AL,3 REPE SCAS array ; array 0., 1., ... eleme = 3? JNE NEM3 . . . ; array  3, . . . NEM3: DEC DI ; DI az első  3 elemre mutat . . . 5. előadás

  9. mov cx,100 mov di,offset array mov AL,3 REPE SCAS array JNE NEM3 . . . . . . NEM3: DEC DI . . . Használja ES-t. Sokkal gyorsabb mov cx, 100 mov di, -1 mov al, 3 NEXT: inc di cmp array[di], al LOOPE NEXT JNE NEM3 . . . . . . NEM3: . . . . . . A 100 elemű array nevű tömbnek van-e 3-tól különböző eleme? Nem minden eltérés lényeges! 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: 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 5. előadás

  12. ; azonosító szint t_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 szint dw vege ; $: .  program vége ; szám szint t_n dw hiba ; hibás kar.: ?  spec. jel szint dw hiba ; betű: hiba: ?  spec. jel szint dw ok ; számjegy: nincs teendő dw lev_s ; speciális jel: ,  spec. jel szint dw vege ; $: .  program vége 5. előadás

  13. level dw ? ; az aktuális ugrótábla címe c_h db 0 ; hibás karakter kódja c_b db 2 ; betű kódja c_n db 4 ; számjegy kódja c_s db 6 ; speciális jel kódja c_v db 8 ; végjel kódja specjel db ’ ,. ;+-()’, 13, 10 ; a speciális jelek vegjel 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 5. előadás

  14. code segment para public ’code’ assume cs:code, ds:data, es:data, ss:stack lex proc far push ds xor ax,ax push ax ; visszatérési cím a veremben mov ax,data mov ds,ax mov es,ax ; assume miatt call prepare ; átkódoló tábla elkészítése mov si, offset text ; az elemzendő szöveg ; kezdőcíme call parsing ; elemzés ret ; vissza az Op. rendszerhez lex endp 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 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 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 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 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 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ív mov bx, offset table mov di,offset t_s ; spec. jel szint lv1: mov level,di ; szint beállítás xor ah,ah ; hogy ax=al legyen ok: lods text ; a következő karakter xlat ; al  0, 2, 4, 6 vagy 8 mov di, level ; di  az akt. ugrót. címe add di, ax ; az ugrótáblán belüli cím jmp [di] ; kapcsoló utasítás 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 5. előadás

  22. lev_n: mov di,offset t_n ; szám kezdődik mov al,’0’ jmp lv2 lev_s: mov di,offset t_s ; speciális jel mov al,’,’ jmp lv2 vege: mov al,’.’ ; szöveg vége 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 ret ; elemzés vége, vissza a hívóhoz parsing endp code ends 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 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ó). 5. előadás

  25. Mic-1 Adatú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. memória MAR MDR PC MBR SP LV CPP TOS OPC H Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztertC sínt a regiszterbe írja memóriábamemóriából Bsín Csín B A N 1, ha az eredmény < 0, különben 0, 6 Z 1, ha az eredmény = 0, különben 0. ALU ALUvezérlés 2 Léptető vezérlés Léptető 5. előadás

  26. Pl. SP = SP + 1 • SPB sín • ALU: B+1  C • C  SP memória MAR MDR PC MBR SP LV CPP TOS OPC H Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztertC sínt a regiszterbe írja memóriábamemóriából Bsín Csín B A N 1, ha az eredmény < 0, különben 0, 6 Z 1, ha az eredmény = 0, különben 0. ALU ALUvezérlés 2 Léptető vezérlés Léptető 5. előadás

  27. Pl. SP = SP + 1 • SP  B sín • ALU:B+1  C • C  SP memória MAR MDR PC MBR SP LV CPP TOS OPC H Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztertC sínt a regiszterbe írja memóriábamemóriából Bsín Csín B A N 1, ha az eredmény < 0, különben 0, 6 Z 1, ha az eredmény = 0, különben 0. ALU ALUvezérlés 2 Léptető vezérlés Léptető 5. előadás

  28. Pl. SP = SP + 1 • SP  B sín • ALU:B+1  C • C SP memória MAR MDR PC MBR SP LV CPP TOS OPC H Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztertC sínt a regiszterbe írja memóriábamemóriából Bsín Csín B A N 1, ha az eredmény < 0, különben 0, 6 Z 1, ha az eredmény = 0, különben 0. ALU ALUvezérlés 2 Léptető vezérlés Léptető 5. előadás

  29. Pl. SP = SP + 1 • SP  B sín • ALU: B+1  C • C SP memória MAR MDR PC MBR SP LV CPP TOS OPC H Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztertC sínt a regiszterbe írja memóriábamemóriából Bsín Csín B A N 1, ha az eredmény < 0, különben 0, 6 Z 1, ha az eredmény = 0, különben 0. ALU ALUvezérlés 2 Léptető vezérlés Léptető 5. előadás

  30. memória MAR MDR PC MBR 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. 5. előadás

  31. Az adatút vezérlése (4.1. ábra) memória MAR MDR PC MBR SP LV CPP TOS OPC H Bsín Csín B A 6 ALU ALUvezérlés 2 Léptető 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, összesen 24 vezérlő jelre van szükség. N Z Léptető vezérlés 5. előadás

  32. Mikroutasítások 24 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. NEXTADDRESS JMPC JAMNJAMZSLL8SRA1F0F1ENAENBINVAINCHOPCTOSLVSPPCMDRMARWRITEREADFETCHB sín 5. előadás

  33. SP  B sín; ALU  C; C  SP 5. előadás

  34. memória MAR MDR PC MBR 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. 5. előadás

  35. Memória ciklus: MAR = LV; rd; TOS = MDR 5. előadás

  36. A mikroprogram MPC 9 512x36 bites vezérlőtár (ROM) a mikroprogram tárolására MIR 4-ről 16-ra dekódoló 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. 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. memória MAR MDR PC MBR SP LV CPP TOS OPC H Bsín Csín B A 6 N Z ALU 2 Léptető 5. előadás

  38. MPC új tartalmának kialakítása 3 1 2 9 MPC 9 + Mic-1:4.6. ábra. 8 512x36 bites vezérlőtár (ROM)a mikroprogram tárolására MBR (N&JAMN) + (Z&JAMZ) JMPC JAMN/JAMZ MIR N 1 bites flip-flopok Z 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. 5. előadás

  40. JAMN: if(LV-H < 0) goto L1; else goto L2 L2+ 0x100= L1 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 0Felté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. 5. előadás

  42. JMPC: TOS=H+SP+1; goto(MBR) 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/vagy alapján módosul MPC mem. MBR Memória ciklus indítása JMPC és (MBR) (rd, wr, fetch) alapján módosul MPC. 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). 5. előadás

  45. memória MAR MDR PC MBR SP LV CPP TOS OPC H Bsín Csín B A 6 N Z ALU 2 Léptető 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. 5. előadás

  46. Nem megengedett pl. az alábbi utasítás pár: MAR = SP; rd MDR = H // A memóriából is most kapna értéket! 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 ORvalue) value általában 0 vagy 0x100. 5. előadás

  48. Feltételes elágazás, pl.: TOS (Top Of Stack) alapján Z = TOS ; if (Z) goto L1; else goto L2 // Z=1, ha TOS=0, különben Z=0. esetén a mikroprogram az L20x092 címen folytatódik, ha Z = 0, L10x192 címen folytatódik, ha Z = 1. Az L1 és L2 címek különbsége 256 (0x100) kell legyen (4.7. ábra)! 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). 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 5. előadás

More Related