Pour ton deuxième problème la manière propre de faire est celle que tu as décrite. De toute manière ce n'est pas vraiment utile de faire comme tu le fais, si tu veux un tableaux d'éléments managés par le compilo alors tu le laisses faire. Il sera assez intelligent pour les placer à la suite, par contre tu vas passer par une indirection plutôt qu'un move + add + fetch en mettant que tu as calculé à l'avance les emplacements des 0 dans ta chaîne.
Tu peux faire ça assez proprement en C de toute façon:
const char *texte = "chaine1\0chaine2\0chaine3";
const char *texte1 = texte, texte2 = texte1 + 8, texte3 = texte2 + 8;
Ce qui est équivalent à (pardonne-moi la syntaxe pourrie, je connais pas bien le 68k et ça fait longtemps que je m'y étais intéressé en plus):
texte:
dc.b "chaine1",0
dc.b "chaine2",0
dc.b "chaine3",0
; crée 3 pointeurs dans a0 à a2
move.l #texte, a0
move.l #(texte + 8), a1
move.l #(texte + 16), a2