如何在汇编中输入多个用户号?

问题描述 投票:2回答:1

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

我想停止使用这个块并使用更短的中断来更好地工作

assembly dos x86-16
1个回答
3
投票

在大多数情况下,如果将输入作为字符串输入然后转换为整数,则会更容易。 int 21h/ah=0ah可以将缓冲输入读入指向DS:DX的字符串。

完成后,您可以获取该字符串并将其转换为整数。这听起来像是一个家庭作业问题,所以不是给你代码,而是一个高级算法,用于将包含base-10中的数字的ASCII字符串转换为实际整数(伪代码):

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

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

© www.soinside.com 2019 - 2024. All rights reserved.