Alors déja je me rends compte que le little endian que je ne trouvais pas logique jusqu'a maintenant, a finalement beaucoup de sens pour les accès mémoire a différente taille (octet, mot, long)
Ensuite, j'ai mimé les syntaxes d'assembleur que je connais (68k principalement) et je me rends compte en fait que certaine syntaxe ne sont pas logique d'un point de vue execution.
Par exemple:
move.l #1234,d0 ; d0 = 1234
move.l #machin,d0 ; d0 = 1234
move.l 1234,d0 ; d0 = 5678
move.l machin,d0 ; d0 = 5678
jmp machin ; jump a 1234
move.l #machin,a0 ; a0 = 1234
move.l (a0),d0 ; d0 = 5678
jmp (a0) ; jump a 1234
org 1234
machin: dc.l 5678
D'un point de vue assembleur, j'ai mon parseur d'opcode d'un coté et mon parseur d'arguments de l'autre.mon parseur d'arguments detecte le type de donnée en fonction de la syntaxe de l'argument et pas en fonction de l'opcode !
du coup, entre "move.l machin,d0" et "jmp machin", pour moi machin vaut la même chose, (idem pour (a0))
mais dans la logique des assembleurs courant, c'est plutôt l'opcode qui determine le type de donnée.
Je ne m'étais jamais posé la question jusqu'a présent, mais maintenant je trouve pas ça logique.
(enfin, en vrai si, "jmp (a0)" m'a toujours perturbé, car j'aurais plutôt écrit "jmp a0" naturellement)
Pour avoir une syntaxe logique, je proposerais ça:
move.l #1234,d0 ; d0 = 1234
move.l #machin,d0 ; d0 = 1234
move.l 1234,d0 ; d0 = 1234
move.l machin,d0 ; d0 = 1234
move.l (1234),d0 ; d0 = 5678
move.l (machin),d0 ; d0 = 5678
jmp machin ; jump a 1234
jmp a0 ; jump a 1234
jmp (machin) ; jump a 5678
jmp (a0) ; jump a 5678
Qu'en pensez vous ?