如何从用户名中输入一位以上的数字?

时间:2019-02-14 18:01:42

标签: assembly dos x86-16

我需要找到一个可以从用户那里接收到超过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”,并且无限循环将停止和。 但是,我几乎确信我已经看到了一个代码,该代码通过中断执行相同的操作。

我想停止使用此块,并使用效果更好的短中断

1 个答案:

答案 0 :(得分:3)

在大多数情况下,如果将输入作为字符串输入然后转换为整数,则操作会容易得多。 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,您可以检查是否溢出。