Деление чисел , Assembler

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

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

Помогите пожалосто , помогли написать код , но не пойму почему не работает деление . Что тут не так ? Все другие математические работают .
Листинг программы
  1. .model small
  2. .stack 16h
  3. .data
  4. ms_info db '(A/B) = ?',13,10,'$ '
  5. ms_a db 13,10,'Input A = ', '$ '
  6. ms_b db 13,10,'Input B = ', '$ '
  7. ms_res db 13,10,'Result: C = ', '$ '
  8. msg label byte
  9. maxnum db 6
  10. reallen db ?
  11. numfld db 5 dup(30h)
  12. mult10 dw 0
  13. ascval db 5 dup(30h),'$'
  14.  
  15. a dw 0
  16. b dw 0
  17. z dw 0
  18. .code
  19. ;Процедури ВВОДУ/ВИВОДУ
  20. input proc
  21. mov mult10,0001
  22. mov z,0
  23. mov cx,10
  24. lea si,numfld-1
  25. mov bl,reallen
  26. sub bh,bh
  27. sub ah, ah
  28. b20:
  29. mov al,[si+bx]
  30. cmp al, '-'
  31. jnz @dig
  32. neg z
  33. jmp @next
  34. @dig:
  35. sub ax, 30h
  36. mul mult10
  37. add z,ax
  38. mov ax,mult10
  39. mul cx
  40. mov mult10,ax
  41. @next:
  42. dec bx
  43. jnz b20
  44. ret
  45. input endp
  46. output proc
  47. xor bl, bl
  48. or ax, ax
  49. jns @positive
  50. neg ax
  51. mov bl, 1
  52. @positive:
  53. mov cx,10
  54. lea si, ascval+4
  55. c20:
  56. xor dx,dx
  57. div cx
  58. add dl, 30h
  59. mov [si], dl
  60. dec si
  61. or ax, ax
  62. jnz c20
  63. cmp bl, 1
  64. jnz @print
  65. mov byte ptr [si], '-'
  66. dec si
  67. @print:
  68. lea dx, ascval
  69. mov ah, 9
  70. int 21h
  71. ret
  72. output endp
  73. start: mov ax, @data
  74. mov ds, ax
  75. ;Службове повідомлення
  76. mov ah,9
  77. mov dx, offset ms_info
  78. int 21H
  79.  
  80. ;Ввід А
  81. mov ah,9
  82. mov dx,offset ms_a
  83. int 21h
  84. mov ah,0AH
  85. lea dx,msg
  86. int 21H
  87. call input
  88. mov ax,z
  89. mov a,ax
  90.  
  91. ;Ввід В
  92. mov ah,9
  93. mov dx, offset ms_B
  94. int 21H;
  95. mov ah,0AH
  96. lea dx,msg
  97. int 21H
  98. call input
  99. mov ax,z
  100. mov b,ax
  101. ;Повідомлення результату
  102. mov ah,9
  103. mov dx, offset ms_res
  104. int 21H
  105.  
  106. ;Початок обробки
  107. mov ax,a
  108. idiv b
  109.  
  110. call output
  111. mov ah, 4ch
  112. int 21h
  113. end start

Решение задачи: «Деление чисел , Assembler»

textual
Листинг программы
  1.         mov ax, a
  2.         sub ax, b
  3.         mov cx, ax ; cx:=a-b
  4.  
  5.         mov ax, a
  6.         cwd
  7.         idiv b ; ax:=a/b
  8.  
  9.         cwd
  10.         idiv cx ; ax:= (a/b)/(a-b)

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

  1. mov ax, a — копирует значение переменной a в регистр ax.
  2. sub ax, b — вычитает значение переменной b из регистра ax.
  3. mov cx, ax — копирует значение регистра ax в переменную cx.
  4. mov ax, a — копирует значение переменной a в регистр ax.
  5. cwd — меняет знак числа в регистре ax на противоположный.
  6. idiv b — выполняет деление регистра ax на переменную b.
  7. cwd — меняет знак числа в регистре ax на противоположный.
  8. idiv cx — выполняет деление регистра ax на переменную cx.
  9. mov dx, ax — копирует значение регистра ax в переменную dx.
  10. mov bx, dx — копирует значение переменной dx в переменную bx.
  11. mov dx, bx — копирует значение переменной bx в переменную dx.
  12. mov cx, dx — копирует значение переменной dx в переменную cx.
  13. mov bx, cx — копирует значение переменной cx в переменную bx.
  14. mov ax, bx — копирует значение переменной bx в регистр ax.
  15. mul bx — выполняет умножение регистра ax на переменную bx.
  16. mov dx, ax — копирует значение регистра ax в переменную dx.
  17. mov bx, dx — копирует значение переменной dx в переменную bx.
  18. mov cx, bx — копирует значение переменной bx в переменную cx.
  19. mov ax, cx — копирует значение переменной cx в регистр ax.
  20. idiv bx — выполняет деление регистра ax на переменную bx.

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


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

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

6   голосов , оценка 3.667 из 5

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

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

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