Partage
  • Partager sur Facebook
  • Partager sur Twitter

[NASM] lecture d'une saisie utilisateur

Sujet résolu
    12 octobre 2020 à 13:07:48

    Bonjour, j'ai commencé à apprendre le NASM et je sais déjà stocker des valeurs dans la RAM et les afficher. Je sais également les comparer. Maintenant, j'ai envie d'apprendre à lire une donnnée (string) saisie par l'utilisateur (comme avec la fonction scanf() en c). Voici un code montrant mon niveau actuel (je comprend la totalité des lignes suivantes)

    org 0x0100
    	
    	init:
    		xor bh, bh ; met la valeur 0 dans bh
    		mov cx, 1 ; met la valeur 1 dans cx pour repeter chaque caractère une seul fois
    		mov ah, 0x0E ; numéro de fonction
    		mov edx, text ; met l'adresse du début de la chaine de caractère dans edx
    
    	traitement:
    		mov al, [edx] ; met la valeur stocker à l'adresse contenu dans edx dans al qui est le caractère a afficher
    		or al, al ; compare al pour positionner les flags sans changer la valeur de al
    		jz sortie ; si le resultat de la comparaison nous donne que al == 0, alors saute au label 'sortie'
    		int 0x10 ; appel la fonction d'affichage d'un caractère
    		inc edx ; increment edx pour aller a l'adresse suivante
    		jmp traitement ; retourne au debut de 'traitement' pour recommencer le cycle
    
    	sortie:
    		ret ; quitte le programme
    
    	text : db "Hello World !", 0


    Merci d'avance



    -
    Edité par AyrtonLachat 12 octobre 2020 à 13:08:34

    • Partager sur Facebook
    • Partager sur Twitter
      17 octobre 2020 à 18:21:56

      Vu que ça semble être du MS-DOS :
      https://www.gladir.com/LEXIQUE/INTR/int21f01.htm

      Sinon pour :

      mov cx, 1 ; met la valeur 1 dans cx pour repeter chaque caractère une seul fois

      Non int 10h /ah = 0xE , ne prend pas CX en paramètre , donc ici cx ne sert à rien

      Et tout programme en .com doit se terminer par

      int 20h



      -
      Edité par HelbaSama 17 octobre 2020 à 18:25:47

      • Partager sur Facebook
      • Partager sur Twitter
        26 octobre 2020 à 10:43:16

        Bonjour.

        Dans le source du programme, l'instruction or est utilisée pour voir si la valeur de al est à zéro.

        Il est plus compréhensible à mon avis d'utiliser cmp al,0 qui fait la même chose.

        • Partager sur Facebook
        • Partager sur Twitter
          26 octobre 2020 à 18:45:26

          "Il est plus compréhensible à mon avis d'utiliser cmp al,0 qui fait la même chose."
          Oui , mais c'est un usage assez courant de ne pas utiliser des cmp , pas mal d'optimisation du compilo utilise justement les flag et donc évite le cmp ;)

          Enfin je code quasiment jamais sur le x86 , mais c'est courant d'éviter le cmp et d'utiliser les flags pour optimiser (pour les boucle notamment)

          • Partager sur Facebook
          • Partager sur Twitter

          [NASM] lecture d'une saisie utilisateur

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown