data segment lozinka db 1, 64, 2, 32, 4, 8, 16 ;lozinka=1726345 data ends code segment assume cs:code, ds:data start: mov ax, data ;u ax smestamo pocetnu adresu data segmenta mov ds, ax ;inicijalizujemo data segment cli ;zabrana prekida ;inicijalizacija komponente 8255A mov dx, 0FE06h ;adresa na kojoj se nalazi kontrolna rec mov al, 090h ;u al smestamo vrednost kontrolne reci out dx, al ;saljemo kontrolnu rec na njenu adresu sti ;dozvola prekida inicpocetak: xor si, si ;si = 0, predstavlja brojac i pomeraj u nizu lozinka xor bx, bx ;brojac pogodjenih cifara lozinke, bx = 6 - tacno! mov dx, 0FE00h ;u dx smestamo adresu PORTA A citaj: cmp si, 6 ;ako je si == 6 znaci da smo uneli 6 cifara i onda... je provera ;skacemo na proveru in al, dx ;citamo podatak sa PORTA A cmp al, 0 ;ako je al (pristigli podatak) jednak 0 znaci da nije bilo... je citaj ;pritiska na taster i ponovo ucitavamo podatak (vracamo se na labelu citaj) cmp al, 128 ;ako je al = 128 pritsnut je taster za RESET je inicpocetak ;sto znaci potrebno je resetovati brojace zato skacemo na inicpocetak cmp lozinka[si], al; ;mozda treba cmp byte ptr lozinka[si], al!!! ;U svakom slucaju proveravamo da li je uneti podatak jednak prvoj cifri ;nase zadate lozinke inc si ;povecavamo broj unetih podataka za 1 jne citaj ;ako uneti podatak nije bio jednak podatku na adresi lozinka[si] skacemo na citaj inc bx ;ako je podatak bio jednak uvecavamo brojac pogodjenih cifara za 1 jmp citaj ;skacemo na citaj da bi uneli novi podatak provera: cmp bx,6 ;ako je bx=6 lozinka je tacna jne netacno ;ako nije jednako skacemo na labelu netacno tacno: mov dx, 0FE02h ;u dx smestamo adresu PORTA B mov al, 0FFh ;u al smestamo podatak koji saljemo na PORT B u ovom slucaju sve 1 kako bi ;upalili sve diode jer se tako u zadatku trazi out dx,al ;saljemo podatak jmp inicpocetak ;skacemo na pocetak (vrata su otvorena, ulazi Stanimirovic, ;vrata se zatvaraju - dolazi AKS i oce da udje) netacno: mov dx, 0FE04h ;u dx smestamo adresu PORTA C mov al, 0FFh ;u al smestamo podatak koji saljemo na PORT C u ovom slucaju sve 1 kako bi ;upalili sve diode jer se tako u zadatku trazi out dx, al ;saljemo podatak jmp inicpocetak ;AKS ne zna sifru :) mov ax, 4c02h ;ovo u sustini ne bi trebalo nikad da se desi int 21h ;dakle ni ovo code ends end start ;ne zaboravite ENTER (novi red) nakon ove linije da se ne ljuti Oliver :)
Comments