Forum » Programiranje » 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č!
ps.: rešiti moram tri programe, če bi kdo znal in ima čas, mu tudi nekaj malega plačam, ker res potrebujem nujno
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č!
ps.: rešiti moram tri programe, če bi kdo znal in ima čas, mu tudi nekaj malega plačam, ker res potrebujem nujno
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
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...
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.
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
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...
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.
but I'll defend to the death your right to say it.
Zgodovina sprememb…
- spremenilo: c0dehunter ()
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?
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | programiranje v zbirniku z ukazi ...Oddelek: Programiranje | 4258 (3518) | lebdim |
» | Digitalna tehnikaOddelek: Šola | 1196 (1041) | Tutankhamun |
» | potrebujem pomoc pri programiranju z motorolo mc6803 mikrocipomOddelek: Programiranje | 1560 (1369) | iggy |
» | Zbirnik-programOddelek: Programiranje | 2143 (2049) | Bockor |
» | eno vprasanje na kratkoOddelek: Programiranje | 1555 (1325) | rc-car |