Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ENTER_KEY EQU 0DH
- ;uproszczone dyrektywy segmentowe, oraz model tiny - program typu COM
- .MODEL TINY
- .CODE
- .386 ;to znaczy ze bedziemy uzywac instrukcji zgodnych z procesorem x386
- ORG 100H ;pomijamy nie duzy przedrostek programu
- START:
- JMP MAIN
- ;tu sa zdefiniowane tablice znakow do wyswietlenia za pomoca funkcji 09h przerwania 21h
- ;ktora to wyswietla az do znaku $
- ;0ah - znak powrotu karetki
- ;0dh - znak nowej lini
- PASSWORD_OK DB 0AH, 0Dh, 'Password Ok$'
- PASSWORD_FAIL DB 0AH, 0Dh, 'Password Fail$'
- NEW_LINE DB 0AH, 0DH, '$'
- ;bufor na znaki wprowadzane
- ;16+1 poniewaz moze byc 16 znako i znak $
- ;DB X DUP(Y) oznacza: zdefinuj X bajt�w o wartosci Y
- BUFOR DB 16+1 DUP(0)
- ;tutaj teraz definiujemy sobie nasze dane w pamieci programu
- ;ktore bedziemy wykozystywac podczas reszyt programu.
- ;glowna procedura programu
- MAIN PROC NEAR
- XOR SI,SI ;zerujemy rejestr SI operacja xor, najszybsze zerowanie
- ;rej. SI bedzie nam slozyl jako licznik wprowadzonych znakow
- MAIN_START: ;etykieta
- MOV AX,1000H ;funkcja przerwania 16h czekajaca na nacisniecie klawisza
- INT 16H ;wywolujemy przerwanie 16h, funkcja zwraca do rej. AL znak klawisza
- ;a do rej. AH kod klawisza
- INC SI ;zwieksz licznik wprowadzonych znakow
- ;sprawdzamy czy to enter
- CMP AL,ENTER_KEY ;porownanie rej. AL z wartoscia 0Dh
- JE MAIN_END1 ;gdy jest rowne, gdy znak to klawisz enter to skacz do main_end
- CMP SI,16 ;porwnanie SI z 16
- JA MAIN_END0 ;gdy Si > 16 to skacz do MAIN_END
- ;zapisujemy znak do bufora
- MOV BUFOR[SI-1],AL ;SI jako iterator do tablicy BUFOR, operacja mOV kkopiuje znak z AL
- ;-1 poniewaz SI to ilosc znak�w a indeksujemy od zera
- MOV DL,'*' ;do DL znak gwiazdki do wyswietlenia
- MOV AH,02H ;funkcja 02h przerwania dosa 21h ktora wyswietla podany znak z rej. DL
- INT 21h
- JMP MAIN_START ;skok na poczatek programu
- MAIN_END0:
- ;gdy wpisano wiecej niz 16 i 17 nie byl enter
- ;to wypsiz password_fail
- MOV AH,09H ;do AH kod funkcji do wypisywanie tesktu na ekran
- LEA DX,PASSWORD_FAIL ;do DX adres tablicy ze znakami
- INT 21H ;wywolujemy przerwanie wykonujac wypisanie na ekran
- JMP MAIN_END ;skacz
- MAIN_END1:
- ;gdy wcisnieto enter to password napewno jest ok
- MOV AH,09H ;do AH kod funkcji do wypisywanie tesktu na ekran
- LEA DX,PASSWORD_OK ;do DX adres tablicy ze znakami
- INT 21H ;wywolujemy przerwanie wykonujac wypisanie na ekran
- JMP MAIN_END ;skacz
- MAIN_END:
- ;zapisujemy znak $ do bufora
- ;BYTE PTR m�wi ze nalezy kopiwoac znak w zakresie 1 bajta do pamieci
- ;wtedy ta instrukcja zapisze tylko bajt do pamieci i nie zmieni innych sasiadujacych
- ;bajt�w w pamieci
- MOV BYTE PTR BUFOR[SI-1],'$' ;SI jako iterator do tablicy BUFOR, operacja mOV kkopiuje znak z AL
- ;-1 poniewaz SI to ilosc znak�w a indeksujemy od zera
- ;wyswietlamy nowa linie
- MOV AH,09H ;do AH kod funkcji do wypisywanie tesktu na ekran
- LEA DX,NEW_LINE ;do DX adres tablicy ze znakami
- INT 21H ;wywolujemy przerwanie wykonujac wypisanie na ekran
- ;wyswietlamy bufor
- MOV AH,09H ;do AH kod funkcji do wypisywanie tesktu na ekran
- LEA DX,BUFOR ;do DX adres tablicy ze znakami
- INT 21H ;wywolujemy przerwanie wykonujac wypisanie na ekran
- MOV AX,4C00H ;funkcja przerwania 21h zakonczajaca program ze statusem = 0
- INT 21H
- MAIN ENDP
- END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement