aide assembleur

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar de l’utilisateur
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 85
Inscription : 05 nov. 2011 13:45
Localisation : Alpes de Haute Provence
Contact :

aide assembleur

Message par spacemax » 25 mars 2015 19:38

Bonjour à tous et à toutes,

Voilà quelques temps déjà que je lorgnais sur un Canon X-07. Alors c'est enfin fait , une bébête toute neuve sur ebay...
Je cherche à faire un peu d'asm à grand coup de poke mais j'ai un souci. Voilà je l'expose.
Voici d'abord le prog que je souhaite tester (on se moque pas, c'est le 1er en asm) :
x=0
boucle:
x++
x<100 goto boucle
afficher a
Comme vous le voyez chez chaud !
Sauf que je n'arrive pas à le coder en opcode. Voici je que j'ai fait en basic. L'instruction data contient le code de la routine en OPCODE:

1 cls
2 x=0
10 goto 20
15 REM 0123456789012
20 RESTORE 15:AD%=PEEK(&H329)*256+PEEK(&H328)+6
30 FOR I%=0 TO 11:READ A$: POKE AD%+I%,VAL("&H"+A$):NEXT I%
35 PRINT AD%;VARPTR(X)
40 DATA 3E,0,3C,BF,64,DA,71,05,32,44,06,C9
50 EXEC 1391
60 Y=72
70 PRINT X

AD =1391 ET @X=1580

3E,0 LD A,v CHARGE 0 DANS REGISTRE A
3C INCREMENT A
BF 64 CP A COMPARE AVEC REGISTRE A (CARRY=1 A < OPERANDE)
DA 7105 JP C,NN VA A L'ADRESSE nn SI CARRY=1
32 4406 LD (nn),A CHARGE LA VALEUR DE A DANS l'ADRESSE nn SOIT DANS MON BASIC VARIABLE X
C9 RET
Voilà. Si y a des experts, merci beaucoup de me dire ou ça coince...
Merci

Image
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: aide assembleur

Message par charognard » 27 mars 2015 19:41

Salut !

pourquoi
DATA 3E,0,3C,BF,64,DA,71,05,32,44,06,C9
alors que @X=1580 (dans ton cas) ?

de plus LD (nn),A ne met pas 64 dans X mais modifie X qui est codé sur respectivement :
5 octets en INT
7 en simple précision
11 en double

Avatar de l’utilisateur
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 85
Inscription : 05 nov. 2011 13:45
Localisation : Alpes de Haute Provence
Contact :

Re: aide assembleur

Message par spacemax » 27 mars 2015 23:27

Bonjour,
Merci pour ta réponse. Je vois effectivement une 1ere erreur de débutant :
Bien je me suis :
1580 = 62C hex = 0000 0110 0010 1100 avec
byte fort 0000 0110 soit 6 hexa
bytes faible 0010 1100 soit 44 en décimal mais effectivement c'est 2C en hexa qu'il faudrait.

Par contre que veut dire modifie X ? J'ai bien vu dans dans la doc APPLICATIONS EN ASSEMBLEURS DANS L'UNIVERS DU CANON X-07 page 28 la description d'un entier
octet 1 : type 2
octet 2 : Nom 1
octet 3 : Nom 2
octet 4 : octet - significatif <-- ici 1580
octet 5 ; octet + significatif <-- 1581
je pensais que LD (nn),A chargeait le registre A à l'adresse nn codée sur 16 bits à partir de l'octet le - significatif. Je ne vois pas comment charger A dans une variable codée sur 5 octects avec cette instruction...un petit exemple me servirait de tremplin
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: aide assembleur

Message par charognard » 27 mars 2015 23:46

ça doit etre en décimal codé binaire.
Mets une valeur dans X et étudie les octets

X est en simple précision donc 7 octets
dans ces 7 octets tu as le typage, la mantisse, l'exposant
en faisant ton LD dans le premier octet sais-tu ce que tu modifie ?

Mettons 100 dans X
les 7 octets sont (en decimal)
67; 16; 0; 0; 0; 0;0
pour 101 :
67; 16; 16; 0; 0; 0; 0
pour 0
0; 0; 0; 0; 0; 0; 0
pour -1
193; 16; 0; 0; 0; 0; 0


vois-tu, pas si facile que cela

Avatar de l’utilisateur
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 85
Inscription : 05 nov. 2011 13:45
Localisation : Alpes de Haute Provence
Contact :

Re: aide assembleur

Message par spacemax » 28 mars 2015 20:10

Effectivement, pas si simple !

octet -3 octet -2 octet -1 octet 0 octet 1
valeur
100 2 88 0 100 0
1017 2 88 0 249 3

249 = F9
1017 = 3F9

octet -3 -> type
octet -2 et octet -1 -> nom
octet 0 et octet 1 : octet faible et octet fort du nombre.

Donc charger deux octets dans une adresse mémoire relève de l'exploit ! une fonction basic avec peek me semble le plus simple car en LM bonjour les travaux.

En tout cas MERCI. C'était juste pour le fun et comparer le temps d’exécution d'une boucle. Je comprends qu'un algo pour les nombre premiers sera pas une sinécure...
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: aide assembleur

Message par charognard » 29 mars 2015 10:35

Par contre pour la manipulation des chaines c'est intéressant et tu touche la les mécanismes de l'autoprogrammation

Répondre

Revenir vers « Tous les Pockets »