В программе есть ошибки, необходимо исправить - Assembler

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

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

Помогите, пожалуйста, посчитать мою формулу представленную на рисунке. В программе 7 ошибок, не знаю как их исправить.
Листинг программы
  1. title prim
  2. assume cs:cod, ds:d, ss:s
  3. s segment stack
  4. dw 128 dup (?)
  5. s ends
  6. d segment
  7. ;резервируем области под переменные a, b, c
  8. a dw ?
  9. b dw ?
  10. c dw ?
  11. ;размещаем строки подсказки для ввода переменных
  12. msga db ‘Введите a:$
  13. msgb db ‘Введите b:$
  14. msgc db ‘Введите c:$
  15. ;размещаем строки сообщения об ошибках
  16. err1 db ‘Деление на ноль (первая дробь)$
  17. err2 db ‘Деление на ноль (вторая дробь)$
  18. ;описываем данные для процедур ввода и вывода целых чисел
  19. .
  20. .
  21. .
  22. d ends
  23. c od segment
  24. ;описываем процедуры ввода и вывода целых чисел
  25. cr = 0dh ;cr присваиваем значение кода символа
  26. ;возврата каретки (клавиши «Enter»)
  27. lf = 0ah ;lf присваиваем значение кода символа
  28. ;перевода строки
  29. IntegerIn proc
  30. start: mov ah,0ah ;функцией 0a вводим строку
  31. ;символов и размещаем ее в
  32. ;области string
  33. lea dx,string
  34. int 21h
  35. xor ax,ax ;обнуляем ax, в котором
  36. ;будем формировать число
  37. lea si,string+2 ;устанавливаем si на
  38. ;первый символ введенной
  39. ;строки
  40. mov negflag,ax ;обнуляем флаг
  41. ;отрицательности числа
  42. ;(предполагаем, что оно
  43. ;будет неотрицательным)
  44. cmp byte ptr [si],'-';первый символ это
  45. ;минус?
  46. jne m2 ;если нет на m2
  47. not negflag ;отмечаем, что число
  48. ;отрицательное
  49. ;(negflag не равен 0)
  50. inc si ;продвигаем si со
  51. ;знака числа к первой
  52. ;цифре
  53. jmp m ;прыгаем на разбор
  54. ;строки цифр
  55. m2: cmp byte ptr [si],'+';первый символ это
  56. ;плюс?
  57. jne m ;если нет на m
  58. inc si ;продвигаем si со
  59. ;знака числа к первой
  60. ;цифре
  61. ;анализируем текущий символ
  62. m: cmp byte ptr [si],cr ;если это cr строка
  63. ;закончилась, выходим
  64. ;из цикла разбора
  65. ;символов
  66. je ex1
  67. cmp byte ptr [si],'0';если код символа
  68. ;меньше кода '0'
  69. ;это не цифра
  70. jb err ;прыгаем на метку err
  71. cmp byte ptr [si],'9';если код символа
  72. ;больше кода '9'
  73. ;это не цифра
  74. ja err ;прыгаем на метку err
  75. mov bx,10 ;домножаем полученное
  76. ;число на основание
  77. ;системы счисления
  78. mul bx
  79. sub byte ptr [si],'0';вычитаем код символа
  80. ;'0' (получаем
  81. ;очередную цифру)
  82. add al,[si] ;добавляем цифру к
  83. ;числу
  84. adc ah,0
  85. inc si ;продвигаем si к
  86. ;следующему символу
  87. jmp m ;организуем цикл
  88. ;функцией 09 выводим сообщение об ошибке
  89. err: lea dx,errmsg
  90. mov ah,9
  91. int 21h
  92. jmp start ;повторяем ввод
  93. ex1: cmp negflag,0 ;число положительное?
  94. je ex ;если да выходим
  95. neg ax ;меняем знак числа
  96. ex: ret
  97. IntegerIn endp
  98. IntegerOut proc
  99. xor cx,cx ;обнуляем счетчик цифр
  100. mov bx,10 bx помещаем делитель
  101. cmp ax,0 ;проверяем знак числа
  102. jge m ;если неотрицательное на m
  103. neg ax ;иначе меняем знак числа
  104. pushax ;сохраняем число перед вызовом
  105. ;функции, использующей ax
  106. mov ah,2 ;функцией 02 выводим знак '-'
  107. mov dl,'-'
  108. int 21h
  109. pop ax ;восстанавливаем число в ax
  110. m: inc cx ;считаем количество
  111. ;получающихся цифр
  112. xor dx,dx ;преобразуем делимое к 32
  113. ;разрядам
  114. div bx ;получаем очередную цифру
  115. pushdx ;сохраняем ее в стеке
  116. or ax,ax ;проверяем есть ли еще цифры
  117. jnz m ;если да на метку m
  118. ;при выходе из цикла в стеке лежат цифры, в cx их
  119. ;количество
  120. m1: pop dx ;извлекаем цифру из стека
  121. add dx,'0' ;преобразуем в код символа
  122. mov ah,2 ;функцией 02 выводим на экран
  123. int 21h
  124. loopm1 ;повторяем cx раз
  125. ret ;возвращаемся из процедуры
  126. IntegerOut endp
  127. ;устанавливаем ds на сегмент данных
  128. string db 255, 0, 255 dup (?)
  129. errmsg db 'Недопустимый символ, можно'
  130. db 'использовать только цифры',cr,lf,'$'
  131. start: mov ax,d
  132. mov ds,ax ;вводим значение переменныой a
  133. Mov ah,09 ;выводим строку подсказку для a
  134. Lea dx,msga
  135. Int 21h
  136. Call IntegerIn ;вводим число
  137. Mov a,ax ;помещаем его в область a
  138. ;вводим значение переменныой b
  139. Mov ah,09 ;выводим строку подсказку для b
  140. Lea dx,msgb
  141. Int 21h
  142. Call IntegerIn ;вводим число
  143. Mov b,ax ;помещаем его в область b
  144. ;вводим значение переменныой c
  145. Mov ah,09 ;выводим строку подсказку для c
  146. Lea dx,msgc
  147. Int 21h
  148. Call IntegerIn ;вводим число
  149. Mov c,ax ;помещаем его в область c
  150. ;проверяем знаменатели на равенство 0
  151. Cmp c,0 ;проверяем первый знаменатель
  152. Jnz m ;если не 0 на m
  153. Mov ah,09 ;выводим сообщение об ошибке
  154. Lea dx,err1
  155. Int 21h
  156. Jmp err ;выходим
  157. m: Mov ax,b ;считаем второй знаменатель
  158. Add ax,c
  159. Jnz m1 ; если не 0 на m1
  160. Mov ah,09 ;выводим сообщение об ошибке
  161. Lea dx,err2
  162. Int 21h
  163. Jmp err ;выходим
  164. ;рассчитываем значение выражения
  165. m1: Mov bx,ax ;помещаем второй знаменатель в bx
  166. Mov ax,a ;считаем второй числитель
  167. Imul ax
  168. Mov cx,3
  169. Imul cx
  170. Idiv bx ;считаем значение второй дроби
  171. Push ax ;сохраняем его в стеке
  172. Mov ax,a ;считаем первый числитель
  173. Add ax,b
  174. Mov bx,c ;считаем значение первой дроби
  175. Cwd
  176. Idiv bx
  177. Pop bx ;извлекаем из стека значение второй
  178. ;дроби
  179. Sub ax,bx ;вычитаем
  180. call IntegerOut ;выводим результат
  181. ;завершаем работу программы
  182. mov ax,4c00h кодом завершения 0 без ошибок
  183. int 21h
  184. err: mov ax,4cffh кодом завершения 0ffh (-1) с ошибкой
  185. int 21h
  186. c od ends
  187. end start

Решение задачи: «В программе есть ошибки, необходимо исправить»

textual
Листинг программы
  1.     c    od segment

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


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

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

8   голосов , оценка 3.875 из 5

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

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

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