broj jedinica
Select messages from
# through # FAQ
[/[Print]\]

Forum@DeGiorgi -> Građa računala

#1: broj jedinica Autor/ica: Loo PostPostano: 19:06 pet, 9. 11. 2012
    —
zanima me postoji li ljepši način za prebrojati jedinice u binarnom zapisu broja s adrese $6000
meni ovo moje djeluje dosta šlampavo, pa da pitam Smile

Kod:

   DATA:      EQU   $6000
   PROGRAM:   EQU   $6100
   
         ORG   DATA
   VALUE:      DS.W   1
   RESULT:      DS.B   1
   MASK:      EQU   $0001
   
         ORG   PROGRAM
   START:
         MOVE.W   VALUE, D0
         BEQ.S   KRAJ
         MOVEQ   #0, D2
         
   LOOP:      MOVE.W   D0, D1
         AND.W   #MASK, D1
         ADD.B   D1, D2
         LSR.W   #1, D0
         BNE.S   LOOP
         
   KRAJ:      MOVE.B    D2, RESULT


      MOVE.B   #9,D0
      TRAP   #15      ; halt simulator



      END   START

#2:  Autor/ica: AtomisedLokacija: Exotica PostPostano: 20:21 pet, 9. 11. 2012
    —
Nemam sad vremena prisjećati se sintakse, ali mislim da možeš rotirati broj i gledati je li pozitivan ili negativan (tj. ima li na početku nula ili jedan)

#3:  Autor/ica: Loo PostPostano: 8:44 sub, 10. 11. 2012
    —
aha, ali kako ću znati kad sam ga izrotirala do kraja? onda mi treba još jedan brojač za to, zar ne? Embarassed

#4:  Autor/ica: ivstojic PostPostano: 14:18 sub, 10. 11. 2012
    —
Mogla bi se koristiti instrukcija BTST za testiranje određenog bita operanda, uz shiftanje registra udesno i testiranje najmanje značajnog bita (slično kao u gornjem kodu), ili recimo uz brojač koji u petlji ide od 0 do 15 i testira bitove redom.

#5:  Autor/ica: Loo PostPostano: 19:35 sri, 28. 11. 2012
    —
da ne otvaram novu temu, pitat ću ovdje:
nikako da shvatim zbog čega mi program uvijek kaže da su nizovi različiti (osim kad stavim duljinu 0)
to je 16. zadatak za praktični

Kod:

;Provjerite da li su tri niza ASCII znakova jednaka.
;Početne adrese stringova dane su 32 bitnim varijablama START1, START2, START3 s adresa $6000, $6004, $6008.
;Prvi bajt svakog stringa označava duljinu tog stringa u bajtovima.
;Ako su stringovi jednaki postavi varijablu MATCH s adrese $600C na 0, inače postavi na -1.

DATA:      EQU   $6000
PROGRAM:   EQU   $6100

      ORG   DATA
START1:      DS.L   1
START2:      DS.L   1
START3:      DS.L   1
MATCH:      DS.W   1

      ORG   PROGRAM
START:
      MOVEA.L   START1, A0
      MOVEA.L   START2, A1
      MOVEA.L   START3, A2
      MOVEQ   #-1, D1
      
      MOVE.B   (A0)+, D0
      CMP.B   (A1)+, D0
      BNE.S   KRAJ
      CMP.B   (A2)+, D0
      BNE.S   KRAJ
      
      TST.B   D0
      BEQ.S   ISTI
      
      SUBQ.W   #1, D0
      
LOOP:      CMPM.B   (A0)+, (A1)+
      DBNE   D0, LOOP
      
      BNE.S   KRAJ
      
      MOVEA.L   START1, A0
      MOVE.B   (A0)+, D0
      SUBQ.W   #1, D0
      
LOOP1:      CMPM.B   (A0)+, (A2)+
      DBNE   D0, LOOP1
      
      BNE.S    KRAJ
      
ISTI:      MOVEQ   #0, D1

KRAJ:      MOVE.W   D1, MATCH
      
      

      MOVE.B   #9,D0
      TRAP   #15      ; halt simulator



      END   START


#6:  Autor/ica: Phoenix PostPostano: 1:50 čet, 29. 11. 2012
    —
Problem je u tome što nakon petlje LOOP imaš u D0 pohranjenu vrijednost 0000FFFF, a nakon unosa duljine prvog stringa u isti registar, recimo da je duljina bila [tex]3[/tex], u njemu imaš 0000FF03. To nije dobro jer nakon tri oduzimanja u petlji LOOP1 dobivaš broj 0000FF00 koji je svakako različit od nule, stoga ti se ta petlja vrti najviše [tex](FF00)_{16}[/tex] dodatnih, nepoželjnih koraka, odnosno u nekom trenutku možda i stane ako zaključi da su proširenja promatranih stringova ipak različita (ovisno što se već nalazi u ostatku memorije koja nam, usput, možda nije ni dozvoljena na korištenje).

Dakle, dovoljno je dodatni naredbu poput MOVE.W #0 D0 nakon petlje LOOP i naredbe BNE.S KRAJ i program će ti funkcionirati kako si zamislila. Smile

#7:  Autor/ica: Loo PostPostano: 10:36 čet, 29. 11. 2012
    —
a tako znači! mislila sam da je problem u ideji, a ne u neopreznosti s veličinama brojeva.
puno ti hvala Very Happy

#8:  Autor/ica: Phoenix PostPostano: 13:57 čet, 29. 11. 2012
    —
Možda bi bilo korisno i da kažem sljedeće: Trace info (6. gumb slijeva u gornjoj traci, odnosno F7) ti uvelike pomaže u debuggiranju. Tako možeš analizirati svoj kod liniju po liniju i pratiti promjene u memoriji, registrima i čemu već ne. Smile Tako bi, recimo, u svom kodu primijetila da se previše puta vrtiš u petlji LOOP1, pa pogledom na registar D0 bi skužila da nije jednak nuli, a trebao bi biti. Very Happy
Poprilično su korisne i zelene lampice s lijeve strane dok pokrećeš program. Promijeniš li koju u crvenu i pokreneš li program, izvršit će se sve naredbe do one prve po redu koja ima upaljenu crvenu lampicu. Tako da, primjerice, ako ti početni dio koda radi, a sam se izvršava u povećem broju ciklusa, ovako ga efikasno preskočiš. Very Happy

Eto, čisto par savjeta ako nisi do sada skužila da se kodovi mogu poprilično efikasno debuggirati, a ne samo izvrtiti od početka do kraja. Smile A i ovo su valjda najkorisnije stvari dok učiš programirati i dok učiš kako se sve to odvija i ponaša u memoriji. Smile

#9:  Autor/ica: Loo PostPostano: 23:04 pet, 30. 11. 2012
    —
nisam primjetila ovo s lampicama Embarassed
hvala za savjete, šteta što mi degiorgi ne dopušta dati više od jedne la pohve Wink



Forum@DeGiorgi -> Građa računala


output generated using printer-friendly topic mod. Vremenska zona: GMT + 01:00.

Stranica 1 / 1.

Powered by phpBB © 2001,2002 phpBB Group
Theme created by Vjacheslav Trushkin