Programavimas Z80 su montuotojo

H

Hammer111

Guest
Sveiki visi

Mano universitetų uždavinys yra užtikrinti, kad kodas, kuris rūšiuoti (nuo mažiausio iki didžiausio) 10 duomenis (numerius) iš atminties saugomi adresai nuo 50H iki 60h.Aš dirbu dėl šio 5 valandas ir ne pavyko.
Manau, kad mano pusėje logika yra geras, bet kažkaip JP instrukcija yra visada atliekamas.

Tai tekstas atstovavimo ką aš (pagal kiekvieną eilutę):
Aš pakrauta HL užsiregistruoti adresas 50H, pakraunami akumuliatoriai su duomenų atmintyje adresu 50H, aš išaugo HL registras viena, todėl atkreipia dėmesį į 51H, pakrautas registro B su duomenų 51H.Pramoginės iš naujo atlikti vėliava.Atimti AB regster, sumažėjo HL registrą, jis atkreipia dėmesį į adresų 50H.Loaded vėl su duomenų 50H (kadangi atėmus registre buvo perrašyti, bet aš turėti vėliava), padidėjo HL (51H),
tada
Šauktukas tai kur mano programos miršta, linija JP C, MEM turėtų Peršokti į MEM vietoje, jei jie atlikti vėliava yra 1, bet man jis visada šokinėja (nepriklausomai nuo to atlikti vėliava) Šauktukas
ne MEM:
apkrova adresas 51H su duomenų registrą, sumažėjo HL (50H) ir apkrovos 50H su B registre

Iš esmės ne MEM aš perėjo duomenų 50H į 51H ir nuo 51H iki 50H, nes atimant parodė atlikti vėliava.
Vėlgi, mano problema yra tai, ar atimti yra teigiamas ar neigiamas (vežti vėliavą į 1 arba 0) Turiu vykdymo MEM subprogram.

Kodas:

LD HL, 50H
LD (HL)
INC HL
LD B (HL)
IR
SBC A, B
Gruodis HL
LD (HL)
INC HL
JP C, MEM
MEM:
LD (HL),
Gruodis HL
LD (HL), B
Sustabdyti
Pabaiga

 
Jūs negalite naudotis šia tvarka:
Kodas:

JP C, MEM

MEM:
 
Rūšiuoti duomenis, turite vyrių.Tačiau ia ne kilpa ant jūsų programa!

Stenkitės sužinoti paprasčiausias rūšiavimo Metodas - Bubble Rūšiuoti algoritmas.

 
IANP Labai tau ačiū IT WORKS

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" />
Tai tik programos pradžioje tai ne visa programa, rūšiuoti.
Maniau, kad pakrovimo 2 duomenų pirma tada juos lyginant ir išleisti juos į atminties surūšiuoti tada pakrovimo šalia duomenų ir lyginant juos su ankstesniais dviem ir nusiųsti jį appropirate poziciją.
Ar tai, ką Burbulo rikiavimo algoritmas veikia?

Ačiū vyrukai už atsakymą!!

 
Dešimt skaičių palyginti => 9 linijos ..

Pirmajame iteracijos gausite mažiausias skaičius daug ..
Antrajame iteracijos (9 numeriai spręsti) suteiks jums antras mažiausias skaičius ..ir tt ..
Paskutinės iteracijos, kurios faktiškai bus lyginami tik 2 numeriai, suteiks jums didžiausią skaičių daug ..

Pagarbiai,
IanP

 
Aš programą, kuri iš 10 numerių atmintis nustato mažiausias.
aš šį numerį pirmą kartą adresas (50H), ir pirmasis numeris įdėti į ją vietą.
Aš adresas 70H laikyti adresas mažiausias skaičius tarp tų 10 numerių

Štai kodas:

LD HL, 50H
LD D, 9
LOOP1:
LD (HL)
INC HL
Linijos:
LD B (HL)
KP B
KVIETIMAS NC, FLAG0
KVIETIMAS C FLAG1
Gruodis D
JR NZ, Loop
LD HL, 50H
LD C (HL)
LD HL (70H)
LD (HL), C
LD HL, 50H
LD (HL),
Sustabdyti

FLAG0:
LD A, B
LD (70H), HL
INC HL
LD B (HL)
RET

FLAG1:
INC HL
LD B (HL)
RET

Kitas žingsnis yra padaryti tą patį procedūrą, bet aš turi pašalinti Pirmasis numeris adreso 50H, nes jis yra mažiausias, kad aš nenoriu, kad, kad jie PAIEŠKA dar kartą.
Tai reiškia, kad antroje eilutėje turi vesti į 8 ir pradedant adresas turi būti 51H (pirmos dvi eilutės kodą).

Problema ta, kad aš nežinau, kaip sumažinti joms KODAS PRADŽIA IR gale, kur pristatys antras mažiausias Nr pačiu adresu kaip ir pirmasis.Aš galėtų padaryti tai rankiniu būdu, bet tai nėra naudinga.

 
Hammer111:
Prašome patikrinti šį sub-rutinos, Aš ne išbandyti tai
Kodas:

; Atminties sritis 50H iki 60h (17 baitai)Bąbelkowe:

LD DE, 0050h

Ieškoti:

LD, (DE)

PUSH DE

POP HL

INC HL; hl = DE 1

Palyginkite:

LD B (HL)

KP A, B, A => B

JR NC, NoSwap; Taip, ne apsikeitimo

LD C, B

LD B

LD, C; Swap: B

LD (DE),; Išsaugoti į viršų labiausiai vietovė

NoSwap:

INC HL; Kitas baitų palyginti

LD, 61h

KP, L; pabaiga matrica?

JR NZ, Palyginti, dar šalia palygintiINC DE, Next Top labiausiai vietovė

LD, 60h

KP, E; pabaiga nuskaityti?

JR NZ, skenavimas; dar šalia Scan

RET
 
Acumulator yra pakimba su adresu 61H Jūsų kodas.

Aš padariau kodas yra naudojamos tam tikros savo eilutes, kurios man padėjo.
Vienintelis dalykas yra tai, kad aš nežinau, kaip sustabdyti linijos ne paskutinė eilutė (JR linija), aš noriu ją sustabdyti, kai jis pasiekia adresas 5AH
Bandžiau su tokio, o ne JR LOOP linija

LD, 5AH
KP L
JR NZ LOOP
ji dirba kelių ciklų (3 ar 4 numerius), ir tada jis sustoja (sustos kažkur apie 54h

Kodas:; Apkrovos adresas 50HLD DE, 50HLinijos:LD, (DE)

PUSH DE

POP HLPalyginti:INC HL

LD B (HL)

KP B;> = b

KVIETIMAS NC, SWAP, jei vežti = 0 perjungti duomenų

LD C

LD, 5AH

KP L

LD, C

KVIETIMAS NZ, palyginti

JP SWAPNOApsikeitimo sandorius:

PUSH HL

POP IX

LD C

LD A, B

LD B, C

RETSWAPNO:

PUSH DE

POP HL

LD C (HL)

LD (DE),

PUSH IX

POP HL

LD L, H

LD H 0

LD (HL), C

INC DE

JP LOOP

Sustabdyti

 
Citata:

Acumulator yra pakimba su adresu 61H Jūsų kodas.
 
Taip jis veikia, aš labai atsiprašau, bet nežinau, kodėl neveikia pirmą kartą, galbūt kai kurie ankstesnių programų pakimba jis.

Once again I'm sorry, jis puikiai veikia AČIŪ LOT

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" />Vienas klausimas, kai aš pop 50H adresą IX registre yra užpildytas 5000H adresas kodėl?

 
Citata:

kai aš pop 50H adresą IX registre yra užpildytas 5000H adresas
 
Off topic:
Jei jums patiko jūsų Z8 gal jums bus įdomu sužinoti Zilog mikrokontrolerių šeimą, kurios nemokamai Kompiliavimo C Manau, po to, kai parašė surinkimo rasite programavimo ca kvėpavimas

 
Hammer111 parašė pirmąją parašėte:
Citata:

Mano universitetų uždavinys yra užtikrinti, kad kodas, kuris rūšiuoti (nuo mažiausio iki didžiausio) 10 duomenis (numerius) iš atminties saugomi adresai nuo 50H iki 60h.
 
Na, yeah, tai buvo tik universitetų užduotis ir vakar mes dirbome dėl Zilog eZ80Acclaim programinė įranga ir perėjo į C programavimo.

Labai ačiū už pagalbą.

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Labai laimingas" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top