[ Kolins Balaban @ 14.07.2006. 08:31 ] @
pozdrav raja. imam problem oko razumjevanja rjesenja jednog zadatka iz asemblera mikroprocesora 8085. napisat cu zadatak, i rjesenje, i dio koji ne razumijem.

ZADATAK: U memoriji mikroracunara nalazi se niz od 300 podataka pocev od adrese 0906h (h je u indexu ;)). izvrsiti sabiranje podataka koji imaju neparan broj jedinica i odrediti broj takvih podataka. rezultat smjestiti na dvije lokacije pocev od 0000h. Podaci su takvi da je njihova suma manja od 255. program pocinje od adrese 0020h.

RJESENJE ZADATKA:
NAME ZAD
ORG 0020H
LXI B,012Ch
LXI H,0906h
MVI D,00h
MVI E,00h
L1: MOV A,M
JPE L2
INR D
ADD E
MOV E,A
L2: INX H
DCX B
MOV A,B
ORA C
JNZ L1
MOV A,E
STA 0000h
MOV A,D
STA 0001h
HLT

zanima me, sta radi dio koda
MOV A,B
ORA C
JNZ L1
ORA C je logicko "ILI" akumulatora i registra C
Nadam se, da cete shvatiti sintaxu programa, jer ni sam ne znam da li je to standradna sintaxa za ovaj procesor, ili je neki pseudo kod. Unaprijed vam hvala!!
[ tosa @ 14.07.2006. 15:32 ] @
Skače na labelu L1 ako je bilo koji bit registra A ili C različit od nule.
[ Kolins Balaban @ 14.07.2006. 17:13 ] @
da, ali sta mu je u registru C?? znam da je mu je B brojac podataka kojeg smjesta u akumulator (MOV A,B), i da se smanjuje stalno i moguce je da bude nula. ali sto dira C, sta je u njemu? kako se ono mijenja?cime ga mijenja?
[ Mikky @ 14.07.2006. 21:05 ] @
Citat:
Kolins Balaban
zanima me, sta radi dio koda
MOV A,B
ORA C
JNZ L1
ORA C je logicko "ILI" akumulatora i registra C
Nadam se, da cete shvatiti sintaxu programa, jer ni sam ne znam da li je to standradna sintaxa za ovaj procesor, ili je neki pseudo kod. Unaprijed vam hvala!!


Koliko ja vidim registar C se nigde pre toga ne koristi u programu... Proveri da li je to resenje tacno.

[ Kolins Balaban @ 15.07.2006. 10:13 ] @
hmmmm nisi u pravu Mikky, koristi registar C. u 8085 su registri osmobitni, a on mora ucitati broj podataka, tj 300=012Ch, koji je veci od 255. zato to ucitava u registarski par (B,C), (koji je tada sesnaestnobitni) i to ovako 01--->(B) i 2C---->(C) ako sam dobro shvatio. to radi komandom LXI B, 012Ch. ali opet ne kontam onaj dio koda :(((
[ Kolins Balaban @ 16.07.2006. 21:28 ] @
pa zar niko da pomogne ovdje smrc smrc :(((( dajte ljudi molim vas
[ tosa @ 17.07.2006. 03:35 ] @
Priručnik u šake i shvatićeš i sam... Do sada si mogao da naučiš sve instrukcije napamet.
[ Boro7 @ 29.07.2007. 19:46 ] @
dcx b ; dekrementira registarski par (B,C) tj. (B,C)-1->(B,C)

Code:

;zanima me, sta radi dio koda 
MOV A,B
ORA C
JNZ L1


proverava da li je brojac na nuli
(posle naredbe ora c zastavica zero bice Z=1 akko su registri b(koji se premesta u a, da bi se izvrsila logicka ili operacija)=0000 0000 i c=0000 0000, tj. ako je brojac bc=0)

Kada imas brojac koji je veci od 255 (decimalno) uvek moras proveru brojaca realizovati na taj nacin (tj. ne moze samo
dcx b
jnz l1)

Dobro pitanje jeste zasto se zastavica zero ne menja posle naredbe
dcx b
u slucaju kada je bc=0 (tj. bc=1 pre naredbe dcx b)?


[Ovu poruku je menjao Boro7 dana 29.07.2007. u 22:58 GMT+1]
[ SAFF @ 02.12.2007. 23:55 ] @
Vidim da je rec o skokovima i uporedjivanju pa me interesuje kako da resim probelem veszan za stringove koji ce ispisivati samo [si+2] %2==0 naravno ovo samo izgled pomislim da treba ovako...
Evo i primera znaci zadatak je glasio da na osnovu unetog stinga program upita korisnika da mu se ispise taj string u obrnutom redosledu tj. 123456 kao 654321 ili kao sto je napisan pr. 123456, treca stavka bi bila da se ispisu svi neparni elementi stringa tj. 135 i na kraju problem koji nisam uspeo resit da se ispisu parni elemnti tj. 246.

to sve sam pokusao odraditi preko procedure:

Code:


    parni proc
    
            mov ah,09h
            lea dx,porukaP
            int 21h
            lea si, bafer
            
    Par_petlja:
            
            mov bx,[si+2]
            cmp bl,'$'
            je Par_kraj_reda
            mov dx, bx
            mov ah,02h
            int 21h
            
                                 
            inc si
            inc si
            mov bx,[si+1]
            cmp bl,'$'
            je Nep_kraj_reda
            inc si
            jmp Nep_petlja
            
    Par_kraj_reda:
            ret 
    parni endp



Gde Gresim!!!
Ovde za uneti string 123456 kao rezultat parnih daje 146 umesto 246!
[ SAFF @ 04.12.2007. 12:35 ] @
Evo resenja pa mozda nekom zatreba:

Code:

parni  proc
          
          mov ah,09h
          mov dx,offset porukaP
          int 21h
          lea si,bafer
    
    Par_petlja:    
        
        mov bx, [si+2]
        cmp bl, '$'
        je Par_kraj_reda
        
        inc si
        mov bx,[si+2]
        cmp bl, '$'
        je Par_kraj_reda
        
        mov dx,bx
        mov ah,02h
        int 21h    
        
        inc si
        jmp Par_petlja
        
    Par_kraj_reda:
        ret
    parni endp