Akademia Techniczno-Rolnicza
w Bydgoszczy
wydział: Telekomunikacji i Elektroniki
przedmiot: Technika komputerowa
Sprawozdanie: Marek Makowski gr. O
1. Zadania programu:
Program ma czytać znaki wprowadzane z klawiatury i liczyć ich ilość . Po naciśnięciu Esc program ma wyświetlać statystykę naciśniętych klawiszy.
2. Listing programu:
PRO1 SEGMENT ;okreslenie segmentu kodu
ASSUME CS:PRO1 ;wskazanie segmentu kodu
ORG 100h ;zarezerwowanie 256 bajtow na naglowek (COM)
POCZATEK:
JMP BEGIN ;skocz do begin
MESSAGE DB 'Esc - statystyka',10,13,'$' ;ciag tekstowy
TABLICA DB 256 DUP (0)
PISZ: ;podprodram wyswietla bit jako znak ASCI
ADD DL,30h ;konwersja na ASCI
MOV AH,02h ;wywolanie funkcji wypisywania na ekran znaku zawartego w DL
INT 21h ;przerwanie DOSa
RET ;powrot
DZIES: ;w AL jest znak
MOV CL,AL ;CL <- AL
MOV CH,AL ;CH <- AL
;odczyt setek
MOV AH,0 ;AH <- 0
MOV AL,CL ;AL <- CL
MOV BL,100 ;BL <- dzielnik
DIV BL ;dzielenie AX/100
MOV CL,AH ;CL <- reszta
MOV DL,AL ;DL <- wynik
CALL PISZ ;wyswietla wynik
;odczyt dziesiatek
MOV AH,0 ;AH <- 0
MOV AL,CL ;CL <- AL
MOV BL,10 ;BL <- dzielnik
DIV BL ;dzielenie AX/10
MOV CL,AH ;CL <- reszta
MOV DL,AL ;DL <- wynik
CALL PISZ ;wyswietla wynik
;odczyt jednosci
MOV DL,CL ;CL <- reszta (reszta jest liczba jednosci)
CALL PISZ
RET
BEGIN:
MOV DX,OFFSET MESSAGE ;DX <- offset stringa
MOV AH,9 ;wypisz string na ekran
INT 21h
PETLA:
MOV AH,10h ;funkcja czytania znaku z klawiatury
INT 16h ;przerwanie BIOSu
MOV BX,0 ;wpisanie do tablicy
MOV BL,AL
ADD BYTE PTR TABLICA[BX],1
MOV DL,AL ;DL <- AL
MOV AH,02h ;wyswietlanie znaku
INT 21h
CMP DL,13 ;porownanie czy Enter
JNZ ENTE ;skok do etykiety jesli nie Enter
MOV DL,10 ;DL <- 10 (przejscie do nastepnel linii)
MOV AH,02h ;wyswietlanie znaku
INT 21h
ENTE:
CMP DL,27 ;porownanie czy Esc
JNZ PETLA ;skok do etykiety jesli nie Esc
;po nacisnieciu Esc
MOV DL,10 ;wyswietlanie Enter
MOV AH,02h
INT 21h
MOV DL,13
MOV AH,02h
INT 21h
MOV BL,0 ;zerowanie BX
MOV BH,0
POWT:
MOV AL,BYTE PTR TABLICA[BX] ;AL <- pobranie wartosci z tablicy
CMP AL,0 ; porownanie czy jest jakas wartosc
JZ WAR
CMP BL,32 ;sprawdzenie czy kody sterujĄce
JB DZI
;wyswietkanie znaku w ''
PUSH AX
MOV DL,39 ;wyswietlanie '
MOV AH,02h
INT 21h
MOV DL,BL ;wyswietlanie znaku
MOV AH,02h
INT 21h
MOV DL,39 ;wyswietlanie '
MOV AH,02h
INT 21h
JMP DA
DZI: PUSH AX
MOV AL,BL ;wyswietlanie kodu znaku
PUSH BX
CALL DZIES
POP BX
DA: MOV DL,45 ;wyswietlanie myslnika
MOV AH,02h
INT 21h
POP AX
PUSH BX
CALL DZIES ;wyswietlanie ilosci
POP BX
MOV DL,32 ;wyswietlanie 3 spacji
MOV AH,02h
INT 21h
INT 21h
INT 21h
WAR: ADD BL,1
CMP BL,255
JNZ POWT
MOV AX,4C01h ;funkcja zakonczenia programu
INT 21h
PRO1 ENDS ;zakonczenie segmentu kodu
END POCZATEK
Algorytm programu.
Opis działania programu.
Na początku program działa w trybie wprowadzania znaków z klawiatury. Po naciśnięciu klawisza znak zostaje wyświetlony na ekranie i do tablicy o indeksie równym kodowi ASCII znaku zostaje dodana wartość 1. Po naciśnięciu `Esc' następuje wyjście z pętli, przejś i przejście kursora do następnej linii. Następnie program przegląda ilość poszczególnych znaków. Jeżeli ilość występowania danego znaku jest różna od zera to następuje wyświetlenie go lub jego kodu ASCII jeżeli kod był mniejszy od 32 i po myślniku ilość wystąpień we wcześniej wprowadzonym tekście. Po wyświetleniu całej statystyki następuje wyjście z programu.