我需要找到一个中断,它可以从用户那里接收一个多于一位数的数字。代码***
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条答案
按热度按时间to94eoyn1#
在大多数情况下,如果将输入作为字符串接收,然后转换为整数,则会容易得多。
int 21h/ah=0ah
可以将缓冲的输入读入指向DS:DX
的字符串。一旦你有了这个字符串,你就可以把它转换成一个整数,这听起来像是一个家庭作业问题,所以这里不给你它的代码,而是一个高级算法,用来把一个ASCII字符串转换成一个实际的整数(伪代码),这个字符串包含一个以-
N
为基数的数字:健壮的代码也会检查溢出和无效字符,你很幸运,因为在ASCII中,代表数字的字符('0'...'9')是连续存储的,x86有一个
FLAGS
register,你可以检查溢出。