Page 1 sur 7

[ASM] Plusieurs questions sur l'assembleur

Message non luPosté: 27 Juin 2018, 18:31
de Limonadd
Bonjour ! Je viens tout juste de commencer l'assembleur mais il y a quelques trucs que je comprends pas. Voici le code d'un des tutos que j'ai vu:
Code: Tout sélectionner
#include "ti83pce.inc"
   
   .assume ADL=1
   .db tExtTok,tAsm84CeCmp
   .org userMem

call _homeup
call _ClrScrnFull
ld hl,text
call _PutS
call _GetKey
call _ClrScrnFull
res donePrgm,(iy+doneFlags)
ret

text:
  .db "Hello World !",0



Tout d'abord, à quoi sert _homeup exactement?
ensuite le label text, c'est l'adresse à laquelle la chaine de caractère est stockée si j'ai bien compris?
et donc je croyais que .db servait à allouer un byte donc un octet à partir de cette adresse, mais ça à pas l'air d'être ça c'est pas logique puisque la chaine doit prendre bien plus. Donc à quoi sert db exactement svp? XD ensuite à quoi sert le ,0 après le Hello world?
Et enfin à quoi sert la commande res (avec ce qui suit) ?
Désolé pour toutes ces questions, j'espère que quelqu'un pourra me réponde. :)
Merci d'avance :D

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 27 Juin 2018, 18:36
de TheMachine02
_homeup est un call système de l'OS pour remettre le curseur de l'écran d'accueil tout en haut. Text est bien l'adresse de la chaîne oui, quand tu fais un db avec une chaine de caractère ça insère le nombre de byte nécessaire pour écrire la chaine en ASCII (merci l'assembleur !). L'équivalent donc de beaucoup de db x,x,x,x... Le 0 signifie juste la fin de la chaîne de caractère. C'est nécessaire, car la fonction qui affiche la chaine attends un zéro pour quitter, tu imagines bien si y'en a pas :P

res permet de mettre un bit à zéro ; ici ça met le bit 'donePrgm' de l'octet pointé par iy+doneFlags. C'est une commande un peu plus complexe, mais ça permet de supprimer le 'Done' à la fin du programme.

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 27 Juin 2018, 18:40
de Limonadd
Ok ! Merci beaucoup pour ta réponse très rapide et très complète :D

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 28 Juin 2018, 10:16
de Limonadd
Rebonjour ! J'ai d'autre questions ( oui encore xD ).
Tout d'abord sur le z80 on peut fusionner 2 registres 8 bits comme h et l pour former un registre 16 bits, hl. Sur le ez80 si on active l'ADL, si on fusionne h et l on obtient un registre 24 bits. Mais d'où viennent les 8 bits restant ?
Ensuite, pour les instructions JR et JP:
Dans le tuto il dit que JR prend soit 7 ou 12 "cycles" et JP en prend toujours 10. Mais c'est quoi un "cycle" exactement?
Merci d'avance :)

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 28 Juin 2018, 11:16
de Extra44
J'ai connu l'assembleur...mais pas précisément celui ci.
Mais je peux dire :
Les cycles sont les cycles d'horloge :le Cpu à une fréquence de fonctionnement, et le cycle C est la période correspondante (il me semble).
Donc une instruction qui fait 7 cycles mets 7 fois la période de fonctionnement du cpu pour s'exécuter
PS: Tu dois pouvoir trouver sur le net un site/fichier qui te donne les références des instructions...

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 28 Juin 2018, 11:19
de Limonadd
Ah ok d'accord, merci beaucoup Extra44 ! :D

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 28 Juin 2018, 18:46
de Epharius
Les 8 bits restants tu ne peux pas y accéder directement, tu dois par exemple copier la valeur de ton registre dans la mémoire et récupérer l'octet de poids fort :
Code: Tout sélectionner
; met les 8bits inaccessibles normalement dans A
ld (memoire),hl
ld a,(memoire+2)

En gros c'est juste que les instructions de l'assembleur, pour des raisons méconnues (ça peut être pour avoir une meilleure compatibilité avec l'assembleur z80), n'ont pas permis l'accès à ces bits là mais sont réels et utilisés par exemple dans les add, sbc, etc...

Pour les cycles Extra44 a à peu près tout dit, tu peux retrouver les temps que met chaque instruction ici : https://wiki.tiplanet.org/Timings_des_instructions_eZ80
Ce ne sont pas les cycles qui sont affichés mais les TStates. Si je ne dis pas de bêtise, corrigez moi si je me trompe, un Tstate est égal à 1/48,000,000 secondes vu que le cpu est cadencé à 48Mhz. Ça permet pour le coup d'avoir une très bonne approximation du temps que va mettre un bout de code à s'exécuter (mais il doit aussi y avoir un histoire de waitstate, je ne sais pas si le tableau les prend en compte ou pas).

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 28 Juin 2018, 18:54
de Ti64CLi++
Et comment a-t-on pu déterminer le nombre de TStates d'une instructions? Comment cela a-t-il été possible d'être aussi précis?

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 28 Juin 2018, 18:55
de Epharius
grâce aux timers de la calculatrice, je te conseille d'aller lire le topic : viewtopic.php?t=18168

Re: Plusieurs questions sur l'assembleur

Message non luPosté: 28 Juin 2018, 19:04
de Limonadd
Ok super! Merci beaucoup! mais j'ai encore d'autres questions... je suis arrivé à l'affichage de texte. Tout d'abord je ne comprends pas la différence entre ce qu'ils appellent le curseur et le "pen". Il est dit que le curseur c'est pour les grandes polices d'écritures et le pen les petites. Mais je comprend pas trop, c'est les majuscules/minuscules? Ou alors le curseur c'est pour les lettres, etc et le pen pour les pixels? ( la position du curseur sur l'écran est définie par les variables CurRow et CurCol, et pour le pen c'est PenRow et PenCol). Je suis un peu perdu... et autre petite question: à quoi servent les .list et .nolist que l'on voit dans certains débuts de codes? Merci d'avance :)