Люди, помогите с Ассемблером!!!
Помогите найти ошибку в коде
Мне надо посчитать по формуле (c + 4*d - 123)/(1 - a/2)
Тут используется С++ код и ассемблеровский, С++ код работает нормально, результат выводит. Суть в том чтобы результаты на С++ и ассемблера совпадали. Но когда запускается из модуля С++ функции Lab3S и Lab3I (ассемблеровские модули) программа пишет ошибку деления, помогите разобраться, очень нужно.
Код программы:
title Lab3asm.asm
.MODEL Small, C
.data
Extrn C Numerator:Dword
Extrn C aS:Byte, ccS:Byte, dds:Byte
Extrn C xI:Word, aI:Word, cI:Word, ddI:Word
Extrn C Denominator:Word
.code
Public C Lab3S
Lab3S proc far
;Znamenatel*******************************
mov aL, aS
mov dx, 2
IDIV dx
mov dx, 1
sub dx, ax
mov ax, dx
;Zapominanie v steke ax*******************
push ax
CBW
;Vostanovlenie soderzhimogo steka
pop bx
mov Denominator, bx
;Chislitel********************************
mov aL, dds
mov dx, 4
IMUL dx
add aL, ccS
mov dx, 123
CBW
sub ax, dx
CWD ; ax ==> DX:AX
;Mladshaya chast chislitelya
mov WORD PTR Numerator, AX
;Starshaya chast chislitelya
mov WORD PTR Numerator+2, DX
;Rezultat
IDIV bx; Delenie chislitelya na znamenatel
mov xI, ax
ret
Lab3S endp
;=========================================
Public C Lab3I
Lab3I proc far
;Znamenatel*******************************
mov aX, aI
mov cx, 2
IDIV cx
mov cx, 1
sub cx, ax
mov Denominator, cx
;Chislitel********************************
mov ax, ddI
mov cx, 4
IMUL cx
CWD
;Zapominanie
push dx
;Zapominanie
push ax
mov ax, cI
CWD
;Vostanovlenie soderzhimogo steka ===>
pop bx
;Vostanovlenie soderzhimogo steka ===>
pop cx
add bx, ax
adc cx, dx
sub bx, 123
sbb cx, 0
;Mladshaya chast chislitelya
mov WORD PTR Numerator, BX
;Starshaya chast chislitelya
mov WORD PTR Numerator+2, CX
;Gotovimsya k deleniu
mov ax, bx
mov dx, cx
;Resultat
IDIV Denominator; Delenie chislitelya na znamenatel
mov xI, ax
ret
Lab3I endp
end