2009-04-15 120 views
1

如果我在调试中一行一行地输入它,以下脚本可以正常工作。当我将它复制到名为script.txt的文件时,它会在“输入3个数字”后挂起。我运行它,像这样:运行DOS调试脚本

d:>调试< script.txt

该文件是:

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 

我究竟做错了什么?任何提示或链接表示赞赏。 keith

回答

5

您将重定向的输入调试为来自脚本而不是控制台,因此调试永远不会收到您的按键程序正在挂起,正在等待脚本中输入更多数据。

如果你把3个数字在脚本中的“G”后,就应该继续

+0

感谢您的解释,jdigital,Michael,您的建议有效,但我可以同时做这两件事吗?我希望控制台用户提供输入,但我不希望他们必须键入整个代码才能再次运行它。脚本是否可以重定向回控制台进行输入? – Keith 2009-04-15 22:29:11

2

您正在告诉debug从script.txt获取所有输入,因此当您的程序尝试从标准输入读取数字时,它将从文件中读取数据,而不是从控制台读取数据。

0

好解释。 感谢迈克尔,您的建议工作,但我想从控制台获得输入,并仍然运行脚本,所以我不必键入整个代码再次运行它。 谢谢jdigital!,这就是我正在寻找的答案。使用(以上评论)你提示我可以做一个简单的工作脚本:

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 

总和:9

缝程序不能正常工作。 ..也许是需要使用堆栈,而不是注册表。