Divide by zero assembler Откуда вообще ошибка

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

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

Доброго времени суток, с наступающим ! Буду признателен в помощи решения ошибки.. 5. Протабулировать функцию у(x), заданную в виде: y(x) = ах + b , если 1 < x <= 5 y(x) = bx + а , если 5 < x <= 10 где а - max(A(I)), а в - max(B(I)); I=1,2,...,5 Нахождение max оформить в виде подпрограммы Шаг табуляции x=1. Уже обращался по этому заданию, но с той ошибкой всё было решено, теперь деление на ноль, откуда вообще? Подозрение что, что-то не так с командой mull, и регистром dx.. при двубайтовом умножении, но если это так, как исправить? Изначально было мною задумано создать две подпрограммы расстонвки по возрастанию из пяти элементов данных массивов,и брать в итоге 4-ые элементы массивов, и уже через них табулировать.
Листинг программы
  1. .model small
  2. .386
  3. .data
  4. mas dw 6,11,9,8,3
  5. mas1 dw 4,7,9,4,1
  6. masx dw 2,3,4,5,6,7,8,9,10
  7. len1 equ 9
  8. len equ $-mas
  9. tmp dw 0
  10. tmp1 dw 0
  11. res db 5 dup(?)
  12. res1 db 5 dup(?)
  13. resy dw 9 dup(?)
  14. .stack 100h
  15. .code
  16. start:
  17. mov ax,@data
  18. mov ds,ax
  19. mov es,ax
  20. xor si,si
  21. xor di,di
  22. mov cx,len1
  23. pdp proc
  24. mov cx,len
  25. dec cx
  26. big:
  27. push cx
  28. xor si,si
  29. xor di,di
  30. cyc:
  31. mov ax,mas[si]
  32. cmp ax,mas[si+1]
  33. jbe m1
  34. mov bx,mas[si]
  35. mov tmp,bx
  36. mov bx,mas[si+1]
  37. mov mas[si],bx
  38. mov bx,tmp
  39. mov mas[si+1],bx
  40. m1:
  41. inc si
  42. loop cyc
  43. cld
  44. lea si,mas
  45. lea di,res
  46. mov cx,len
  47. rep movsb
  48. pop cx
  49. loop big
  50. retn 4
  51. pdp endp
  52. pdp1 proc
  53. mov cx,len
  54. dec cx
  55. big1:
  56. push cx
  57. xor di,di
  58. xor si,si
  59. cyc1:
  60. mov ax,mas1[di]
  61. cmp ax,mas1[di+1]
  62. jbe m2
  63. mov bx,mas1[di]
  64. mov tmp1,bx
  65. mov bx,mas1[di+1]
  66. mov mas[di],bx
  67. mov bx,tmp1
  68. mov mas1[di+1],bx
  69. m2:
  70. inc di
  71. loop cyc
  72. cld
  73. lea di,mas
  74. lea si,res1
  75. mov cx,len
  76. rep movsb
  77. pop cx
  78. loop big1
  79. retn 4
  80. pdp1 endp
  81. begin:
  82. call pdp
  83. call pdp1
  84. xor si,si
  85. xor di,di
  86. mov dx,0
  87. cycl:
  88. mov bx,masx[si] ; ax=masx[si]
  89. cmp bx,5 ; сравнивается элемент массива с 5
  90. jg new ; переход если больше на new
  91. mov ax,mas[4] ; умножение ax
  92. mul bx ; результат сохраняется в ax
  93. add ax,bx
  94. mov resy[di],ax
  95. jmp nxt
  96. new:
  97. mov ax,mas1[4]
  98. mul bx
  99. mov bx,mas[4]
  100. add ax,bx
  101. mov resy[di],ax
  102. nxt:
  103. inc di
  104. inc si
  105. loop cycl
  106. exit:
  107. mov ax,4c00h
  108. int 21h
  109. end start

Решение задачи: «Divide by zero assembler Откуда вообще ошибка»

textual
Листинг программы
  1. .model small
  2. .386
  3. .data
  4. ;................................
  5. .stack 100h
  6.  
  7. .code
  8.  
  9. pdp proc
  10. ;......................
  11. pdp endp
  12.  
  13. pdp1 proc
  14. ;......................
  15. pdp1 endp
  16.  
  17. start:
  18.     mov ax,@data
  19.     mov ds,ax
  20. ;................................
  21. exit:
  22.     mov ax,4c00h
  23.     int 21h
  24. end start

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


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

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

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

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

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

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