;;Przykład 8.6. Wyświetlenie znaków
.MODEL tiny
.CODE
org 100h
Start: 
 mov AX,0F00h ;informacja o aktualnym trybie monitora i 
;;o numerze stronicy
 int 10h
 mov tryb,AL 
 mov stron,BH 
;;wyświetlenie tekstu kolorowego w trybie 03h
 mov AH,00h ;ustawienie trybu
 mov AL,03h ;tryb tekstowy 80x25,znak 8x8, 16 kolorów, B8000
 int 10h
;;przez INT10/09h
 mov nwiersz,0
e111:
 mov nkolumn,0
e112:
 mov AH,02h ;ustawienie położenia kursora
 mov BH,0  ;numer stronicy
 mov DH,nwiersz ;numer wiersza
 mov DL,nkolumn ;numer kolumny
 int 10h
;;
 mov BH,0 ;numer stronicy
 mov BL,symb ;0FCh ;atrybut znaku w trybie tekstowym lub 
;;indeks koloru znaku w trybie graficznym
 mov CX,1 ;ilość powtórzeń znaku
 mov AL,symb ;kod symbolu
 inc symb ;kod symbolu
 mov AH,09h ;Do zapisywania znaku 
 int 10h
 inc nkolumn
 cmp nkolumn,64
 jb e112
 inc nwiersz
 cmp nwiersz,24
 jb e111
;;czekanie na reakcję użytkownika
 mov ah,9
 mov dx,OFFSET stekst
 int 21h
 mov ah,1 ;czekanie na znak
 int 21h
;;wyświetlenie tekstu kolorowego w trybie 03h
;;przez zapisywanie do bufora B8000, stronica 0
;;czyszczenie ekranu
 mov AH,00h ;ustawienie trybu
 mov AL,03h ;tryb tekstowy 80x25,znak 8x8, 16 kolorów, B8000
 int 10h
;;
 mov BX,0B800h
 mov ES,BX
 cld  ;znacznik kierunku DF=0
 mov nwiersz,0
e121:
 mov nkolumn,0
e122:
 mov AH,0 
 mov AL,nwiersz 
 mov CX,160 ;ilość bajtów w wierszu
 mul CX
 mov CH,0
 mov CL,nkolumn
 sal CX,1  ;mnożenie razy dwa
 add AX,CX  ;numer bajta w wierszu
 mov DI,AX
;;zapisywanie do bufora
 mov AL,symb ;kod znaku
 stosb   ;AL==>ES:DI, DI=DI+1
 mov AL,0FCh ;symb ;atrybut znaku w trybie tekstowym
 stosb   ;AL==>ES:DI, DI=DI+1 
 inc symb ;kod symbolu
;;
 inc nkolumn
 cmp nkolumn,64
 jb e122
 inc nwiersz
 cmp nwiersz,24
 jb e121
;;
 mov AH,02h ;ustawienie  położenia kursora
 mov BH,0  ;numer stronicy
 mov DH,23  ;numer wiersza
 mov DL,0  ;numer kolumny
 int 10h
;;czekanie na reakcję użytkownika
 mov ah,9
 mov dx,OFFSET stekst
 int 21h
 mov ah,1 ;czekanie na znak
 int 21h
;;wyświetlenie tekstu kolorowego w trybie graficznym 10h
 mov AH,00h ;ustawienie trybu
 mov AL,10h ;tryb graficzny 80x25,znak 8x14,16 kolorów,A0000
 int 10h
;;
 mov nwiersz,0
e211:
 mov nkolumn,0
e212:
 mov AH,02h ;ustawienie położenia kursora
 mov BH,0 ;numer stronicy
 mov DH,nwiersz ;numer wiersza
 mov DL,nkolumn ;numer kolumny
 int 10h
;;
 mov BH,0 ;numer stronicy
 mov BL,symb ;atrybut znaku w trybie tekstowym 
 mov CX,1 ;ilość powtórzeń znaku
 mov AL,symb ;kod symbolu
 inc symb ;kod symbolu
 mov AH,09h ;Do zapisywania znaku 
 int 10h
 inc nkolumn
 cmp nkolumn,64
 jb e212
 inc nwiersz
 cmp nwiersz,24
 jb e211
;;czekanie na reakcję użytkownika
 mov ah,9
 mov dx,OFFSET stekst
 int 21h
 mov ah,1 ;czekanie na znak
 int 21h
;;powrót do trybu pierwotnego
 mov AH,00h ;ustawienie trybu
 mov AL,tryb ;tryb 
 int 10h
 mov AH,05h ;ustawienie stronicy   mov AL,stron ;stronica 
 int 10h
;;zakończenie programu
 mov ax,4C00h
 int 21h
.DATA
stron  DB 0
tryb  DB 3
nwiersz DB 0 ;numer wiersza
nkolumn DB 0 ;numer kolumny
stekst DB 0Dh,0Ah,'Naciśni coś:','$' 
symb  DB 0 
END Start
