Где я допустил ошибку при написании кода? (ошибка деления на 0) - Assembler
Формулировка задачи:
Дано задание запрограммировать формулу.
Я написал следующий код:
Но почему-то он валится в дебаггере TASM на операции деления. Где у меня ошибка?
.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Решение задачи: «Где я допустил ошибку при написании кода? (ошибка деления на 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