Assembleur sous DOS avec NASM

Assembleur sous DOS avec NASM - ASM - Programmation

Marsh Posté le 30-09-2004 à 14:13:07    

Voici deux code a priori identiques, si ce n'est la chaine de caractères qui diffère :

ORG 100h
 
SECTION .DATA
message DB 'Hello, World !','$'
 
SECTION .TEXT
 MOV AX,0900h
 MOV DX,message
 INT 21h
 
 MOV AX,4C00h
 INT 21h


ORG 100h
 
SECTION .DATA
message DB 'Tapez un caractere !','$'
 
SECTION .TEXT
 MOV AX,0900h
 MOV DX,message
 INT 21h
 
 MOV AX,4C00h
 INT 21h


 
Seulement, voila : le premier se compile et fonctionne (il affiche "Hello, World !" ), mais le deuxième se compile, puis à l'excution affiche plein de caractères incompréhensibles, puis fait planter la fenêtre DOS.
Voici les différentes hypothèses que j'ai envisagé, dont aucune ne s'est avérée exacte :

  • caractères accentués : il n'y en a pas
  • erreur de frappe dans le reste du code : non, un simple changement dans la chaine de caractère suffit à observer la différence
  • problème de "taille", j'ai essayé de remplacer DB par DW mais ça ne change rien

Alors, quel est votre avis ?
Je précise que je débute dans la programmation en assembleur.

Reply

Marsh Posté le 30-09-2004 à 14:13:07   

Reply

Marsh Posté le 30-09-2004 à 15:54:23    

essaie d'insérer un  

Code :
  1. mov AX,OC00h
  2. int 21h


juste avant d'écrire le message (ça flushe le buffer de sortie)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-09-2004 à 18:19:31    

tiens, j'avais pas vu ça :

Code :
  1. SECTION .DATA
  2. message DB 'Tapez un caractere !','$'


essaie plutot ça :

Code :
  1. SECTION .data // en minuscules le .data
  2. message DB 'Tapez un caractere !',13,10,'$' // t'as oublié la fin de ligne
  3. SECTION .text // le .text en minuscules aussi
  4. [...]



---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-09-2004 à 19:17:32    

merci en effet c'était bien un problème de casse
n'empêche que je comprends toujours pas pourquoi ça marchait avec "Hello, World !"

Reply

Marsh Posté le 30-09-2004 à 20:06:00    

Dans l'élan, je pose une autre question : comment demander une chaine de caractères à l'utilisateur (toujours sous DOS) ?
J'ai essayé avec ce code :

(...)
chaine  RESB 20
(...)
MOV AX,0A00h
LEA DX,[chaine]
INT 21h
(...)


Mais que faire après ? Lorsque j'essaie d'afficher le contenu de nom, je fais planter le DOS.


Message édité par seccas le 30-09-2004 à 20:06:29
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed