Mes débuts en assembleur
Modérateur : Politburo
- charognard
- Fonctionne à 9600 bauds
- Messages : 4412
- Enregistré le : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: Mes débuts en assembleur
Une petite subtilité cependant.
Le jump relatif et celui absolu.
Dans un cas le programme est relogeable dans l'autre non
Le jump relatif et celui absolu.
Dans un cas le programme est relogeable dans l'autre non
- phe78
- Fonctionne à 1200 bauds
- Messages : 722
- Enregistré le : 22 avr. 2011 19:08
- Localisation : Les Adrets de l'Esterel (Var)
Re: Mes débuts en assembleur
c'est vrai, et les sauts relatifs sont sur les machines 8 bits codés sur un octet, donc des déplacements limités à +- 127 bytes. ils sont aussi généralement plus courts (1 byte de moins que les sauts absolus) et donc un peu plus rapides.charognard a écrit :Une petite subtilité cependant.
Le jump relatif et celui absolu.
Dans un cas le programme est relogeable dans l'autre non
Re: Mes débuts en assembleur
Bonsoir
Oui j'ai bien vu dans le tuto qu'il existait JR qui était optimisé par rapport
à JP, mais était limité à +- 128 octets de distance de saut.
Donc d'après phe78 JR serait en relatif et JP en absolu.
Pourtant JP renvoie vers un label donc théoriquement en relatif.
Après tout dépend comment cela est compilé, je suppose que JR est codé en +- xxx octets
alors que JP est codé sur une adresse absolue ?
Oui j'ai bien vu dans le tuto qu'il existait JR qui était optimisé par rapport
à JP, mais était limité à +- 128 octets de distance de saut.
Donc d'après phe78 JR serait en relatif et JP en absolu.
Pourtant JP renvoie vers un label donc théoriquement en relatif.
Après tout dépend comment cela est compilé, je suppose que JR est codé en +- xxx octets
alors que JP est codé sur une adresse absolue ?
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- kweeky
- Fonctionne à 2400 bauds
- Messages : 1777
- Enregistré le : 05 oct. 2007 19:46
- Localisation : Pas très loin de Bordeaux
Re: Mes débuts en assembleur
Salut
JP renvoie vers un label placé à un endroit précis du listing assembleur. Et donc à une certaine adresse donnée: c'est donc bien de l'adressage absolu. A savoir que tu peux aussi utiliser un label avec JR: lors de l'assemblage, la valeur du saut relatif sera calculée en fonction de l'adresse du label et de l'adresse de l'instruction JR... Sauf si l'écart entre les deux est trop grand -> erreur à l'assemblage.
@+
JP renvoie vers un label placé à un endroit précis du listing assembleur. Et donc à une certaine adresse donnée: c'est donc bien de l'adressage absolu. A savoir que tu peux aussi utiliser un label avec JR: lors de l'assemblage, la valeur du saut relatif sera calculée en fonction de l'adresse du label et de l'adresse de l'instruction JR... Sauf si l'écart entre les deux est trop grand -> erreur à l'assemblage.
@+
- Forthman
- Fonctionne à 300 bauds
- Messages : 164
- Enregistré le : 03 juin 2009 06:51
- Localisation : Castelsarrasin (82)
Re: Mes débuts en assembleur
La programmation Assembleur n'est pas difficile, il n'y a que quelques instructions
dont la syntaxe est plutôt claire.
Une fois qu'on a bien assimilé le fonctionnement d'un processeur c'est même plutôt
grisant, on a l'impression de pouvoir faire ce que l'on veut de la machine
Et puis... on est confronté aux périphériques... et là, si on manque de doc ça devient
très vite compliqué
Je ne sais pas comment c'est sur la TI, j'espère que tu as de la doc qui va bien
Pour la HP28s j'avais "Voyage au centre de la HP28" c'était indispensable
Ahhh... le Saturn ... ça c'était proc bien chiant à programmer !
dont la syntaxe est plutôt claire.
Une fois qu'on a bien assimilé le fonctionnement d'un processeur c'est même plutôt
grisant, on a l'impression de pouvoir faire ce que l'on veut de la machine
Et puis... on est confronté aux périphériques... et là, si on manque de doc ça devient
très vite compliqué
Je ne sais pas comment c'est sur la TI, j'espère que tu as de la doc qui va bien
Pour la HP28s j'avais "Voyage au centre de la HP28" c'était indispensable
Ahhh... le Saturn ... ça c'était proc bien chiant à programmer !
Re: Mes débuts en assembleur
Bonjour
Et assez riche même, j'ai effectivement un pdf qui détaille toutes les routines en rom.
Me mettre à l'assembleur ensuite sur d'autres processeurs, 68000, saturn ou arm
via mes Ti89, hp 28/48 ou hp 50, me plairait aussi, malheureusement les docs ou tutos
en français se font plutôt rare.
J'en suis sûrement pas là encore, mais c'est vrai que je trouve cela assez plaisant.Une fois qu'on a bien assimilé le fonctionnement d'un processeur c'est même plutôt
grisant, on a l'impression de pouvoir faire ce que l'on veut de la machine
Et assez riche même, j'ai effectivement un pdf qui détaille toutes les routines en rom.
Me mettre à l'assembleur ensuite sur d'autres processeurs, 68000, saturn ou arm
via mes Ti89, hp 28/48 ou hp 50, me plairait aussi, malheureusement les docs ou tutos
en français se font plutôt rare.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- Forthman
- Fonctionne à 300 bauds
- Messages : 164
- Enregistré le : 03 juin 2009 06:51
- Localisation : Castelsarrasin (82)
Re: Mes débuts en assembleur
un bouquin sympa sur les vieilles consoles et les techniques de programmation :
"Machines de Jeux" de Guillaume Poggiaspalla
Pas très technique mais sympa à lire pour se faire une idée de l'ingéniosité des programmeurs
de l'époque
"Machines de Jeux" de Guillaume Poggiaspalla
Pas très technique mais sympa à lire pour se faire une idée de l'ingéniosité des programmeurs
de l'époque
Re: Mes débuts en assembleur
Bonjour
Voici donc mon premier vrai programme en asm.
Il s'agit d'un softmenu utilisable en basic comme sur Ti 85,86.
Chaque touche est définie par 4 caractères, il y a 5 touches de fonctions.
On stock ces carctères dans Str1, une variable réservée aux chaines, il y en a 10 (Str0...Str9)
exemple: "JOUEOPTNQUITHELP" ->Str1
donnera : F1:JOUE F2:OPTN F3:QUIT F4:HELP
On récupère ensuite le n° de la touche choisie dans la variable X.
On peut quitter le menu avec la touche CLEAR, X renvoie alors 0
Dans cet exemple F5 sera sans effet comme les autres touches à part 2nd OFF.
Après avoir initialiser Str1 on appelle un programme basic qui lui appellera le programme en asm
après avoir vérifié que Str1 n'est pas vide et que sa longueur est un multiple de 4.
Le voici :
Voilà ce programme est loin d'être parfait, on pourrait sauvegarder l'écran avant l'affichage
du menu puis le restaurer ensuite, ici les 8 dernières lignes de pixels sont détruites.
Seules les lettres et chiffres sont affichées correctement.
Je pourrai continuer ainsi à l'amélioré et à m'améliorer en assembleur
Programmer en assembleur et interagir avec le basic est pour moi très intéressant.
Ce sera mon dernier post concernant ma découverte de l'assembleur, si cela vous a donné envie tant mieux.
Si vous avez des questions, des remarques n'hésitez pas.
Merci de m'avoir suivi.
PS: Un grand merci à Epharius pour son aide concernant le codage différent des chaînes entre l'assembleur et le basic.
Voici donc mon premier vrai programme en asm.
Il s'agit d'un softmenu utilisable en basic comme sur Ti 85,86.
Chaque touche est définie par 4 caractères, il y a 5 touches de fonctions.
On stock ces carctères dans Str1, une variable réservée aux chaines, il y en a 10 (Str0...Str9)
exemple: "JOUEOPTNQUITHELP" ->Str1
donnera : F1:JOUE F2:OPTN F3:QUIT F4:HELP
On récupère ensuite le n° de la touche choisie dans la variable X.
On peut quitter le menu avec la touche CLEAR, X renvoie alors 0
Dans cet exemple F5 sera sans effet comme les autres touches à part 2nd OFF.
Après avoir initialiser Str1 on appelle un programme basic qui lui appellera le programme en asm
après avoir vérifié que Str1 n'est pas vide et que sa longueur est un multiple de 4.
Le voici :
Code : Tout sélectionner
SOFTMENU
length(str1)->X
If X>0 and fpart(X/4)=0
Then
Asm(prgmSFMENU)
Else
" "->Xmin REM sinon erreur
End
Code : Tout sélectionner
#include "ultimate.inc"
icol = saferam4
opt = saferam4+1
optm = saferam4+2
res 5,(iy+0); annule DONE
set 2,(iy+43);fullscreen
ld a,1
ld (icol),a
call comenu
bcall(_clearrect)
readstr:
ld hl,strname
bcall(_mov9toop1)
bcall(_findsym) ; adresse du contenu str dans de
ld h,d
ld l,e ; mise dans hl
bcall(_ldhlind) ; taille str1 dans hl
ld a,l
sra a
sra a ; taille divisée par 4
inc a ; option max +1 dans optm
ld (optm),a
ld a,l
ex de,hl ; adresse str1 ->hl
inc hl
inc hl
ld de,menu ;adresse menu dans de
cpy:
ld bc,4
ldir ; copie depuis hl vers de bc octets
inc de ; on passe le zéro de fin de chaîne
sub 4
cp 0
jr nz,cpy
ld hl,menu
aff:
ld a,(icol)
ld (pencol),a
add a,19
cp 115 ; si on affiché 5 titres
jp z,inv ; branchement vers inv
ld (icol),a
ld a,57
ld (penrow),a
bcall(_vputs)
jp aff
inv:
call comenu
bcall(_invertrect) ; affichage en blanc sur fond noir
fin:
bcall(_op1set0) ; mise à 0 de op1
bcall(_getkey)
cp kclear
jr z,quit ; branchement à quit si touche clear op1 contien n° option choisie
ld (opt),a
bcall(_plus1) ; incrément de op1=1
ld a,(opt)
cp kyequ
jr z,quit ; branchement à quit si touche Y= op1 contien n° option choisie
bcall(_plus1) ;2
ld a,(opt)
cp kwindow
jr z,quit
bcall(_plus1) ;3
ld a,(opt)
cp kzoom
jr z,quit
bcall(_plus1) ;4
ld a,(opt)
cp ktrace
jr z,quit
bcall(_plus1) ;5
ld a,(opt)
cp kgraph
jr z,quit
jp fin
quit:
ld a,(optm) ; option max+1 dans a
bcall(_setxxop2) ;met a dans op2
bcall(_cpop1op2) ; compare op1 et op2
jp z,fin ; si on est egal
jp nc,fin ;ou superieur à option max+1 on ignore la touche
bcall(_stox) ;sinon stockage op1 dans X
call comenu
bcall(_clearrect) ; effacement du menu
set 5,(iy+0);remet DONE
res 2,(iy+43);annule fullscreen
ret
comenu:
ld h,57 ;coordonnées graphiques du menu
ld l,0
ld d,63
ld e,95
ret
strname:
.db strngobj,tvarstrng,tstr1,0,0
menu:
.db " ",0," ",0," ",0," ",0," ",0
.end
du menu puis le restaurer ensuite, ici les 8 dernières lignes de pixels sont détruites.
Seules les lettres et chiffres sont affichées correctement.
Je pourrai continuer ainsi à l'amélioré et à m'améliorer en assembleur
Programmer en assembleur et interagir avec le basic est pour moi très intéressant.
Ce sera mon dernier post concernant ma découverte de l'assembleur, si cela vous a donné envie tant mieux.
Si vous avez des questions, des remarques n'hésitez pas.
Merci de m'avoir suivi.
PS: Un grand merci à Epharius pour son aide concernant le codage différent des chaînes entre l'assembleur et le basic.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07