2009-04-15 8 views
1

Le script suivant fonctionne correctement si je le tape ligne par ligne dans le débogage. Lorsque je le copie dans un fichier appelé script.txt, il raccroche après "entrer 3 chiffres". Je le lance comme ceci:exécutant le script DOS Debug

D:> debug < script.txt

le fichier est:

a 
mov cx, 3 
jmp 0119 
db 0d,0a,"enter 3 numbers",0d,0a,"$" 
mov dx, 0105 
mov ah, 09 
int 21h 
mov ah, 01 
int 21h 
and al, 0f 
add bl, al 
mov dl, 0a 
mov ah, 02 
int 21h 
loop 0120 
jmp 013a 
db 0d,0a,"sum: ","$" 
mov dx,0132 
mov ah, 09 
int 21h 
or bl, 30 
mov dl, bl 
mov ah, 02 
int 21h 
mov ax, 4c00 
int 21h 

g 

ce que je fais mal? Toutes les astuces ou liens appréciés. keith

Répondre

5

Vous avez redirigé l'entrée vers le débogage pour être à partir du script, pas à partir de la console, donc le débogage ne reçoit jamais vos frappes Le programme est suspendu, attendant plus de données venant du script.

Si vous mettez 3 chiffres après la « g » dans le script, il devrait continuer

+0

merci pour l'explication, jdigital, Michael, votre suggestion fonctionne, mais puis-je faire les deux? Je veux que l'utilisateur de la console fournisse l'entrée, mais je ne veux pas qu'ils aient à taper le code entier pour l'exécuter à nouveau. Le script peut-il rediriger vers la console pour la saisie? – Keith

+0

Je ne crois pas qu'il existe un moyen simple de. . . vous pourriez être en mesure de rouvrir CON et remplacer le handle stdin avec cela en quelque sorte, mais je n'ai aucune idée - je n'ai pas codé pour DOS depuis l'administration Clinton – Michael

+0

Oubliez ce dernier commentaire de la mienne! – jdigital

2

Vous demandez au débogage de prendre toutes ses entrées à partir de script.txt, donc lorsque votre programme essaie de lire les nombres à partir de l'entrée standard, il lit à partir du fichier, pas de la console.

0

bonnes explications. Merci Michael, votre suggestion a fonctionné, mais je veux obtenir des commentaires de la console et toujours exécuter un script afin de ne pas avoir à taper le code entier pour l'exécuter à nouveau. Merci jdigital!, c'est la réponse que je cherche. En utilisant vos notes (dans les commentaires ci-dessus), j'ai pu faire un script de travail simple:

a 
mov cx, 3 
jmp 0119 
db 0d,0a,"enter 3 numbers",0d,0a,"$" 
mov dx, 0105 
mov ah, 09 
int 21h 
mov ah, 0  ; for console input 
int 16h  ; use int 16h function 0. 
mov dl,al  ; echo input to screen 
mov ah,02 
int 21h 
and al, 0f 
add bl, al 
mov dl, 0a 
mov ah, 02 
int 21h 
loop 0120 
jmp 0140 
db 0d,0a,"sum: ","$" 
mov dx,0138 
mov ah, 09 
int 21h 
or bl, 30 
mov dl, bl 
mov ah, 02 
int 21h 
mov ax, 4c00 
int 21h 

g 
0
enter 3 numbers 

somme: 9

Seam votre programme ne fonctionne pas. .. peut-être est besoin d'utiliser la pile, pas regs.