Ввод целого положительного или отрицательного числа

Введенное число будет находиться в ax. Изменяя число - основание сс, можно вводить числа в различных системах до десятеричной.

code: #assembler
InputInt proc 
 
        mov ah,0ah
        xor di,di
        mov dx,offset buff ; аддрес буфера
        int 21h ; принимаем строку
        mov dl,0ah
        mov ah,02
        int 21h ; выводим перевода строки
        
; обрабатываем содержимое буфера
        mov si,offset buff+2 ; берем аддрес начала строки
        cmp byte ptr [si],"-" ; если первый символ минус
        jnz ii1
        mov di,1  ; устанавливаем флаг
        inc si    ; и пропускаем его
ii1:
        xor ax,ax
        mov bx,10  ; основание сc
ii2:
        mov cl,[si] ; берем символ из буфера
        cmp cl,0dh  ; проверяем не последний ли он
        jz endin
        
; если символ не последний, то проверяем его на правильность
        cmp cl,'0'  ; если введен неверный символ <0
    jl er
    cmp cl,'9'  ; если введен неверный символ >9
    ja er
 
        sub cl,'0' ; делаем из символа число 
        mul bx     ; умножаем на 10
        add ax,cx  ; прибавляем к остальным
        inc si     ; указатель на следующий символ
        jmp ii2     ; повторяем
 
er:   ; если была ошибка, то выводим сообщение об этом и выходим
        mov dx, offset error
        mov ah,09
        int 21h
        int 20h
 
; все символы из буфера обработаны число находится в ax
endin:
        cmp di,1 ; если установлен флаг, то
        jnz ii3
        neg ax   ; делаем число отрицательным
ii3:
        ret
 
error db "incorrect number$"
buff    db 6,7 Dup(?)
InputInt endp

автор: Goodwin98

Поделиться:

Похожие статьи: