Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut [SASM] Je bloque sur les interruptions

    Bonjour à tous,

    Pour un travail d'étudiant, je dois réaliser un petit programme avec SASM.
    Le problème étant que je n'arrive pas à faire fonctionner les interruptions et malgré mais recherches je ne trouve pas de solutions..
    En espérant que vous pourrez m'aider ! :)

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    %include "io.inc"
     
    section .text
    global CMAIN
    CMAIN: 
        mov ah, 00h
        INT 16h
            cmp al, 's'
                JE Test
        ret
     
    Test:
        PRINT_STRING 's'
        ret
    Le programme bloque vraiment à l'interruption, il refuse de le passer.
    Et ça bloque aussi pour les INT10 et 21.
    (J'ai raccourci le code complet pour aller à l'endroit qui ne marchait pas)

  2. #2
    Expert éminent
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    2 439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 439
    Points : 7 341
    Points
    7 341

    Par défaut

    Ben déjà il faut savoir quel plateforme tu vise , tu met ton topic pour la section x86 32/64 bits.

    Mais ton code et ton explication laisse suggérer que c'est du x86 16 bits pour MD-DOS non ?
    Voilà un Hello world simple qui compile avec NASM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    org 0x0100
     
    mov dx, msg1
    mov ah, 0x9
    int 21h
    ret
     
    msg1: db "Hello World", 10, 13, '$'
    Et voici pour les commande pour le compiler et l’exécuter sur Linux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nasm test.asm -o test.com
    dosbox test.com
    PS: inutile de nous préciser ton IDE , tu pourrais utiliser Geany , Notepad++ ou autre que ça serait pareil niveau code.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    En effet, c'est du 16 bits, je me suis trompé désolé ^^'.
    Ensuite merci de ta réponse mais je ne demande pas comment faire un "Hello World!" mais bien comment régler un soucis que je rencontre avec les interruptions (INT10, 16 et 21).
    En clair pour résumer, je dois faire une sorte de space invaders donc j'ai besoin de pouvoir déplacer un curseur dans la console malgré que je pense avoir compris la logique, mon code s'arrête tout simplement à l'interruption.
    J'ai repris mon code pour juste tester si c'était l'ensemble de mon code qui avais un problème ou juste au niveau de l'int 16h, et cela donne le code que j'ai partagé.
    Je ne suis pas le seul de ma classe à rencontrer ce problème et c'est pourquoi je me tourne vers un forum, je n'y suis pas forcément habitué d'où le fait que je me sois trompé de section (Encore désolé).
    En espérant avoir un peu mieux expliquer le problème :)
    (J'ai actuellement moins de 8 heures d'assembleur à mon actif donc veuillez excuser mes lacunes)

  4. #4
    Expert éminent
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    2 439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 439
    Points : 7 341
    Points
    7 341

    Par défaut

    Justement je ne vois pas où est le problème , vu que je test ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    org 0x0100
     
    mov ah, 00h
    int 16h
    cmp al, 's'
    jne Test
     
    mov dx, msg1
    mov ah, 0x9
    int 21h
    Test:
    ret
     
    msg1: db "Hello World", 10, 13, '$'
    et j'attends bien une touche et si j’appuie sur S alors le message s'affiche.

    mon code s'arrête tout simplement à l'interruption
    Int 16h avec l'argument ah = 0 attend un événement clavier donc c'est normal.
    peut être que ah = 1 est ce que tu recherche ?

  5. #5
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    janvier 2005
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2005
    Messages : 699
    Points : 1 994
    Points
    1 994

    Par défaut

    salut,

    ce programme est utilisé sur une machine virtuelle ? un émulateur ?

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    @Kannagi :
    Justement, l'interruption clavier se produit si j'appuie sur une touche donc avec un 00h, je récupère la valeur de la touche que j'ai pressé dans le registre AL, non ?
    Je viens de testé avec 01h et ça ne marche pas non plus, il bloque vraiment sur l'int.
    Même en faisant du copier/coller de ton code le problème subsiste..

    @Forthman :
    Non je l'utilise sur ma machine directement, tu penses que cela à un impact et qu'il vaudrait mieux que j'utilise une vm ?

  7. #7
    Expert éminent
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    2 439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 439
    Points : 7 341
    Points
    7 341

    Par défaut

    Mon code marche ,je l'ai testé
    Ben sinon tu dois utiliser DosBox pour l’exécuter...

  8. #8
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    janvier 2005
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2005
    Messages : 699
    Points : 1 994
    Points
    1 994

    Par défaut

    Sur un os moderne ton code ne peut pas fonctionner.
    Comme le dis Kannagi, tu devrais utiliser dosbox (le plus simple à mon avis) ou un émulateur avec un DOS (pour l'int 21h)

Discussions similaires

  1. théorie sur les interruptions
    Par morpheusmg dans le forum Débuter
    Réponses: 5
    Dernier message: 03/07/2011, 11h51
  2. IMPDP bloqué sur les index
    Par debdba dans le forum Oracle
    Réponses: 2
    Dernier message: 07/02/2011, 10h55
  3. [8086] Explications sur les interruptions DOS
    Par jaadoo10 dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 30/11/2010, 16h42
  4. Dictionnaire sur les interruptions et librairies
    Par willom dans le forum Assembleur
    Réponses: 3
    Dernier message: 28/12/2006, 18h00
  5. Question sur les interruptions en mode protégé
    Par Pragmateek dans le forum Assembleur
    Réponses: 9
    Dernier message: 26/10/2006, 23h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo