model small .stack 100h .data NAPIS1 db 0ah,0dh,'Linia komend:$' NAPIS2 db 'Linia komend jest pusta. $' NAPIS3 db 0ah,0dh,'(P)rogram (S)egment (P)refix:$' seg1 db 0ah,0dh,'Kod rozkazu:......................... $' seg2 db 0ah,0dh,'Pamiec niedostepna dla komutera:..... $' seg3 db 0ah,0dh,'Zarezerwowane:....................... $' seg4 db 0ah,0dh,'Adres zakonczenia programu:.......... $' seg5 db 0ah,0dh,'Adres programu obslugi:.............. $' seg6 db 0ah,0dh,'Adres obslugi bledu krytycznego:..... $' seg7 db 0ah,0dh,'Adres otoczenia programu:............ $' .code mov ax,@data mov ds,ax ;--------------------------- 1) LINIA KOMEND --------------------------------- mov ax,0600h ;czyszczenie ekranu mov bh,07h mov cx,0000h mov dx,184Fh int 10h lea dx, NAPIS1 ;wyswatlenie napisu mov ah, 09h int 21h xor si,si ;wyzerowanie si LiniaKomend: ;wysiwtlanie linii komend mov dl,[es:81h+si] ;w es jest PSP, si w 1 kroku = 0, przenosi do dl mov ah, 02h ;wyswietlanie znaku z dl int 21h inc si cmp dl,0dh ; porównuje czy to co odczytane w dl to koniec linii poleceń jnz LiniaKomend cmp si, 1 ;porównanie licznika si z '1' je empty ;jeśli si=1 to linia komend jest pusta jne blok_psp empty: mov ah,02h ;ustawienie kursora na współrzędne 1,13 mov bh,00 mov dh,1 mov dl,13 int 10h lea dx,NAPIS2 ; wyswietlenie napisu gdy lista pusta mov ah,09h int 21h ;------------------------ 2) BLOK PSP Z PODZIAŁEM NA SEGMENTY -------------------- blok_psp: jmp etykieta proc etykieta1 cmp ah,57 ja skok1 skok1_out: ret etykieta1 endp proc etykieta2 cmp al,57 ja skok2 skok2_out: ret etykieta2 endp skok1: add ah,7 jmp skok1_out skok2: add al,7 jmp skok2_out etykieta: mov ah,7 ;pobieranie znaku z klawiatury bez wyświetlania int 21h lea dx, NAPIS3 ;wyswatlenie napisu mov ah, 09h int 21h lea dx, seg1 ;wyswatlenie napisu mov ah, 09h int 21h mov al,[es:00h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:01h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h lea dx, seg2 ;wyswatlenie napisu mov ah, 09h int 21h mov al,[es:02h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h xor si,si mov al,[es:03h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwi literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h lea dx, seg3 ;wyswatlenie napisu mov ah, 09h int 21h mov al,[es:04h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h xor si,si lea dx, seg4 ;wyswatlenie napisu mov ah, 09h int 21h mov al,[es:0ah] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:0bh] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:0ch] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:0dh] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h lea dx, seg5 ;wyswatlenie napisu mov ah, 09h int 21h mov al,[es:0eh] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:0fh] xor ah,ah mov cl,16 div cl add ah,48;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:10h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:11h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h lea dx, seg6 ;wyswatlenie napisu mov ah, 09h int 21h mov al,[es:12h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:13h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:14h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:15h] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h lea dx, seg7 ;wyswatlenie napisu mov ah, 09h int 21h mov al,[es:2ch] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h mov al,[es:2dh] xor ah,ah mov cl,16 div cl add ah,48 ;trzeba sprawdzac czy wrejestrze jest liczba wiekasze od 10 czyli powinno wyslwietlic literke a jak mniejsza to musimy dodac 48 add al,48 call etykieta1 call etykieta2 mov bx,ax mov dl,al mov ah,02h int 21h mov dl,bh int 21h lea dx, NAPIS3 ;wyswatlenie napisu mov ah, 09h int 21h xor si,si mov si,01h mov ax, 4c00h ;zakonczenie programu int 21h ;-------------------- 3) OTOCZENIE PROGRAMU ----------------------------------- otoczenie: mov ah,7 int 21h mov ah,02h ;ustawienie kursora na współrzędne 0,0 mov bh,00 mov dh,0 mov dl,0 int 10h mov ax,0600H mov bh,07h mov cx,0000h mov dx,184fh int 10h mov dh,0 mov dx,[es:2Ch] mov es,dx mov si,0 czytaj: mov dl,[es:si] cmp dl,00 je sprawdz inc si mov ah,02h int 21h jmp skok sprawdz: inc si mov dl,[es:si] cmp dl,00 je koniec mov dl,10 mov ah,02h int 21h skok: loop czytaj koniec: mov ah,4ch int 21h end