Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. ENTER_KEY EQU 0DH
  3.  
  4. ;uproszczone dyrektywy segmentowe, oraz model tiny - program typu COM
  5. .MODEL TINY
  6. .CODE
  7.     .386        ;to znaczy ze bedziemy uzywac instrukcji zgodnych z procesorem x386
  8.     ORG 100H    ;pomijamy nie duzy przedrostek programu
  9.  
  10. START:
  11.     JMP MAIN
  12.    
  13. ;tu sa zdefiniowane tablice znakow do wyswietlenia za pomoca funkcji 09h przerwania 21h
  14. ;ktora to wyswietla az do znaku $
  15. ;0ah - znak powrotu karetki
  16. ;0dh - znak nowej lini
  17. PASSWORD_OK DB 0AH, 0Dh, 'Password Ok$'
  18. PASSWORD_FAIL DB 0AH, 0Dh, 'Password Fail$'
  19. NEW_LINE DB 0AH, 0DH, '$'
  20.  
  21. ;bufor na znaki wprowadzane
  22. ;16+1 poniewaz moze byc 16 znako i znak $
  23. ;DB X DUP(Y)  oznacza: zdefinuj X bajt�w o wartosci Y
  24. BUFOR DB 16+1 DUP(0)
  25.    
  26.    
  27. ;tutaj teraz definiujemy sobie nasze dane w pamieci programu
  28. ;ktore bedziemy wykozystywac podczas reszyt programu.
  29.  
  30. ;glowna procedura programu
  31. MAIN PROC NEAR
  32.     XOR SI,SI           ;zerujemy rejestr SI operacja xor, najszybsze zerowanie
  33.                         ;rej. SI bedzie nam slozyl jako licznik wprowadzonych znakow
  34. MAIN_START:             ;etykieta
  35.     MOV AX,1000H        ;funkcja przerwania 16h czekajaca na nacisniecie klawisza
  36.     INT 16H             ;wywolujemy przerwanie 16h, funkcja zwraca do rej. AL znak klawisza
  37.                         ;a do rej. AH kod klawisza
  38.     INC SI              ;zwieksz licznik wprowadzonych znakow
  39.  
  40.     ;sprawdzamy czy to enter
  41.     CMP AL,ENTER_KEY    ;porownanie rej. AL z wartoscia 0Dh
  42.     JE MAIN_END1        ;gdy jest rowne, gdy znak to klawisz enter to skacz do main_end
  43.    
  44.     CMP SI,16           ;porwnanie SI z 16
  45.     JA MAIN_END0        ;gdy Si > 16 to skacz do MAIN_END
  46.    
  47.     ;zapisujemy znak do bufora
  48.     MOV BUFOR[SI-1],AL  ;SI jako iterator do tablicy BUFOR, operacja mOV kkopiuje znak z AL
  49.                         ;-1 poniewaz SI to ilosc znak�w a indeksujemy od zera
  50.    
  51.     MOV DL,'*'          ;do DL znak gwiazdki do wyswietlenia
  52.     MOV AH,02H          ;funkcja 02h przerwania dosa 21h ktora wyswietla podany znak z rej. DL
  53.     INT 21h
  54.     JMP MAIN_START      ;skok na poczatek programu
  55.  
  56. MAIN_END0:
  57.     ;gdy wpisano wiecej niz 16 i 17 nie byl enter
  58.     ;to wypsiz password_fail
  59.     MOV AH,09H              ;do AH kod funkcji do wypisywanie tesktu na ekran
  60.     LEA DX,PASSWORD_FAIL    ;do DX adres tablicy ze znakami
  61.     INT 21H                 ;wywolujemy przerwanie wykonujac wypisanie na ekran
  62.     JMP MAIN_END            ;skacz
  63.  
  64. MAIN_END1:
  65.     ;gdy wcisnieto enter to password napewno jest ok
  66.     MOV AH,09H              ;do AH kod funkcji do wypisywanie tesktu na ekran
  67.     LEA DX,PASSWORD_OK      ;do DX adres tablicy ze znakami
  68.     INT 21H                 ;wywolujemy przerwanie wykonujac wypisanie na ekran
  69.     JMP MAIN_END            ;skacz
  70.    
  71. MAIN_END:
  72.     ;zapisujemy znak $ do bufora
  73.     ;BYTE PTR m�wi ze nalezy kopiwoac znak w zakresie 1 bajta do pamieci
  74.     ;wtedy ta instrukcja zapisze tylko bajt do pamieci i nie zmieni innych sasiadujacych
  75.     ;bajt�w w pamieci
  76.     MOV BYTE PTR BUFOR[SI-1],'$'    ;SI jako iterator do tablicy BUFOR, operacja mOV kkopiuje znak z AL
  77.                                     ;-1 poniewaz SI to ilosc znak�w a indeksujemy od zera
  78.  
  79.     ;wyswietlamy nowa linie
  80.     MOV AH,09H              ;do AH kod funkcji do wypisywanie tesktu na ekran
  81.     LEA DX,NEW_LINE         ;do DX adres tablicy ze znakami
  82.     INT 21H                 ;wywolujemy przerwanie wykonujac wypisanie na ekran
  83.  
  84.     ;wyswietlamy bufor
  85.     MOV AH,09H              ;do AH kod funkcji do wypisywanie tesktu na ekran
  86.     LEA DX,BUFOR            ;do DX adres tablicy ze znakami
  87.     INT 21H                 ;wywolujemy przerwanie wykonujac wypisanie na ekran
  88.  
  89.     MOV AX,4C00H        ;funkcja przerwania 21h zakonczajaca program ze statusem = 0
  90.     INT 21H            
  91. MAIN ENDP
  92.  
  93.  
  94. END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement