Как ввести с номера пользователя более одной цифры в сборке? - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно найти прерывание, которое может получить от пользователя номер с более чем 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 голосов
/ 14 февраля 2019

В большинстве случаев намного проще, если входные данные воспринимаются как строка, а затем преобразуются в целое число.int 21h/ah=0ah может прочитать буферизованный ввод в строку, указанную в DS:DX.

Получив эту строку, вы можете взять эту строку и преобразовать ее в целое число.Это звучит как домашнее задание, поэтому вместо того, чтобы дать вам код, здесь приведен алгоритм высокого уровня для преобразования строки символов ASCII, содержащей число в base-10, в фактическое целое число (псевдокод):

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

Надежный код проверяет переполнение и недопустимые символы.Здесь вам повезло, поскольку в ASCII символы, представляющие числа ('0' ... '9'), сохраняются последовательно, а x86 имеет регистр FLAGS , который вы можете проверить на переполнение.

...