π
<-
Chat plein-écran
[^]

[FR] Langage assembleur sur ez80 - Tutoriel

Assembleur, Axe, C/C++, ICE...

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Azerpogba » 21 Fév 2019, 18:15

ah merci j'avais pas vu ca doit etre ca

Edit : non il y a encore un faute :
Dernière édition par Azerpogba le 21 Fév 2019, 20:43, édité 1 fois.
Image
Avatar de l’utilisateur
AzerpogbaAmbianceur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 60%
 
Messages: 397
Images: 16
Inscription: 04 Déc 2018, 19:40
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Etude sup

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude TheMachine02 » 21 Fév 2019, 18:21

Il y a aussi </pre> à la toute fin à retirer.
Avatar de l’utilisateur
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 29.4%
 
Messages: 341
Images: 0
Inscription: 16 Jan 2013, 18:27
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Médecine

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Azerpogba » 21 Fév 2019, 18:22

ok
attention test
yes ca me met pas d'erreurs merci bcp THMACHINE02!!!!!!!!!!!!!!!!!!!!!!!!!! :'D

il me reste plus qu'a coder DDj...
Image
Avatar de l’utilisateur
AzerpogbaAmbianceur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 60%
 
Messages: 397
Images: 16
Inscription: 04 Déc 2018, 19:40
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Etude sup

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Programmator88 » 21 Fév 2019, 19:07

Azerpogba a écrit:ok
attention test
yes ca me met pas d'erreurs merci bcp THMACHINE02!!!!!!!!!!!!!!!!!!!!!!!!!! :'D

il me reste plus qu'a coder DDj...

Comment ça, me ? :troll:
Je fais essentiellement des niveaux pour Oiram CE et Geometry Dash CE. Ils sont tous disponibles ici. Je fais un Doodle Jump pour TI-83PCE/TI-84+ avec Azerpogba. Je cherche un bêta-testeur pour mes niveaux Geometry Dash CE. N'hésitez pas à me contacter en MP.

ImageImage
Eh, Anonymous, ça te dirait de me donner un Internet ? C'est complètement inutile mais c'est marrant ! :D En échange, je te donnerai... ma reconnaissance éternelle !
Avatar de l’utilisateur
Programmator88Programmeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 54%
 
Messages: 208
Inscription: 26 Jan 2019, 20:05
Localisation: Dans la Lune...
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: L2 MIASHS

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Azerpogba » 21 Fév 2019, 20:40

tkt tu es inclut dans le moi :'D :troll:
Image
Avatar de l’utilisateur
AzerpogbaAmbianceur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 60%
 
Messages: 397
Images: 16
Inscription: 04 Déc 2018, 19:40
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Etude sup

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Epharius » 23 Fév 2020, 17:45

Wshwsh, j'avais du temps à perdre donc j'ai pondu ça. Hésitez pas à dire que c'est nul si ça l'est :) (toujours avec la sourire par contre)
Ça s'insère après l'explication sur les registres au début.
Metter poce blo si sa vou plais gen refeuré



Maintenant que nous avons vu que l'on pouvait utiliser des registres, comment les utilise-t-on ? Et d'ailleurs, comment on fait concrètement pour programmer en assembleur ? On va voir ici les quelques instructions que vous utiliserez 99% du temps :

L'utilisation des registres
On a vu qu'il était possible d'utiliser un certain nombre de registres dans nos programmes, qui sont en quelque sorte les variables en assembleur. Pour cela il suffit d'une instruction ld :
  • Pour mettre une valeur dans un registre 8 bits ou 24 bits on fait ld r,n où r est n'importe quel registre parmi A, B, C, D, E, H, L et BC, DE, HL et où n est un nombre entre 0 et 255 (8 bits) pour un registre 8 bits et entre 0 et 2^24 pour un registre 24 bits (ex : ld bc,12345 met 12345 dans BC)
  • Pour mettre un registre 8 bits dans un autre registre 8 bits, on fait ld r,r'r et r' sont n'importe quels registres parmi A, B, C, D, E, H, L
  • /! Il n'est pas possible de mettre un registre 24 bits dans un autre registre 24 bits : exemple ld hl,de est interdit !
C'est tout ce qu'il y a à savoir ! Maintenant, vous savez donc vous servir des registres. Il ne manque grosso modo plus qu'à savoir faire des conditions et des boucles ! Mais avant ça, on a besoin des sauts...

Les sauts et les labels
Avant de faire des If et des While like a boss, on a besoin de s'intéresser aux sauts. Mais je vous rassure, les sauts c'est vraiment pas compliqué ! Commençons par un exemple d'utilisation :
Code: Tout sélectionner
   jr proche
   ; ...quelques instructions
proche:
   jp loin
   ; ...
   ; Plein d'instructions
   ; ...
loin:

Pour sauter quelque part dans votre programme, il vous suffit de mettre un label à l'endroit où vous voulez sauter (ici, "proche" ou "loin" suivi du caractère deux points ':' ) et de faire soit jp monLabel ou jr monLabel. En pratique, un label sert à donner un nom à un endroit de votre programme, un identifiant en quelque sorte. Il peut être composé des caractères lettres MAJ+min, chiffres et underscore "_".

C'est bien beau tout ça mais c'est quoi la différence entre JP et JR ?

Bonne question ! Voici les avantages et inconvénients de chacun :
  • JP peut sauter à n'importe quel endroit du programme et de la mémoire alors que JR ne peut sauter qu'à un label qui est 128 octets avant ou 127 octets après
  • JP est légèrement plus lent que JR
  • JP prend 4 octets en mémoire alors que JR n'en prend que 2
Show/Hide spoilerAfficher/Masquer le spoiler
Si vous êtes curieux, la vraie différence entre JP (JumP) et JR (Jump Relative) est que JP prend en argument une adresse (ex : jp $D1023A saute à l'adresse $D1023A) alors que JR prend en argument un offset ie une position relative (ex : jr 45 saute 45 octets plus loin). Cet offset est un entier 8 bits signé, c'est pour cela que l'on ne peut aller que 128o en arrière ou 127o en avant.

Maintenant qu'on a vu comment sauter quelque part dans notre programme, on va voir comment sauter seulement si une condition est vérifiée !


Les sauts conditionnels ou comment faire des If et des While
Spoiler alert : l'assembleur ne contient ni instruction While, ni instruction If. Mais je vous rassure tout de suite : il est possible de faire des comparaisons, et donc d'en imiter le fonctionnement !
En assembleur, pour faire une comparaison, on fait cp registre8b ou cp nombre8b. Ces deux instructions comparent, pour le premier un registre 8 bits (A B C D E H L) au registre A et pour l'autre un nombre 8 bits à A. À noter qu'il n'est pas possible de comparer des registres 24 bits de cette façon (ex : cp hl n'existe pas). Toute seule, CP ne sert pas à grand chose, elle ne fait que comparer. Il faut donc se servir du résultat pour sauter à un endroit du programme "si la condition est vérifiée". Voici par exemple comment faire un If en assembleur :
Code: Tout sélectionner
   cp b ; comparons A avec B
   jr nz,faux ; si A!=B, on n'exécute pas le corps du IF
   ; et donc si on n'a pas sauté, c'est que la condition est vérifiée
faux:
   ; suite du programme

Peut-être que vous commencez à comprendre comment ça marche. Sinon voilà l'explication : pour faire un saut conditionnel, il faut mettre un CP puis un JP ou JR auquel on "ajoute un argument" tels que Z, NZ, C, NC (les plus utilisés). Imaginons que nous faisons cp b, à la ligne d'après on peu mettre :
  • jp z,label Saute si A=B
  • jp nz,label Saute si A≠B
  • jp c,label Saute si A<B
  • jp nc,label Saute si A≥B
A noter que j'ai utilisé JP ici, mais il en va de même pour JR.

C'est tout ?

Eh oui, c'est tout ! Pour l'instant ça peut paraître un peu magique mais on verra plus en détail comment ça marche lorsqu'on parlera du registre F !
En attendant, essayez de faire un If / Else, une boucle While (boucle qui s'exécute tant qu'une condition est vérifiée) et une boucle For (boucle qui s'exécute N fois) avec ce que vous avez appris. Je vous mets la réponse en spoiler mais essayez d'y réfléchir ;)
Le If/Else :
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
   cp b
   jr nz,else
   ; A=B
   jr endif
else:
   ; A≠B
endif:

Le While :
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
while:
   cp b
   jr nz,endWhile
   ; corps
   jr while
endWhile:

Le For : (pour faire l'opération r = r-1, on utilise l'instruction dec r ou r est n'importe quel registre)
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
   ld a,8 ; le nombre de fois qu'on veut exécuter la boucle
for:
   ; corps
   dec a
   cp 0 ; tant que A n'est pas égal à 0, on boucle
   jr nz,for

Les rageux diront que ce code n'est pas optimisé mais n'écoutez pas les rageux

Il y a bien entendu plusieurs solution et vous pouvez avoir trouvé quelque chose de différent mais qui fait quand même ce que vous voulez ;)

Pour information, il y a un moyen beaucoup plus simple de faire un boucle For. En effet, le processeur possède une instruction 2 en 1 : DJNZ (Decrement Jump NonZero). djnz label fait à elle toute seule l'équivalent de :
Code: Tout sélectionner
   dec b
   ld a,0 ; Dans l'instruction elle-même, A n'est pas mis à 0
   cp b
   jr nz,label

À noter que ce qu'utilise DJNZ est un JR, donc vous ne pourrez pas sauter plus loin que 128 octets en arrière. À noter aussi qu'après l'instruction, la valeur de B sera décrémentée de 1. Par contre la valeur de A n'est pas modifiée : A n'est donc pas mis à 0, c'est juste pour que vous compreniez comment marche l'instruction.
Il suffit alors de mettre le nombre de tours de boucle souhaités dans B, de mettre un label au début de la boucle et de mettre un DJNZ à la fin de celle-ci !


Ouf, on a fini le chapitre le plus dense du tutoriel ! Prenez bien le temps d'assimiler ces notions : elles vous serviront tout le temps !
Une fois que vous êtes à peu près à l'aise avec tout ça, il est temps de passer à l'utilisation de la "vraie" mémoire : parce que 10 octets de mémoire avec les registres communs, ce n'est vraiment pas beaucoup !
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 7%
 
Messages: 1107
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Afyu » 14 Mai 2021, 11:59

Epharius a écrit:ok, faudra que tu penses à corriger les fautes d'orthographe du coup ;)

C'est maintenant chose faite (merci Afyu ! :p), en tous cas pour la partie qui est en article. Je n'ai pas (encore) corrigé les éventuelles fautes qu'il y aurait dans les différentes suites, écrites en commentaires.

Bravo pour ce tutoriel ! Je ne m'intéresse pas forcément à l'assembleur mais les explications m'ont semblé claires :)
Avatar de l’utilisateur
AfyuVIP++
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 90.1%
 
Messages: 339
Images: 18
Inscription: 30 Oct 2019, 19:17
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: plutôt, oui :)

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Adriweb » 14 Mai 2021, 12:10

Le premier post a disparu / été supprimé ?
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.1%
 
Messages: 14606
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Afyu » 14 Mai 2021, 12:12

Adriweb a écrit:Le premier post a disparu / été supprimé ?

Tu veux dire : un post antérieur à ce tutoriel ?
Avatar de l’utilisateur
AfyuVIP++
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 90.1%
 
Messages: 339
Images: 18
Inscription: 30 Oct 2019, 19:17
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: plutôt, oui :)

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Message non lude Adriweb » 14 Mai 2021, 12:17

Non je parlais du post de TM02 qui était devenu vide. La ca semble OK.
Dailleurs une actualisation pour fasmg serait pas mal mais bon :D
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.1%
 
Messages: 14606
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

PrécédenteSuivante

Retourner vers Langages alternatifs

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1120 utilisateurs:
>1109 invités
>6 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)