Где я допустил ошибку при написании кода? (ошибка деления на 0) - Assembler

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

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

Дано задание запрограммировать формулу. Я написал следующий код:
.model small;
.data
    a db 2
    b db 2
    c db 2
    d db 15
    e db 2
    f dd ?
    a1 dd ?
    a2 dd ?
    a3 dd ?
    a4 dd ?
.code
.486
    mov ax,@data
    mov ds,ax
    mov al,a
    mov ah,b
    add al,ah;(a+b)=al
    movsx bx,al;(a+b)
    Imul al;AX -(a+b)^2
    imul bx;(A+B)^3
    mov bx,dx
    shl ebx,16
    mov bx,ax
    mov eax,2
    imul ebx
    mov a1,edx
    mov a2,eax  
    
    mov al,c
    mov ah,2
    imul ah;AX=2*C
    mov bx,ax
    mov al,d
    imul al;AX=D^2
    sub BX,AX;BX=(2C-D^2)
    movsx AX,a;WORD a
    imul BX;DX:AX 
    mov bx,dx
    shl ebx,16
    mov bx,ax
    mov edx,a1
    mov eax,a2
    add edx,ebx
    
    mov al,a
    imul a; AX=A^2
    movsx bx,e
    add bx,ax
    mov ax,4
    imul bx 
    mov cx,dx
    shl ecx,16
    mov cx,ax
    idiv ecx
        mov a3,edx
    mov a4,eax
    
    mov ah,4ch
    int 21h
end
Но почему-то он валится в дебаггере TASM на операции деления. Где у меня ошибка?

Решение задачи: «Где я допустил ошибку при написании кода? (ошибка деления на 0)»

textual
Листинг программы
.model small
.data
    a db 2
    b db 2 
    c db 2 
    d db 15
    e db 2
.code
.486
    mov ax,@data
    mov ds,ax
    mov al,a
    add al,b
    movsx dx,al
    imul al
    imul dx
    mov BX,dx
    shl ebx,16
    mov bx,ax
    shl ebx,1
    
    mov dl,c
    shl dl,1
    mov al,d
    imul al
    sub DX,AX
    mov AX,DX
    movsx CX,a
    imul CX
    mov CX,DX
    shl ECX,16
    mov CX,AX
    add ebx,ecx
    mov eax,ecx
    
    xor ECX,ECX
    mov cl,a
    mov ch,e
    add cl,ch
    xor ch,ch
    shl cl,2
    mov eax,ebx
    CDQ
    idiv ECX
    
    
    mov ah,4ch
    int 21h
end

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


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

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

7   голосов , оценка 4.714 из 5
Похожие ответы