|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
gregaa Član
Pridružen-a: Pon 15 Jun 2009 16:46 Prispevkov: 107 Aktiv.: 0.59 Kraj: Slov.Bistrica
|
Objavljeno: Tor Maj 13, 2014 2:58 pm Naslov sporočila: motorola MC68000 naloga v zbirniku |
|
|
pozdravljeni,
potrebujem pomoč pri programiranju v zbirniku z motorolo MC68000. Naloga:
Pri fizikalnem poskusu smo na sistemu Kat/Ce v pomnilnik vnesli zaporedje 512 meritev od naslova $4000 naprej. Vsaka meritev je 16-bitno predznačeno celo število. Napišite program v zbirniku, ki izračuna povprečje meritev x. Za izračun uporabite standardno formulo za povprečje.
Prosim če mi lahko kdo, ki se spozna na progrmiranje v zbirniku pomaga rešiti nalogo oziroma razloži kako bi jo rešil. |
|
Nazaj na vrh |
|
|
s56al Član
Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 740 Aktiv.: 3.32 Kraj: JN66SI & JN76TM
|
Objavljeno: Tor Maj 13, 2014 3:32 pm Naslov sporočila: |
|
|
1. V indeksni register daš naslov prvega rezultata meritve.
2. V zanki zaporedoma s pomočjo indeksnega registra prebereš vseh 512 meritev in njihove vrednosti prištevaš v 32 bitni akumulator (pred zagonom zanke akumulator seveda postaviš na 0).
3. Preveriš ali je rezultat v akumulatorju pozitiven ali negativen.
4. Če je rezultat pozitiven, ga deliš s 512 tako, da ga s shiftanjem premakneš za 11 mest v desno
5. Če je rezultat negativen, ga najprej z odštevanjem od 0 pretvoriš v pozitivnega, izvršiš deljenje kot v 4. koraku in po deljenju zopet odšteješ od 0, da ga spremeniš nazaj v negativnega.
Za matematično korektnost: pred deljenjem (korak 4.) rezultatu prišteješ še polovico delitelja, v tvojem primeru je to 256. S tem zagotoviš pravilno zaokrožanje decimalnih mest, ki nastanejo pri deljenju, na celoštevilski rezultat! V nasprotnem se izvrši zgolj deljenje z rezanjem decimalnih mest.
Dobljeni rezultat je zopet pšredznačeno celo število. |
|
Nazaj na vrh |
|
|
s56al Član
Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 740 Aktiv.: 3.32 Kraj: JN66SI & JN76TM
|
Objavljeno: Tor Maj 13, 2014 3:41 pm Naslov sporočila: |
|
|
s56al je napisal/a: |
4. Če je rezultat pozitiven, ga deliš s 512 tako, da ga s shiftanjem premakneš za 11 mest v desno
|
Napaka, popravljam, za deljenje s 512 je treba vrednost "shiftati" za 9 binarnih mest v desno (bite, ki na desni izpadajao iz akumulatorja, zavržeš). |
|
Nazaj na vrh |
|
|
gregaa Član
Pridružen-a: Pon 15 Jun 2009 16:46 Prispevkov: 107 Aktiv.: 0.59 Kraj: Slov.Bistrica
|
Objavljeno: Tor Maj 13, 2014 3:44 pm Naslov sporočila: |
|
|
CLR.L D1
MOVE.W #$4000, A1
GOR: ADD.L (A1)+, D1
CMP.W #$4200, (A1)
BNE.W GOR
ROR.L #11, D1
END
je mogoče tako pravilno? |
|
Nazaj na vrh |
|
|
gregaa Član
Pridružen-a: Pon 15 Jun 2009 16:46 Prispevkov: 107 Aktiv.: 0.59 Kraj: Slov.Bistrica
|
Objavljeno: Tor Maj 13, 2014 3:44 pm Naslov sporočila: |
|
|
sem mislil napisat 9 namesto 11 pa nisem bil prepričan |
|
Nazaj na vrh |
|
|
S53DZ Član
Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 6.01 Kraj: Ljubljana
|
Objavljeno: Tor Maj 13, 2014 5:10 pm Naslov sporočila: |
|
|
Tvoji podatki v RAM-u so 16-bitni.
z indeksom bereš 32-bitno in tudi index povečuješ za 4!
Torej prebereš vsak drugi rezultat.
Assembler syntax:
Citiram: |
(An)+
Same as indirect addressing, but An will be increased by the size of the operation after the instruction is executed. |
|
|
Nazaj na vrh |
|
|
gregaa Član
Pridružen-a: Pon 15 Jun 2009 16:46 Prispevkov: 107 Aktiv.: 0.59 Kraj: Slov.Bistrica
|
Objavljeno: Tor Maj 13, 2014 11:01 pm Naslov sporočila: |
|
|
potem moram spremeniti v add.w da bom bral 16bitov, kolikor je velika ena številka povečeval bom pa za 2? |
|
Nazaj na vrh |
|
|
S53DZ Član
Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 6.01 Kraj: Ljubljana
|
Objavljeno: Sre Maj 14, 2014 7:11 am Naslov sporočila: |
|
|
Tudi zgornjo mejo naslovov moraš spremeniti, ali pa uvesti števec v zanki, ki pa gre do 512 (0x200). Pa paziti, da je seštevanje 32-bitno. |
|
Nazaj na vrh |
|
|
s56al Član
Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 740 Aktiv.: 3.32 Kraj: JN66SI & JN76TM
|
Objavljeno: Sre Maj 14, 2014 8:12 am Naslov sporočila: |
|
|
Pogledal sem v zbirko ukazov MC68000 in kot tam piše, ukaz "ROR" pomika bite v desno na način, da bit, ki zapusti besedo na eni strani, pride na drugi strani nazaj not. Če želiš, da bo deljenje delovalo pravilno, je treba za to ustrezno poskrbeti:
- po shiftanju "brišeš" najvišjih 9 bitov;
- ali poskrbiš, da v besedo med pomikanjem v desno z leve prihajajo le ničle če je število pozitivno oz. enke, če je negativno.
Še enkrat, ne pozabi, da je seštevek meritev, iz katerega po deljenju dobiš povprečje, lahko negativen (MSB = 1). To lahko obravnavaš na dva načina:
- pretvoriš seštevek v pozitivnega z odštevanjem od 0 in potem deliš, ter po deljenju postopek pretvorbe nazaj v negativno število ponoviš (kot sem napisal že v prvem sporočilu),
- pri shiftanju (ali po njem) gornjih 9 bitov zapolniš z enkami namesto z ničlami kot navedeno v drugi alineji prvega odstavka.
Pred deljenjem seštevku prištej 256, s tem boš dosegel pravilno zaokrožanje decimalnih mest. Poskusi na papir, kaj se zgodi, če recimo 0111 "deliš z 2" tako, da zamakneš za eno mesto v desno in sicer brez ter z dodatkom polovice delitelja (v tem primeru +1) pred zamikanjem. Koliko je rezultat v prvem primeru, koliko v drugem in kaj je matematično pravilno?
. |
|
Nazaj na vrh |
|
|
S53DZ Član
Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 6.01 Kraj: Ljubljana
|
Objavljeno: Sre Maj 14, 2014 8:34 am Naslov sporočila: |
|
|
ROR --> ASR |
|
Nazaj na vrh |
|
|
s56al Član
Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 740 Aktiv.: 3.32 Kraj: JN66SI & JN76TM
|
Objavljeno: Sre Maj 14, 2014 9:43 am Naslov sporočila: |
|
|
S53DZ je napisal/a: |
ROR --> ASR |
ASR je pa idealen v ta namen, ker avtomatsko ohranja MSB, tako da se s predznakom ni treba posebej ukvarjati...
. |
|
Nazaj na vrh |
|
|
gregaa Član
Pridružen-a: Pon 15 Jun 2009 16:46 Prispevkov: 107 Aktiv.: 0.59 Kraj: Slov.Bistrica
|
Objavljeno: Pet Maj 16, 2014 10:41 am Naslov sporočila: |
|
|
obstaja kak simulator za motorolo 68000, da bi lahko sprobaval kodo, ker trenutno lahko samo v šoli programiram... |
|
Nazaj na vrh |
|
|
vpeter Član
Pridružen-a: Pon 11 Jun 2012 16:05 Prispevkov: 337 Aktiv.: 2.33 Kraj: Maribor okolica
|
Objavljeno: Pet Maj 16, 2014 10:44 am Naslov sporočila: |
|
|
gregaa je napisal/a: |
obstaja kak simulator za motorolo 68000 |
Ravno nekaj tednov nazaj sem testiral EASy68K. Zanimiva zadeva. Poskusi in poročaj. |
|
Nazaj na vrh |
|
|
gregaa Član
Pridružen-a: Pon 15 Jun 2009 16:46 Prispevkov: 107 Aktiv.: 0.59 Kraj: Slov.Bistrica
|
Objavljeno: Tor Maj 20, 2014 7:00 am Naslov sporočila: |
|
|
hvala vpeter, ta program je res dober za testiat kodo. samo večkrat mi zmzne med preverjanjem |
|
Nazaj na vrh |
|
|
vpeter Član
Pridružen-a: Pon 11 Jun 2012 16:05 Prispevkov: 337 Aktiv.: 2.33 Kraj: Maribor okolica
|
Objavljeno: Tor Maj 20, 2014 10:30 am Naslov sporočila: |
|
|
Jaz sem program samo na hitro preizkusil, tako da ti glede stabilnosti ne morem pomagati.
Morda lahko preizkusiš KAT/CE emulator. Gre za popolno emulacijo sistema vendar ni tako uporabniško prijazen. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 77 dni
Powered by phpBB © 2001, 2005 phpBB Group
|