Нужна процедура, которая сообщает об ошибке при вводе букв вместо цифр - Assembler

Узнай цену своей работы

Формулировка задачи:

привет. У меня программа , которая переводит введеное в 10с.с число в 2 с.с, но не получается процедура,которая сообщает об ощибке,при вводе букв вместо цифр. Кидаю код основы, а ниже,после "////////////" процедура проверки. Буду признательна,если скажете,в чем дело (вставляла в код,но программа работала при любом вводе,даже неверном)
Листинг программы
  1. STAK SEGMENT STACK
  2. DB 256 DUP (?)
  3. STAK ENDS
  4. DATA SEGMENT
  5. BUF DB 5, 00, 6 DUP ('$')
  6. OUTBUF DB 13, 10, 16 DUP ('0'), '$'
  7. DATA ENDS
  8. CODE SEGMENT
  9. ASSUME CS:CODE, DS:DATA, SS:STAK
  10. READ PROC
  11. MOV AH, 0AH
  12. LEA DX, BUF
  13. INT 21H
  14. RET
  15. READ ENDP
  16. PRINT PROC
  17. MOV AH, 09H
  18. LEA DX, OUTBUF
  19. INT 21H
  20. RET
  21. PRINT ENDP
  22. STR_TO_NUM PROC
  23. MOV DI, 0
  24. LEA BX, BUF + 1
  25. MOV CX, [BX]
  26. XOR CH, CH
  27. MOV SI, 1
  28. M1: PUSH SI
  29. MOV SI, CX
  30. MOV AX, [BX+SI]
  31. XOR AH, AH
  32. POP SI
  33. SUB AX, 30H
  34. MUL SI
  35. ADD DI, AX
  36. MOV AX, SI
  37. MOV DX, 10D
  38. MUL DX
  39. MOV SI, AX
  40. LOOP M1
  41. STR_TO_NUM
  42. ENDP
  43. DEC_TO_BIN PROC
  44. MOV BX, DI
  45. LEA SI, OUTBUF + 2
  46. MOV CX, 10h
  47. DB2: SHL BX, 1
  48. JC DB1
  49. MOV BYTE PTR [SI], '0'
  50. JMP DB3
  51. DB1: MOV BYTE PTR [SI], '1'
  52. DB3: INC SI
  53. LOOP DB2
  54. RET
  55. DEC_TO_BIN ENDP
  56.  
  57. START:
  58. XOR AX, AX
  59. MOV BX, DATA
  60. MOV DS, BX
  61. CALL READ
  62. CALL STR_TO_NUM
  63. CALL DEC_TO_BIN
  64. CALL PRINT
  65.  
  66. MOV AH, 4CH
  67. INT 21H
  68. CODE ENDS
  69. END START
  70. //////////////////////////////////////////////////
  71. cifra proc
  72. error: txt db 0dh,0ah, "error", 0dh,0ah, "$"
  73. lea DX, txt
  74. end cifra

Решение задачи: «Нужна процедура, которая сообщает об ошибке при вводе букв вместо цифр»

textual
Листинг программы
  1. cifra proc
  2.         mov     cx, BUF+1
  3.         lea     si, BUF+2
  4.         jcxz    @@Error
  5.  
  6. @@While:
  7.         mov     al, [si]
  8.         inc     si
  9.         cmp     al, '0'
  10.         jb      @@Error
  11.         cmp     al, '9'
  12.         ja      @@Error
  13.         loop    @@While
  14. @@Ok:
  15.         ret
  16. @@Error:
  17.         MOV AH, 0AH  
  18.         LEA DX, error
  19.         INT 21H
  20.         ret
  21. cifra endp

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

Список элементов:

  1. cifra proc - метка процедуры
  2. mov cx, BUF+1 - перемещение указателя на первый символ в буфере в регистр cx
  3. lea si, BUF+2 - перемещение указателя на второй символ в буфере в регистр si
  4. jcxz @@Error - если значение регистра cx равно нулю, то переход к метке @@Error
  5. mov al, [si] - перемещение значения символа в регистр al
  6. inc si - увеличение значения регистра si на единицу
  7. cmp al, '0' - сравнение значения регистра al со значением '0'
  8. jb @@Error - если значение регистра al меньше '0', то переход к метке @@Error
  9. cmp al, '9' - сравнение значения регистра al со значением '9'
  10. ja @@Error - если значение регистра al больше '9', то переход к метке @@Error
  11. loop @@While - цикл, выполняющийся до тех пор, пока не будет выполнено условие @@While
  12. mov al, [si] - перемещение значения символа в регистр al
  13. inc si - увеличение значения регистра si на единицу
  14. cmp al, '0' - сравнение значения регистра al со значением '0'
  15. jb @@Error - если значение регистра al меньше '0', то переход к метке @@Error
  16. cmp al, '9' - сравнение значения регистра al со значением '9'
  17. ja @@Error - если значение регистра al больше '9', то переход к метке @@Error
  18. loop @@While - цикл, выполняющийся до тех пор, пока не будет выполнено условие @@While
  19. mov al, [si] - перемещение значения символа в регистр al
  20. inc si - увеличение значения регистра si на единицу Примечание: В данном коде происходит проверка введенных пользователем символов на предмет их принадлежности к цифрам от 0 до 9. Если встречаются символы, не являющиеся цифрами, то выводится сообщение об ошибке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы