goyo wrote: ↑Fri Dec 11, 2020 6:47 pm
Cette instruction n'est pas possible en assembleur.
Il est possible, en certaines circonstances, de mettre des expressions arithmétiques dans des instructions assembleur.
Par exemple:
Code: Select all
__auto_1
lda $245
sta jmp_old_handler+1
__auto_2
lda $246
sta jmp_old_handler+2
ou bien:
Code: Select all
#define SCREEN_WIDTH 40
#define ADR_BASE_LORES_SCREEN 48040
sta ADR_BASE_LORES_SCREEN+SCREEN_WIDTH*4 , x
ou encore:
Code: Select all
#define DISPLAY_ADRESS $BB80
ScreenAdressLow
.byt <(DISPLAY_ADRESS+40*0)
Ce qu'il faut comprendre, c'est à quel moment l'évaluation de l'expression est faite.
Dans tous les exemples ci-dessus, les grandeurs manipulées dans l'expression arithmétique sont des constantes (valeurs en dur, ou via des #define ou adresse mémoire).
L'assembleur peut donc les évaluer au moment de fabriquer le code machine.
Il produira une instruction en langage machine contenant le résultat de l'opération. Ce n'est pas le processeur 6502 qui va faire l'opération.
Dans le cas que tu montres, le "y-3" ne peut pas être évaluer au moment de l'assemblage car le résultat dépend de y au moment de l'exécution de l'instruction. l'assembleur ne peut donc pas produire une instruction en langage machine qui contienne le résultat de l'opération.
Le seul moyen consiste donc à faire faire l'opération au 6502 comme tu le fais avec les dey.