我需要找到一个可以从用户那里接收到超过1位数字的中断。
;码
mov [0],0
mov si,0
lop:
mov ah,1
int 21h
cmp al,'q'
je finishedInput
xor ah,ah
add [word ptr si], ax
jmp lop
finishedInput:
我已经尝试过每次都使用
mov ah,1
int 21h
直到用户按下“ q”组合,然后无限循环才会停止和。
但是,我几乎确信我已经看到了一个代码,该代码在执行中断时执行相同的操作。
我想停止使用此块并使用效果更好的短中断
最佳答案
在大多数情况下,如果将输入作为字符串输入然后转换为整数,则操作会容易得多。 int 21h/ah=0ah
可以将缓冲的输入读入指向DS:DX
的字符串中。
一旦有了该字符串,就可以将该字符串转换为整数。这听起来像是一个作业问题,因此,不是为您提供代码,而是一种高级算法,用于将包含以10为底的数字的ASCII字符字符串转换为实际整数(伪代码):
accum = 0
i = 0
while(string[i] != '\r')
accum *= 10
accum += (string[i] - '0')
i++
健壮的代码还将检查溢出和无效字符。您在这里很幸运,因为用ASCII表示数字('0'...'9')的字符是连续存储的,并且x86具有
FLAGS
register,您可以检查是否溢出。