assembly 如何在汇编中输入用户的多位数?

g6ll5ycj  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(107)

我需要找到一个中断,它可以从用户那里接收一个多于一位数的数字。代码***

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”时,无限循环停止。然而,我几乎确信我已经看到了一个用中断代替做同样事情的代码。
我想停止使用此块,并使用短中断,这样可以更好地完成工作

to94eoyn

to94eoyn1#

在大多数情况下,如果将输入作为字符串接收,然后转换为整数,则会容易得多。int 21h/ah=0ah可以将缓冲的输入读入指向DS:DX的字符串。
一旦你有了这个字符串,你就可以把它转换成一个整数,这听起来像是一个家庭作业问题,所以这里不给你它的代码,而是一个高级算法,用来把一个ASCII字符串转换成一个实际的整数(伪代码),这个字符串包含一个以-N为基数的数字:

accum = 0
i = 0
while(string[i] != '\r')
    accum *= N
    accum += (string[i] - '0')
    i++

健壮的代码也会检查溢出和无效字符,你很幸运,因为在ASCII中,代表数字的字符('0'...'9')是连续存储的,x86有一个FLAGS register,你可以检查溢出。

相关问题