Réponse trouvée sur ce site
http://erci.no-ip.com/origine/static/pdf/asm.htm
Les deux lignes suivantes,
mov ax, data
mov ds, ax
servent à initialiser le registre DS. Celui-ci pointe vers le PSP au début du programme mais nous voulons le faire pointer vers notre segment de données appelé “data”. Cela est nécessaire puisque la fonction 9 de l’interruption 21h attend l’adresse de la chaîne dans le couple DS:DX et que notre message se trouve dans le segment de données.
La première instruction charge l’adresse du segment “data” dans AX. La seconde transfère cette valeur de AX dans DS. Mais pourquoi diable utiliser AX comme intermédiaire ? Après tout, on pourrait écrire :
mov ds, data
Eh bien non ! Pour la simple raison que DS est un registre de segment et qu’en tant que tel on ne peut pas lui charger de valeur immédiate.
On appelle « valeur immédiate » toute constante tapée directement dans l’instruction elle-même. Exemples de chargement de valeurs immédiates :
mov ax, 135 ;charge 135 dans AX
mov bx, offset message ;charge l’offset de message dans BX
mov bx, offset fin – offset debut ;charge le nombre d’octets entre fin et debut dans BX
mov es, 10 ;instruction illicite car ES est un registre de segment !Remarque : une autre possibilité aurait été d'écrire : “PUSH AX” (empiler AX) puis “POP DS”(dépiler le dernier nombre empilé et le placer dans DS).
Voila.