All pastes #777402 Raw Edit

Something

public text v1 · immutable
·published 2007-11-16 20:04 UTC
rendered paste body
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