|
[ 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
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.
|