1

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

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

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

4

4 回答 4

5

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

如果您在脚本中的“g”之后放置 3 个数字,它应该会继续

于 2009-04-15T22:07:54.390 回答
2

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

于 2009-04-15T22:07:01.430 回答
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
于 2009-04-15T22:20:26.547 回答
0
enter 3 numbers

9 7 9

总和:9

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

于 2011-01-22T22:35:08.927 回答