Ввод целого положительного или отрицательного числа
Категория: Assembler
2012-02-12 14:54:43
Введенное число будет находиться в 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
Поделиться: