270 likes | 467 Views
Darbas su tekstu. Informatikos katedra, L.Kaklauskas 2002 metai. Video režimo nustatymas(BIOS). Komanda: INT 10h Įrašymas: AH = 0 0 h A L = video režimo numeris 7 jaunesni baitai, o vyriausias 1 – ekranas nevalomas, 0 – nuvalomas. AL reikšmės: 01h – 16 spalvų 40X25,
E N D
Darbas su tekstu Informatikos katedra, L.Kaklauskas 2002 metai
Video režimo nustatymas(BIOS) Komanda: INT 10h Įrašymas: AH = 00h AL =video režimo numeris 7 jaunesni baitai, o vyriausias 1 – ekranas nevalomas, 0 – nuvalomas. AL reikšmės: 01h – 16 spalvų 40X25, 02h ir 03h – 16 spalvų 80X25, 07h – nespalvotas 80X25. Yra ir daugiau, bet jie priklauso nuo konkrečios vaizdo plokštės.
Žymeklio pozicija (BIOS) Komanda: INT 10h Įrašymas: AH = 02h BH = puslapio numeris, DH = eilutė, DL = stulpelis. Stulpeliai ir eilutės skaičiuojami nuo kairiojo viršutinio ekrano kampo, pradinė koordinatė (0, 0). Video režimai 2 ir 3 gali naudoti nuo 0 iki 3 puslapių, o 0 ir 1 naudoja nuo 0 iki 7 puslapio. Juos naudojant galima tekstą spausdinti neaktyviame puslapyje, o po to akimirksniu persijungti.
Skaityti žymeklio padėti ekrane (BIOS) Komanda: INT 10h Įrašymas: AH = 03h BH = puslapio numeris, DH = eilutė, DL = stulpelis, CH = pirmoji žymeklio pozicija, CL = paskutinioji žymeklio pozicija,
Simbolių spausdinimas ekrane (BIOS) Kiekvienas simbolis ekrane aprašomas dviem baitais: Pirmas baitas ASCII kodas, antras – atributai Atributo baito reikšmės: 7 bitas – 1 reiškia, kad simbolis mirksi arba fonas pavaizduojamas ryškesne spalva, 6-4 bitai – fono spalva, 3 bitas – 1 reiškia simbolis ryškio spalvos arba fonas mirksi, 2-0 bitai – simbolio spalva.
Skaityti simbolį žymeklio pozicijoje (BIOS) Komanda: INT 10h Įrašymas: AH = 08h BH = puslapio numeris, Duomenys AH = simbolio atributas, AL = simbolio ASCII kodas,
Spausdinti simbolį žymeklio pozicijoje (BIOS) Komanda: INT 10h Įrašymas: AH = 09h BH = puslapio numeris, AL = simbolio ASCII kodas, BL = simbolio atributas, CX = simbolio kartojimo skaičius. CX neturi viršyti simbolių kiekio, likusio iki ekrano pabaigos. Spausdina simbolį su einamuoju atributu. Komanda: INT 10h Įrašymas: AH = 0Ah BH = puslapio numeris, AL = simbolio ASCII kodas, CX = simbolio kartojimo skaičius
Spausdinti simbolį teletaipo režimu (BIOS) Komanda: INT 10h Įrašymas: AH = 0Eh BH = puslapio numeris, AL = simbolio ASCII kodas, Jei ekrane netelpa tekstas, tai jis prasukamas žemyn. Interpretuoja valdančiuosius kodus CR(0Dh), LF(0Ah), BEL(7).
Spausdina eilutę su nurodytais atributais (BIOS) Komanda: INT 10h Įrašymas: AH = 13h AL = režimas: 0 bitas – žymeklis į eilutės pabaigą atspausdinus tekstą, 1 bitas – eilutė turi ir simbolius ir atributus, t.y. simbolis parašomas 2 baitais, 2-7 bitai rezervuoti. CX = eilutės ilgis, BL = atributas, jei eilutė turi tik simbolius, DH, DL = spausdinimo pradžios eilutė ir stulpelis, ES:BP = eilutės pradžios atmintyje adresas. Interpretuoja valdančiuosius kodus CR(0Dh), LF(0Ah), BS(08), BEL(7).
Skaito simbolių eilutę į buferį (DOS) Komanda: INT 21h Įrašymas: AH = 0Ah DS:DX = buferio(atminties) adresas. Pirmas buferio baitas turi skaičių, nusakantį simbolių kiekį(1-254). Jei nurodytas turinys, tai jis gali būti panaudotas kaip sufleris. Renkant tekstą, kaip ir DOS-e galioja tos pačios valdymo taisyklės. Paspaudus ENTER eilutė įrašoma į buferį(atmintį) pradedant trečiuoju baitu, antrame įrašomas realiai surinktos eilutės ilgis, neskaitant ENTER.
Skaito simbolį (DOS) Komanda: INT 21h Įrašymas: AH = 01h Reikšmė AL = simbolio ASCII kodas arba 0. Įvedant duomenis su šia funkcija spausdinama reikšmė kartojama ekrane. Galima nutraukti su CTRL+BREAK arba CTRL+C, jei nuspaustas ne simbolis reikšmė 0. Komanda: INT 21h Įrašymas: AH = 08h Reikšmė AL = simbolio ASCII kodas arba 0. Įvedant duomenis su šia funkcija reikšmė ekrane nekartojama. Galima nutraukti su CTRL+BREAK arba CTRL+C, jei nuspaustas ne simbolis reikšmė 0.
Skaito simbolį (DOS) Komanda: INT 21h Įrašymas: AH = 07h Reikšmė AL = simbolio ASCII kodas arba 0. Įvedant duomenis su šia funkcija reikšmė ekrane nekartojama. Laukia klavišo paspaudimo, bet negalima nutraukti su CTRL+BREAK. Komanda: INT 21h Įrašymas: AH = 06h, DL = 0FFh. Reikšmė ZF = 1, jei nebuvo paspaustas simbolio klavišas ir AL = 0, ZF = 0, jei buvo paspaustas simbolio klavišas ir AL = simbolio kodas,
Klaviatūros būsena(DOS) Komanda: INT 21h Įrašymas: AH = 0Bh Reikšmė AL = 0, jei nepaspaustas klavišas, AL = 0FFh, jei paspaustas klavišas. Patogu naudoti prieš 01, 07 ir 08 funkcijas. Komanda: INT 21h Įrašymas: AH = 0Ch, AL = 01, 06, 07, 08, 0Ah funkcijų numeriai. Reikšmė priklauso nuo pasirinktos funkcijos. Naudojama tam, kad funkcijos neperimtų anksčiau paspausto klavišo kodo.
Skaito simbolį (BIOS) Komanda: INT 16h Įrašymas: AH = 00h(83/84 klavišų), 10h(101/102 klavišų), 20h(122 klavišų) Reikšmė AL = klavišo ASCII kodas, 0 arba prefiksas, AH = prefiksas arba praplėstas ASCII kodas. Komanda: INT 16h Įrašymas: AH = 01h(83/84 klavišų), 11h(101/102 klavišų), 21h(122 klavišų) Reikšmė ZF = 1, jei buferis tuščias, ZF = 0, jei yra simbolis: AL = klavišo ASCII kodas, 0 arba prefiksas, AH = prefiksas arba praplėstas ASCII kodas.
Perkelia į klaviatūros buferį (BIOS) Komanda: INT 16h Įrašymas: AH = 05h CH = prefiksas, CL = ASCII kodas. Reikšmė AL = 00 jei operacija sėkminga, AL = 01, jei klaviatūros buferis perpildytas.
Tikrina klaviatūros būseną (BIOS) Komanda: INT 16h Įrašymas: AH = 02h(83/84 klavišų), 12h(101/102 klavišų), 22h(122 klavišų) Reikšmė AL = 00 jei operacija sėkminga, AL = klaviatūros būsenos baitas 1, AL = klaviatūros būsenos baitas 2(12h ir 22h). Būsenos baitas yra kompiuterio atmintyje adresu: 0000h:0417h arba 0040h:0017h: 7 bitas INS įjungta, 6 bitas CAPSLOCK įjungta, 5 bitas NUMLOCK įjungta, 4 bitas SCROLLLOCK įjungta, 3 bitas ALT nuspaustas(dažnai galioja tik kairiajam), 2 bitas CTRL nuspaustas, 1 bitas kairysis SHIFT nuspaustas, 0 bitas dešinysis SHIFT nuspaustas,
Tikrina klaviatūros būseną (BIOS) Būsenos baitas 2 atveju yra kompiuterio atmintyje adresu: 0000h:0418h arba 0040h:0018h: 7 bitas SYSRG įjungta, 6 bitas CAPSLOCK įjungta, 5 bitas NUMLOCK įjungta, 4 bitas SCROLLLOCK įjungta, 3 bitas dešinysis ALT nuspaustas, 2 bitas dešinysis CTRL nuspaustas, 1 bitas kairysis ALT nuspaustas, 0 bitas dešinysis CTRL nuspaustas.
Sąlyginės komandos Jccžymė – perėjimas turi būti ne didesnis nei 128 baitų Komandos variantai
Sąlyginės komandos Loopžymė – vykdo ciklą, dažniausiai o sąlygos patikrinimo. Testgav, sal - atlieka gav ir sal loginę sumą ir nustato SF, ZF ir PF požymius
Sąlyginis perėjimas … Cmp sal1, sal2 – tikrinama sąlyga Jcc zym1 –perėjimas į zym1, atsižvelgiant į Cmp rezultatą … – komandos, jei netenkinama Jcc sąlyga Jmp zym2 –besąlyginis perėjimas į zym2 Zym1: … – komandos, jei tenkinama Jcc sąlyga … Zym2: … – programos tęsinys
Sąlyginis perėjimas .model tiny .code org 100h start: mov al, 00h mov ah, 01h int 21h cmp al, 53 jle pirmas mov dx, offset daugiau mov ah, 9 int 21h jmp viskas pirmas: mov dx, offset maziau mov ah, 9 int 21h viskas: ret maziau db ' - kodas mazesnis uz skaiciaus 5 arba jam lygus',0dh,0ah,'$' daugiau db ' - kodas didesnis uz skaiciaus 5',0dh,0ah,'$' end start
… mov reg, pab_sk – į reg perkeliamas ciklo kartojimų Cikpr: … Dec reg – programos tęsinys Jnz Cikpr – jei reg nelygus 0, tai pereiti į Cikpr … – ciklas baigtas … – programos tęsinys Gali būti sukurti ir kitokie programos atkarpos kartojimo būdai, panaudojant komandą Cmp, Int ir pan. Ciklas
Pavyzdys .model tiny .code org 100h Start: mov cx, 256 mov dl, 0 mov ah, 2 Ciklas: int 21h inc dl test dl, 0fh jnz tesk_cikla push dx mov dl, 0dh int 21h mov dl, 0ah int 21h pop dx Tesk_cikla: loop ciklas ret end start
.model tiny .code org 100h start: mov dx, offset koment mov ah, 9 int 21h - komentaras ekrane mov al, 00h mov ah, 01h int 21h - laukia kol įrašysiu simbolį mov dx, 0 - spausdinsime simbolius nuo kairiojo viršutinio ekrano kampo mov si, 10 - kartosime 10 kartų ciklą ciklas: mov ah, 02h int 10h - perkelia žymeklį į nurodytą poziciją mov ah, 09h mov bl, 10101101b mov cx, 15 push dx - išsaugome žymeklio poziciją int 10h - spausdina 15 simbolių eilutę pop dx - atstatome žymeklio pozicijos reikšmę inc dh - sekanti eilutė dec si - mažinama ciklo skaitliuko reikšmė jnz ciklas - jei ne nulis tęsti ret koment db 'Rasykite simboliir po 15 simboliu pakartosiu 10 eiluciu',0dh,0ah,'$' end start Ciklas
.model tiny - spausdina ASCII kodų lentelę eilutėje po 16 simbolių .code org 100h start: mov ax, 0003h int 10h - nustatomas 3 video režimas ir valomas ekranas, žymeklis į 0,0 poziciją mov dx, 0- dh ir dl saugos žymeklio poziciją mov si, 256- ciklas vykdomas 256 kartų ir si registras - skaitliukas mov al, 0 mov ah, 9 mov cx,1 - spausdinsime tik 1 simbolį mov bl, 00011111b - simbolis spausdinamas baltas mėlyname fone ciklas: int 10h - spausdinamas simbolis push ax - išsaugosime registro ax reikšmę mov ah, 2 inc dl - sekantis stulpelis int 10h - perkeliame žymeklį mov ax, 0920h - spausdinamas tarpas al=20h ir funkcijos kodas ah=09 int 10h - spausdinsime tarpą mov ah, 2 - funkcijos numeris 2 inc dl - sekantis stulpelis int 10h - perkeliame žymeklį pop ax - gražiname ax inc al - sekantis ASCII simbolis test al, 0fh - tikriname ar al nėra 16 jnz tesk_cikla - jei taip tęsiame ciklą push ax - jei ne saugome ax mov ah, 2 - video funkcijos numeris inc dh - sekanti eilutė mov dl, 0 - žymeklis į eilutės pradžią int 10h - perkeliame žymeklį pop ax - gražiname reikšmę tesk_cikla: dec si - mažiname skaitliuko reikšmę jnz ciklas - jei ne 0, tai tęsiame ciklą ret end start