[ nen@d @ 27.05.2003. 03:20 ] @
Cao,

Ljudi stvarno mi je potrebna pomoc. Da ne duzim problem je sljedeci. Treba da napracim ovo sto vidite ispod, a nemam balge veze kako jer nisam bijo prisutan dok se to radilo u skoli...



Molim sve one koji mogu da pomognu.. i ako je moguce da mi napisu code da broji od 00 do 99 ...

Hvala svima unapred...

Pozdrav!
[ tOwk @ 27.05.2003. 03:34 ] @
Zbog nepotpune formulacije, posmatraću problem ovako:
— traži se x86 asembler
— ne zna se na kom operativnom sistemu se radi
— nije jasno šta znači „broji“

Ovo je onako napamet, ponešto ćeš morati da izmeniš (naročito pošto dugo nisam koristio asembler, pa sam sigurno mnogo „tehničkih“ detalja omašio):
Code:

xor cx,cx
mov ax,100
:CIRKUS
CALL ispisi_cx
inc cx
cmp ax,cx
jnz CIRKUS


Umesto „CALL ispisi_cx“ treba da staviš neku funkciju koja će da ispiše CX registar, npr. pomoću DOS-ovih int 21h funkcija, ili već kako ti je volja.

Takođe, nezgodno je tražiti nekome da zadatak „reši“ zato što ti nisi „bio prisutan dok se to radilo u školi“.
[ -zombie- @ 27.05.2003. 04:46 ] @
ja bi rekao da ima više šanse da mu pomogne primer u motorolinom mc68k asembleru..

i ja sam malo zarđao, zato ne zamerite na greškama..

Code:

        MOV.W   #0, D2
LOOP    BSR     ISPISI
        ADDQ    #1, D2
        CMPI.W  #99, D2
        BNE     LOOP



isto što ti je towk rekao važi za subrutinu ISPISI .. moraćeš da je sam pišeš.. ili mi to nismo učili na času, ili sam i ja bio odsutan taj dan.. ;)

PS, kod ima jednu namernu grešku.. na tebi je da je nađeš.. moraš i ti nešto da naučiš usput.. inače, ne bi bilo fer ;)

PPS, sad sam video ustvari da on nije ni tražio ispis, tako da ta subrutina ISPISI ne mora ništa da radi..

Code:

ISPISI  RTS
[ srki @ 27.05.2003. 15:46 ] @
A mozda je mislio na assembly od MIPS procesora jer se i to radi pored motorole na univerzitetima u inostranstvu. Uglavnom se radi u prvoj ili drugoj godini assembly od motorole a sledece godine od mips-a. Ne verujem da je hteo assembly od x86 jer je iz Engleske a ne verujem da se tamo radi assembly za taj procesor, osim mozda ako je u nekoj srednjoj skoli gde se to radi kao kod nas u mg.

move $a0,$zero #inicijalizacija brojaca
addi $t1,$zero, 100 #takodje

loop:
addi $t1,$t1,-1

addi $v0,$zero,1 #ispisivanje rezultata
syscall

bgtz $t1, loop #ako je $t1 >0 onda skoci na loop:
addi $a0,$a0,1
#prethodnu komandu ce UVEK da izvrsi bez obzira da li skace na loop ili ne
#izgleda cudno ali ako nekome treba objasnjenje zasto je to tako neka pita

exit: jr $ra #izlaz iz programa

Ovo sam mogao da uradim i sa samo jednim brojacem ali verovali ili ne ovako je brze zbog pipeline-a. Inace od 486 procesora je i intel uveo pipeline pa je zaista bolje koristiti sto vise registara da ne bi neka naredba cekala na prethodnu da se izvrsi jer joj treba rezultat te naredbe, tako da i Danilov primer moze da se ubrza. Inace zbog superskalarnosti i pipeline danas ce kompajleri maltene uvek dati bolji kod nego da rucno to kodiramo u asembleru jer je tesko voditi racuna o tome koliko naredbi se izvrsava u isto vreme i kolika je velicina pipeline-a, velicina casha itd... Inace jump i branch naredbe najvise usporavaju program jer procesor ne zna unapred koja naredba ce da se izvrsava pa moze da pogresi i krene da izvrsava naredbu koju ne treba dok se izvrsava branch naredba.


[Ovu poruku je menjao srki dana 08.06.2003. u 04:12 GMT]
[ srki @ 31.05.2003. 04:49 ] @
Nenade, je l' ti pomogao neki odgovor? Za koji procesor hoces kod?