stoneman

MIKS 2013 - zad 1

Apr 27th, 2015
585
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. data segment
  2.     lozinka db 1, 64, 2, 32, 4, 8, 16   ;lozinka=1726345
  3. data ends
  4.  
  5. code segment
  6.     assume cs:code, ds:data
  7.  
  8.  
  9. start:
  10.     mov ax, data                ;u ax smestamo pocetnu adresu data segmenta
  11.     mov ds, ax              ;inicijalizujemo data segment
  12.  
  13.     cli                 ;zabrana prekida
  14.  
  15.                         ;inicijalizacija komponente 8255A
  16.     mov dx, 0FE06h              ;adresa na kojoj se nalazi kontrolna rec
  17.     mov al, 090h                ;u al smestamo vrednost kontrolne reci
  18.     out dx, al              ;saljemo kontrolnu rec na njenu adresu
  19.  
  20.     sti                 ;dozvola prekida
  21.  
  22.  
  23. inicpocetak:
  24.     xor si, si              ;si = 0, predstavlja brojac i pomeraj u nizu lozinka
  25.     xor bx, bx              ;brojac pogodjenih cifara lozinke, bx = 6 - tacno!
  26.     mov dx, 0FE00h              ;u dx smestamo adresu PORTA A
  27.  
  28.  
  29. citaj:
  30.     cmp si, 6               ;ako je si == 6 znaci da smo uneli 6 cifara i onda...
  31.     je provera              ;skacemo na proveru
  32.  
  33.     in al, dx               ;citamo podatak sa PORTA A
  34.  
  35.     cmp al, 0               ;ako je al (pristigli podatak) jednak 0 znaci da nije bilo...
  36.     je citaj                ;pritiska na taster i ponovo ucitavamo podatak (vracamo se na labelu citaj)
  37.  
  38.     cmp al, 128             ;ako je al = 128 pritsnut je taster za RESET
  39.     je inicpocetak              ;sto znaci potrebno je resetovati brojace zato skacemo na inicpocetak
  40.  
  41.     cmp lozinka[si], al;            ;mozda treba cmp byte ptr lozinka[si], al!!!
  42.                         ;U svakom slucaju proveravamo da li je uneti podatak jednak prvoj cifri
  43.                         ;nase zadate lozinke
  44.     inc si                  ;povecavamo broj unetih podataka za 1
  45.     jne citaj               ;ako uneti podatak nije bio jednak podatku na adresi lozinka[si] skacemo na citaj
  46.  
  47.     inc bx                  ;ako je podatak bio jednak uvecavamo brojac pogodjenih cifara za 1
  48.     jmp citaj               ;skacemo na citaj da bi uneli novi podatak
  49.  
  50.  
  51. provera:
  52.     cmp bx,6                ;ako je bx=6 lozinka je tacna
  53.     jne netacno             ;ako nije jednako skacemo na labelu netacno
  54.  
  55.  
  56. tacno:
  57.     mov dx, 0FE02h              ;u dx smestamo adresu PORTA B
  58.     mov al, 0FFh                ;u al smestamo podatak koji saljemo na PORT B u ovom slucaju sve 1 kako bi
  59.                         ;upalili sve diode jer se tako u zadatku trazi
  60.  
  61.     out dx,al               ;saljemo podatak
  62.     jmp inicpocetak             ;skacemo na pocetak (vrata su otvorena, ulazi Stanimirovic,
  63.                         ;vrata se zatvaraju - dolazi AKS i oce da udje)
  64.  
  65. netacno:
  66.     mov dx, 0FE04h              ;u dx smestamo adresu PORTA C
  67.     mov al, 0FFh                ;u al smestamo podatak koji saljemo na PORT C u ovom slucaju sve 1 kako bi
  68.                         ;upalili sve diode jer se tako u zadatku trazi
  69.     out dx, al              ;saljemo podatak
  70.     jmp inicpocetak             ;AKS ne zna sifru :)
  71.  
  72.  
  73.     mov ax, 4c02h               ;ovo u sustini ne bi trebalo nikad da se desi
  74.     int 21h                 ;dakle ni ovo
  75.  
  76. code ends
  77. end start                   ;ne zaboravite ENTER (novi red) nakon ove linije da se ne ljuti Oliver :)
Advertisement
Add Comment
Please, Sign In to add comment