2013-03-30 4 views
0

Je programme une conversation entre 2 ordinateurs en utilisant le câble série, c'est la première fois que j'utilise l'assemblage. J'ai travaillé jusqu'ici sur l'interface sans problèmes, j'utilise NASM pour compiler le fichier .asm dans les fichiers .com, puis les exécuter.mon fichier .com n'ouvrira pas le port COM 1, assemblage

Maintenant, j'ai commencé à travailler avec le port série et j'ai écrit ce simple programme pour envoyer une chaîne caractère par caractère et vérifier en utilisant hyperterminal si elle est effectivement envoyée.

org 0x0100 

    mov ah, 0 
    mov al, 0xe3   ;port parameters 
    mov dx, 0    ;port numbe (COM 1) 
    int 0x14    ;initialize port 

    mov si, msg 
    mov cx, [length] 




l: mov ah,0x1 
      lodsb   ;loads next character 
    int 0x14    ;sends character 
    loop l 

    mov ax,0x4c00 
    int 0x21 



    msg: db 'hello world' 

    length: dw 11 

Mais quand je lance le fichier .com je reçois ce msg: « le système ne peut pas ouvrir le port COM1 demandé par l'application ». J'ai lu que le faire fonctionner en compatibilité pourrait résoudre ce problème.

Alors, est-il possible d'exécuter un fichier .com en mode de compatibilité? Dois-je faire un fichier .exe pour fonctionner en mode de compatibilité? Si oui, je sais que vous devez générer un .obj avant le .exe mais nasm ne me laissera pas faire un .obj du code ci-dessus, je crois que le code a besoin d'un format différent comme une utilisation principale au lieu de l'org0x0100 mais ce n'est pas clair pour moi, comme je l'ai cherché mais tout le monde fait des choses différentes.

Répondre

1

Dans votre code, vous utilisez les interruptions dites DOS (par exemple int 0x21 pour la terminaison du programme à l'écran) donc vous devez travailler sous x86 RealMode, il y a un outil astucieux pour émuler l'application DOS (comme celle que vous utilisez) et son appelé DOSBox, s'il vous plaît l'utiliser.

+0

je vais essayer, merci – user2221424

+0

en place? , Acceptez ? autre chose ? :) –

+0

s'avère que ce "le système ne peut pas ouvrir le port com1 demandé par l'application" ne se produit que lorsque j'ai hyperterminal ouvert, je l'utilisais pour tester si les caractères étaient envoyés ou non. – user2221424