Деление и divide error - Assembler

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

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

Мой проект должен решать уравнение ;(3*c+8-d)/(a-c/4) для беззнаковых чисел на си и ассемблере(32-битные регистры использовать нельзя). При вводе 2 4 9 часть на си считает правильно, на ассемблерная ф-ция выписывает divide error
.MODEL Large,C
        .data
        Extrn   aui:word,cui:word,dui:word,chisl:dword,znamen:word,res:word
        .code
        Public  Lab3S
Lab3S   proc    far
        ;CHISLITEL
        mov ax,cui
        mov cx,3
        MUL cx
        mov cx,8
        sub cx,dui
        add ax,cx
        mov WORD PTR chisl,ax
        mov WORD PTR chisl+2,dx
                ;ZNAMENATEL
        mov ax,cui
        mov cx,4
        div cx
        mov cx,aui
        sub cx,ax
        mov znamen,cx
        ;RESULTAT
        mov ax,WORD PTR chisl
        mov dx,WORD PTR chisl+2
        mov cx,znamen
        div cx
        mov res,ax
        ret
Lab3S   endp
        end
Часть на ассемблере делал последовательно, сначала числитель, потом знаменатель, для всех входных чисел результат с си был одинаковым, ошибка начала вылезать когда начал считать результат. Читал что такое может быть, если результат деления не помещается в ax, но мои числа очень малы. Помогите доделать.

Решение задачи: «Деление и divide error»

textual
Листинг программы
;RESULTAT
        mov ax,WORD PTR chisl
        mov dx,WORD PTR chisl+2
        mov cx,znamen
        div cx
        mov res,ax

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

  1. Переменная chisl хранит делимое число.
  2. Переменная chisl+2 хранит делитель.
  3. Переменная znamen хранит знак делимого числа.
  4. Результат деления сохраняется в переменной res.

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


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

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

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