π
<-

[FR] Langage assembleur sur ez80 - Tutoriel

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

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Azerpogba » 21 Feb 2019, 18:15

ah merci j'avais pas vu ca doit etre ca

Edit : non il y a encore un faute :
Last edited by Azerpogba on 21 Feb 2019, 20:43, edited 1 time in total.
Image
User avatar
AzerpogbaAmbianceur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 60%
 
Posts: 397
Images: 16
Joined: 04 Dec 2018, 19:40
Gender: Male
Calculator(s):
MyCalcs profile
Class: Etude sup

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby TheMachine02 » 21 Feb 2019, 18:21

Il y a aussi </pre> à la toute fin à retirer.
User avatar
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 29.8%
 
Posts: 342
Images: 0
Joined: 16 Jan 2013, 18:27
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Médecine

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Azerpogba » 21 Feb 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
User avatar
AzerpogbaAmbianceur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 60%
 
Posts: 397
Images: 16
Joined: 04 Dec 2018, 19:40
Gender: Male
Calculator(s):
MyCalcs profile
Class: Etude sup

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Programmator88 » 21 Feb 2019, 19:07

Azerpogba wrote: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, ClaudeBot [spider], ç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 !
User avatar
Programmator88Programmeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 54%
 
Posts: 208
Joined: 26 Jan 2019, 20:05
Location: Dans la Lune...
Gender: Male
Calculator(s):
MyCalcs profile
Class: L2 MIASHS

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Azerpogba » 21 Feb 2019, 20:40

tkt tu es inclut dans le moi :'D :troll:
Image
User avatar
AzerpogbaAmbianceur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 60%
 
Posts: 397
Images: 16
Joined: 04 Dec 2018, 19:40
Gender: Male
Calculator(s):
MyCalcs profile
Class: Etude sup

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Epharius » 23 Feb 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: Select all
   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: Select all
   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: Select all
   cp b
   jr nz,else
   ; A=B
   jr endif
else:
   ; A≠B
endif:

Le While :
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
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: Select all
   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: Select all
   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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.1%
 
Posts: 1160
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Afyu » 14 May 2021, 11:59

Epharius wrote: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 :)
User avatar
AfyuVIP++
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 2.7%
 
Posts: 405
Images: 149
Joined: 30 Oct 2019, 19:17
Gender: Male
Calculator(s):
MyCalcs profile
Class: plutôt, oui :)

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Adriweb » 14 May 2021, 12:10

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

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...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 78.9%
 
Posts: 14744
Images: 1119
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Afyu » 14 May 2021, 12:12

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

Tu veux dire : un post antérieur à ce tutoriel ?
User avatar
AfyuVIP++
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 2.7%
 
Posts: 405
Images: 149
Joined: 30 Oct 2019, 19:17
Gender: Male
Calculator(s):
MyCalcs profile
Class: plutôt, oui :)

Re: [FR] Langage assembleur sur ez80 - Tutoriel

Unread postby Adriweb » 14 May 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

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...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 78.9%
 
Posts: 14744
Images: 1119
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

PreviousNext

Return to Langages alternatifs

Who is online

Users browsing this forum: ClaudeBot [spider], miickboy and 5 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
797 utilisateurs:
>734 invités
>55 membres
>8 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)