Ввод 3-х значного числа.

Тема в разделе "WASM.BEGINNERS", создана пользователем bor1k, 16 сен 2010.

  1. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    Нужно в общем ввести 3х значное число.
    Получился такой код (компилятор MASM)

    При проверке результат неточный к примеру вводишь 253, а в регистре dx 243 или 263

    В чем ошибка?
    Код (Text):
    1. .model small
    2.  
    3. .code
    4.  
    5. start:
    6. mov ah,1
    7. int 21h
    8. sub al,30h
    9. mov cl,al
    10. int 21h
    11. sub al,30h
    12. mov bl,al
    13. mov al,cl
    14. mov ah,0
    15. mov bl,10
    16. mul bl
    17.  
    18. add ax,cx
    19.  
    20. mov dx,0
    21. mov bx,10
    22. mul bx
    23. push ax
    24.  
    25. mov ah,1
    26. int 21h
    27. sub al,30h
    28. mov dl,al
    29. pop ax
    30. add ax,dx
    31. mov dx,ax
    32.  
    33. mov ah,4Ch
    34. int 21
    35.  
    36. end start
     
  2. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    Сам разобрался)

    Код (Text):
    1. .model small
    2.  
    3. .code
    4.  
    5. start:
    6. mov ah,1
    7. int 21h
    8. sub al,30h
    9. mov cl,al
    10.  
    11. int 21h
    12. sub al,30h
    13. mov bl,al
    14. mov ah,0
    15. mov ax,cx
    16.  
    17. push bx
    18. mov bl,10
    19. mul bl
    20. mov ch,0
    21. pop bx
    22. add ax,bx
    23.  
    24. mov dx,0
    25. mov bx,10
    26.  
    27. mul bx
    28. push ax
    29.  
    30. mov ah,1
    31. int 21h
    32. sub al,30h
    33. mov dl,al
    34. pop ax
    35. add ax,dx
    36. mov dx,ax
    37.  
    38. mov ah,4Ch
    39. int 21
    40.  
    41. end start
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    не, не разобрался.
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    попробуйте так
    Код (Text):
    1. .model small
    2.  
    3. .code
    4.  
    5. start:
    6. ; вводим старшую чифру
    7. mov ah, 8
    8. ; если надо подтверждать введенные данные (ввод данных с echo), то ah должно быть равно 1, но не везде почему-то работает и лучше использовать ax=0C01h (с очисткой буфера клавиатуры)
    9. int 21h
    10. ; получаем из ASCII число
    11. sub al, 48
    12. ; сохраняем в ch
    13. mov ch, al
    14. ; вводим среднюю цифру
    15. int 21h
    16. ; получаем из ASCII число
    17. sub al, 48
    18. ; сохраняем в cl
    19. mov cl, al
    20. ; вводим младшую цифру
    21. int 21h
    22. ; получаем из ASCII число
    23. sub al, 48
    24. ; ah=средняя цифрв
    25. mov ah, cl
    26. ; al=ah*10+al
    27. ; ah=0
    28. aad
    29. ; если такой команды не знаете, то просто раскомментируйте следующий код и уберите неизвестную команду
    30. ; add ah, ah ; ah=ah*2
    31. ; add ah, ah ; ah=ah*4
    32. ; add ah, cl ; ah=ah*5
    33. ; add ah, ah ; ah=ah*10
    34. ; add al, ah ; al=ah*10+al
    35. ; sub ah, ah ; ah=0
    36. ; cl=средняя цифра*10+младшая цифра
    37. mov cl, al
    38. ; al=старшая цифра
    39. mov al, ch
    40. ; ch=100
    41. mov ch, 100
    42. ; ax=старшая цифра*100
    43. mul ch
    44. ; cx=средняя цифра*10+младшая цифра
    45. mov ch, 0
    46. ; ax=старшая цифра*100+средняя цифра*10+младшая цифра
    47. add ax, cx
    48.  
    49. mov ah,4Ch
    50. int 21
    51.  
    52. end start