» »

Programiranje v zbirniku - potrebujem pomoč

Programiranje v zbirniku - potrebujem pomoč

c0dehunter ::

Potrebujem pomoč pri programiranju v zbirniku in sicer uporabljam simulator Motorola MC6803, ki je slovenskega porekla. Naloga je sledeča:

V tabelo dvajsetih števil (zaporedni naslovi v pomnilniku), ki naj se začne na naslovu $3500, vpiši prvi dve števili (majhni!). Sestavi podprogram z imenom podatki (začetek na naslovu $4000), ki izračuna vsa ostala števila (naslednjih 18) in jih zapiše na naslednje naslove. Podprogram naj določi vsako naslednje število kot vsoto prejšnjih dveh. V glavnem programu (začetek na naslovu $3000) se izpiše vsako posamezno število na PORT 1 (pazi, da vmesnik nastaviš kot izhod). V primeru prekinitve IRQ (PSP na naslovu $5000) se na PORT 2 izpiše zaporedna številka trenutno izpisanega podatka na PORT-u 1 (potrebuješ števec, ki bo štel števila).

Pogramiranje v zbirniku ni ravno moja vrlina, a moram nalogo nujno narediti. Začel sem namreč že, naprej pa se mi je zataknilo:

org $fffe * nastavimo reset vektor
fdb zacetek * začetni naslov programa

org $5000 * začetek podprograma za tabelo
tabela ldx #$3500 * naslov začetka vnosa števil
ldaa #2 * števila od 2 naprej
se staa 0,x * shrani vsebino akomolatorja A na naslov, ki je v X
inx * poveča vrednost v indeksnem registru x za 1
inca * poveča vsebino akomolortoja A za 1
cpx #$3514 * primerja register X z vrednostjo na $3013, ker mora biti 20 števil
bne se * vejitev, če še v registru X ni naslov $3514
rts * podprogram se prekine

org $3000 * naslov glavnega programa
zacetek LDS #$F000 * naložimo sklad
jsr tabela * kličemo podprogram
BRA konec
konec end


Kako naj izpeljem program naprej?
Hvala za vso pomoč! :D
ps.: rešiti moram tri programe, če bi kdo znal in ima čas, mu tudi nekaj malega plačam, ker res potrebujem nujno :8)
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

c0dehunter ::

Ni treba reševati naloge, ker sem jo že sam napol pogruntal ;) Spet sem začel spraševati, brez da bi se dobro poglobil... Imam pa drug problem: ko želim sešteti naprimer 80 in 80 (šestnajstiško seveda), mi v akomulator a vpiše 00, torej ne more izračunati. V čem je fora?
konkreten primer:

org $4000
podatki ldx #$3500
ldaa 0,x
ses adda 1,x
staa 2,x
inx
cpx #$3513
bne ses
rts

do 80 steje in zapisuje, nadalje pa samo 00...
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

luli ::

Ker je akummulator 8bitni register lahko shranjuje samo vrednosti od -128 do 127 v primeru, če uporabljaš predznačena števila 80hex je 128. Če hočeš večja števila boš moral uporabiti sosednji naslov in delati s carry zastavico. To sem napisal po spominu, če je narobe, naj me kdo popravi.

Highlag ::

80+80=100(Hex) Nekje moraš ujeti carry bit.
Never trust a computer you can't throw out a window

c0dehunter ::

In kako naj to izvedem v praksi? Nisem še namreč slišal za carry:8)

edit:
kaj pa če operiram z števili v registru D? Da dam namesto ldaa in adda ldd in addd? Sicer sem posksil, ampak zadnjih pet števil še zmeraj izpiše kot 00, niti nisem prepričan da so prejšnja prava...
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

Zgodovina sprememb…

St@jler ::

carry bit imaš v statusnem registru. Poglej si reference manual, kateri ukaz ti prenese stanje statusnega registra (ccr) v en akumulator.
Ko imaš to stanje noter, samo narediš AND z tako masko, kakršno rabiš, da pogledaš, če je bit postavljen ali ne.

npr. če je ukaz TPA (prenese CCR v reg. A) in če gledaš ali je prvi bit = 1

TPA
ANDA #%10000000
BEQ je_postavljen
.
.
.

ipd.

p.s.: Delaš tole za ARS1?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

programiranje v zbirniku z ukazi ...

Oddelek: Programiranje
203936 (3196) lebdim
»

Digitalna tehnika

Oddelek: Šola
81097 (942) Tutankhamun
»

potrebujem pomoc pri programiranju z motorolo mc6803 mikrocipom

Oddelek: Programiranje
61479 (1288) iggy
»

Zbirnik-program

Oddelek: Programiranje
162046 (1952) Bockor
»

eno vprasanje na kratko

Oddelek: Programiranje
121418 (1188) rc-car

Več podobnih tem