Programmation en assembleur Z80

Quote:

quand je pop 50H adresse dans IX registre est rempli avec l'adresse 5000H
 
Off topic:
Si vous avez aimé votre Z8 vous ferez peut-être intéressés par l'apprentissage de la famille de microcontrôleurs ZILOG qui ont un compilateur libre je crois que c après avoir écrit en assembleur, vous trouverez la programmation dans ca souffle

 
Hammer111 écrit sur la première annonce:
Quote:

Ma tâche est de faire de l'université code qui sort (du plus petit au plus grand) 10 de données (numéros) à partir de données stockées en mémoire au adresses de 60H à 50H.
 
Eh bien, ouais c'était juste une tâche universitaire et hier nous avons travaillé sur le logiciel eZ80Acclaim Zilog et passé à la programmation C.

Thank you very much for the help.

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" />
 
Ouais ça marche, je suis vraiment désolé mais je ne sais pas pourquoi n'a pas fonctionné pour la première fois, peut-être certains programmes précédents, elle avait collé.

Encore une fois je I'M SORRY, il fonctionne parfaitement MERCI BEAUCOUP

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" />Une question, quand je pop 50H adresse dans IX registre est rempli avec l'adresse 5000H pourquoi?

 
Quote:

Acumulator est coincé avec l'adresse 61H dans votre code.
 
Acumulator est coincé avec l'adresse 61H dans votre code.

J'ai fait le code en utilisant certaines de vos lignes qui m'ont aidé.
La seule chose est que je ne sais pas comment arrêter en boucle à la dernière ligne (JR LOOP), je veux que ça s'arrête quand il parvient à l'adresse 5AH
J'ai essayé de mettre à la place de la ligne JR LOOP

LD A, 5AH
CP L
JR NZ LOOP
ça fonctionne pour quelques cycles (pour 3 ou 4 numéros) et puis il s'arrête (il s'arrête quelque part autour de 54H

Code:; charge adresse 50HLD DE, 50HLOOP:LD A, (DE)

PUSH DE

POP HLComparez:INC HL

LD B, (HL)

CP B; a> = b

APPEL NC, SWAP, si carry = 0 Données de commutateur

LD C, A

LD A, 5AH

CP L

LD A, C

APPEL NZ, COMPAREZ

JP SWAPNOSWAP:

PUSH HL

POP IX

LD C, A

LD A, B

LD B, C

RETSWAPNO:

PUSH DE

POP HL

LD C, (HL)

LD (DE), A

PUSH IX

POP HL

LD L, H

LD H, 0

LD (HL), C

INC DE

JP LOOP

HALT

 
Hammer111:
S'il vous plaît tester cette sous-routine, je n'ai pas l'essayer
Code:

; Zone de mémoire 50h jusqu'à 60h (17 bytes)BubbleSort:

LD DE, 0050h

Scan:

LD A, (DE)

PUSH DE

POP HL

INC HL; hl = fr 1

Comparez:

LD B, (HL)

CP A, B, A => B

JR NC, NoSwap, oui, ne pas swap

LD C, B

LD B, A

LD A, C; Swap A: B

LD (DE), A; Enregistrer en haut à la localité

NoSwap:

INC HL; octet suivant pour comparer

LD A, 61H

CP A, L; fin du tableau?

JR NZ, Comparez, pas encore, à côté de comparerINC DE; prochain emplacement le plus haut

LD A, 60h

CP A, E, fin du balayage?

JR NZ, Scan, pas encore, à côté de numérisation

RET
 
Dix chiffres à comparer => 9 boucles ..

La première itération vous donnera le plus petit nombre dans le lot ..
La seconde itération (9 numéros à traiter) vous donnera le deuxième plus petit nombre ..et ainsi de suite ..
La dernière itération, ce qui en fait se comparer à seulement 2 numéros, vous donnera le plus grand nombre dans le lot ..

Observe,
IanP

 
J'ai fait des programmes qui sur 10 numéros en mémoire trouve la plus faible.
Je mets ce nombre sur la première adresse (50H) et le premier numéro il faut y faire sa place.
J'ai utilisé l'adresse 70H pour stocker l'adresse du plus petit nombre parmi les 10 numéros

Voici le code:

LD HL, 50H
LD D, 9
Loop1:
LD A, (HL)
INC HL
LOOP:
LD B, (HL)
CP B
APPEL NC, FLAG0
APPEL C, flag1
Décembre D
JR NZ, LOOP
LD HL, 50H
LD C, (HL)
LD HL, (70H)
LD (HL), C
LD HL, 50H
LD (HL), A
HALT

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

Flag1:
INC HL
LD B, (HL)
RET

PROCHAINE ÉTAPE EST DE FAIRE LE MEME PROCEDURE, MAIS JE DOIS EXCLURE NOMBRE PREMIER SUR L'ADRESSE 50H parce qu'il est le PLUS PETIT SO I DON'T WANT IT TO BE IN SEARCH AGAIN.
CELA SIGNIFIE LA DEUXIÈME LIGNE doit pointer vers 8 ET ADRESSE DE DEPART DOIT ETRE 51H (deux premières lignes dans le code).

PROBLEME EST QUE JE NE SAIS PAS COMMENT RÉDUIRE LE eux au début d'un code et à l'extrémité où il mettra Deuxième numéro plus petit sur le même premier COMME UNE ADRESSE.I COULD DO IT manuellement, mais il n'est pas utile.

 
IANP THANK YOU VERY MUCH IT WORKS

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Très content" border="0" />
Ce n'est que le début du programme, ce n'est pas le programme complet pour le tri.
J'ai pensé de chargement 2 premières données puis de les comparer et de les mettre en mémoire triés puis lors du chargement de données suivant et en les comparant avec les deux précédents et en l'envoyant sur la position justificative utile.
Est-ce ce tri à bulles fait?

THANK YOU GUYS POUR REPONDRE!!

 
Vous ne pouvez pas utiliser la séquence suivante:
Code:

JP C, MEM

MEM:
 
Pour le tri des données, vous devez en boucle.Mais il n'y a pas de boucle dans votre programme!

Essayez d'en apprendre le plus simple méthode de tri - Bubble Trier Algorithm.

 
H

Hammer111

Guest
Salut à tous

Ma tâche est de faire de l'université code qui sort (du plus petit au plus grand) 10 de données (numéros) à partir de données stockées en mémoire au adresses de 60H à 50H.J'ai travaillé sur ce pendant 5 heures et n'a pas réussi.
Je pense que mon côté de la logique est bonne, mais en quelque sorte JP instruction est toujours fait.

Ceci est la représentation textuelle de ce que j'ai fait (ligne par ligne):
J'ai chargé HL créer un compte pour l'adresse 50H, puis chargé à l'accumulateur A avec les données en mémoire à l'adresse 50H, j'ai augmenté registre HL par un, afin qu'elle pointe vers 51H, chargés B registre avec les données à 51H.De vente et une réinitialisation à porter le drapeau.Soustraite AB regster, diminution HL registre pour qu'elle pointe vers l'adresse 50H.Loaded A de nouveau avec les données à 50H (car après soustraction registre A a été écrasé, mais j'ai eu de porte-drapeau), augmentation de HL (51H),
puis
Exclamation c'est là que mon programme meurt, line JP C, MEM devrait aller vers la place MEM quand porter le drapeau est réglé sur 1, mais pour moi, il saute toujours (indépendamment de porter le drapeau) Exclamation
au MEM:
Charge adresse 51H avec des données à un registre, une diminution de HL (50H) et 50H en charge avec le registre B

Essentiellement à MEM I de données par commutation de 50H à 51H et de 51H à 50H parce que la soustraction a montré porter le drapeau.
Encore une fois, mon problème est de savoir si la soustraction est positif ou négatif (de porte-drapeau fixé à 1 ou 0), j'ai l'exécution du sous-programme MEM.

Code:

LD HL, 50H
LD A, (HL)
INC HL
LD B, (HL)
ET
SBC A, B
Décembre HL
LD A, (HL)
INC HL
JP C, MEM
MEM:
LD (HL), A
Décembre HL
LD (HL), B
HALT
FIN

 

Welcome to EDABoard.com

Sponsor

Back
Top