繁体   English   中英

如何在汇编中从用户输入多位数字?

[英]How to input from a user multi digit number in assembly?

我需要找到一个可以从用户那里接收超过 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寄存器,您可以检查是否溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM