Ввод целого числа со знаком - 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

Объяснение кода листинга программы

Вот что происходит в этом коде:

  1. Ввод целого числа со знаком.
  2. Проверка на ноль. Если введенный символ равен 0, то происходит переход к выходу.
  3. Проверка на знак минус. Если введенный символ равен -, то происходит переход к блоку обработки минуса.
  4. Проверка на цифры от 0 до 9. Если введенный символ меньше или равен 0, то происходит переход к блоку ввода. Если введенный символ больше 9, то происходит переход к блоку ввода.
  5. Обработка числа. Цифра умножается на 10 введенное число, и результат добавляется к сумме.
  6. Проверка на ноль. Если сумма введенных чисел равна 0, то происходит переход к выходу.
  7. Вывод числа. Выводится введенное число.
  8. Возврат в начало ввода. Программа возвращается к началу ввода для обработки следующего числа.

Оцени полезность:

8   голосов , оценка 4.875 из 5
Похожие ответы