【发布时间】:2020-11-23 21:55:41
【问题描述】:
我真的是汇编语言的新手,我正在做一个假设要求你输入一个数字的作业,直到你输入一个零或直到你输入九个数字,将它们存储在堆栈中,然后在输入完数字后将数字相加,并将总和打印到屏幕上。当我组装和链接程序及其外部文件时,它没有出现任何错误;但是,当我运行代码时,它会打印一个空行(没有其他内容),让我输入一个数字,锁定并关闭 DOSBox。我一直在试图找出问题所在以及如何解决它,但我完全陷入了困境。任何帮助将不胜感激,谢谢!
.model small
.stack 100h
.data
count db 0
sum dw 0
prompt db 0ah, 0dh, 'Enter Value ', '$'
colon db ': ','$'
reply db 0ah, 0dh, 'Sum Equals: ', '$'
.code
extrn indec: proc
extrn outdec: proc
include myMacros.asm
mov ax,@data
mov ds,ax
mov cx,0
mov bx,0
push cx
;jmp L1
L1:
inc count
prtStr prompt
mov cl,count
writeCh count
prtStr colon
call indec
cmp ax,0
je S
push ax
cmp cx,9
jl L1
S:
pop dx
add bx,dx
cmp dx,0
jne S
;prtStr reply
mov ax,bx
call outdec
exit
endp
end
【问题讨论】:
-
首先,您应该看看 mymacros.asm 中的代码。仅基于名称,我猜
outdec不打算显示字符串。更有可能的是,它采用 al 中的值,将其转换为字符串并显示出来。所以mov al,prompt; call outdec不会达到你想要的效果。 -
所以现在它打印一个空白行,让我输入一个数字,然后它不会让我输入任何其他内容,但它不会关闭 DOSBox 并且光标一直在闪烁,所以你说的改变有帮助,谢谢!我猜我的问题现在出在 L1 的某个地方,但我不确定。对于要解决的问题,您还有其他建议吗?
-
修复程序时,最好按照它们出现的顺序来修复它们。有时您遇到(严重)问题#5 的原因是因为(不是很严重)问题#1 把事情搞砸了。如果您仍然没有收到提示,您可能应该追踪它。如果您打算学习汇编程序(或任何编程语言),您需要学习如何使用调试器。我不熟悉您使用的汇编程序,但我怀疑调试器会在
mov cl,count向您展示一些奇怪的事情。如果您不同时在 data 和 cx 中保留计数,而是只使用 cx 会怎样? -
我可以推荐 Turbo Debugger 2.01,它适用于 DOSBox 中的 16 位可执行文件:cs.nyu.edu/courses/fall99/V22.0201-002/debug.html