运行DOS调试脚本

时间:2009-04-15 22:01:05

标签: debugging dos

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

D:> debug< 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
我做错了什么?任何提示或链接赞赏。 基思

4 个答案:

答案 0 :(得分:5)

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

如果你在脚本中的'g'之后放了3个数字,它应该继续

答案 1 :(得分:2)

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

答案 2 :(得分:0)

好的解释。 感谢Michael ,您的建议有效,但我想从控制台获取输入并仍然运行脚本,因此我不必输入整个代码再次运行它。 谢谢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

答案 3 :(得分:0)

enter 3 numbers

9  7   9

总和:9

找你的程序不工作......也许需要使用堆栈,而不是regs。