Ввод целого числа со знаком - Assembler
Формулировка задачи:
Помогите найти ошибку в функции считывания целого числа со знаком. Программа неверно считывает данные.
InputInt proc local result:word mov f, 0 call ConsoleToBuffer cmp StringLength, 3 jb ERROR mov result, 0 mov si, word ptr StringLength sub si, 3 mov cx, 1d START: cmp si, 0 je SIGN jl EXIT CONTINUE: mov al, buffer[si] cmp al, 30h jb ERROR cmp al, 39h ja ERROR xor ah, ah sub ax, 30h mul cx jo ERROR add result, ax mov ax, cx mov cx, 10d mul cx mov cx, ax dec si jmp START SIGN: cmp buffer[si], 2Dh jne CONTINUE neg result jmp EXIT ERROR: mov f, 1 ret EXIT: mov ax, result ret InputInt endp
Решение задачи: «Ввод целого числа со знаком»
textual
Листинг программы
InputInt proc xor cx,cx xor di,di mov bx,10 input: xor ax,ax int 16h cmp al,0Dh jz exit cmp al,'-' jz minus cmp al,'0' jl input cmp al,'9' jg input push ax and ax,0fh xchg ax,cx xor dx,dx mul bx add cx,ax pop ax output: int 29h jmp input minus: or cx,cx jnz input; or cx,cx jnz input; dec di jmp output exit: mov ax,cx or di,di jz ext1 not ax inc ax exit1: ret InputInt endp
Объяснение кода листинга программы
Вот что происходит в этом коде:
- Ввод целого числа со знаком.
- Проверка на ноль. Если введенный символ равен 0, то происходит переход к выходу.
- Проверка на знак минус. Если введенный символ равен -, то происходит переход к блоку обработки минуса.
- Проверка на цифры от 0 до 9. Если введенный символ меньше или равен 0, то происходит переход к блоку ввода. Если введенный символ больше 9, то происходит переход к блоку ввода.
- Обработка числа. Цифра умножается на 10 введенное число, и результат добавляется к сумме.
- Проверка на ноль. Если сумма введенных чисел равна 0, то происходит переход к выходу.
- Вывод числа. Выводится введенное число.
- Возврат в начало ввода. Программа возвращается к началу ввода для обработки следующего числа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д