stoneman icon

MIKS 2013 - zad 1

stoneman | PRO | 04/27/15 10:39:00 PM UTC | 0 ⭐ | 510 👁️ | Never ⏰ | []
ASM (NASM) |

0 B

|

None

|

0 👍

/

0 👎

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