Тема: Помилки в Асемблерному коді
В мене завдання написати код на асемблері та на С++ за наступною формулою , де а=-4, b=10, c=5, d=-7. На С++ я написав, а на Асемблері не вдається. Різні результати.
Код на С++
int main()
{
double X;
int a = -4,
b = 10,
c = 5,
d = -7;
X = pow(d, 3) +((b * b) - 3 * c * b) / (pow(a, 2) + 9) + 350;
std::cout << "X= "<<X;
}
Вивід: X=5
На асемблері я написав наступний код:
.686P
.MODEL FLAT, STDCALL
.STACK 4096
.DATA
MB_OK EQU 0
m EQU 481h ;m = 350d
str_format DB "X = %d",0
str_buffer DB 256 dup (0)
m_title DB "Lab #5",0
A DB 0Ch ;a = -4
B DB 0FCh ;b = 10
C1 DB 0F0h ;c = 5
D DB 02h ;d = -7
X DD ?
extern MessageBoxA@16:NEAR
extern wsprintfA:NEAR
.CODE
Start:
XOR eax, eax ;ax = 0
MOV al, C1 ;al = b
CBW ;ax = b
XOR ebx, ebx ;bx = 0
MOV bl, A ;bl = b
IMUL bx ;ax = b^2
IMUL bx ;ax = c*b
IMUL bx ;ax=b^2-3*c*b
SUB eax, eax ;ax = ax-3
XOR ebx, ebx ;bx = 0
MOV bl, D ;bl = a
IDIV bx ;ax = a^2+9
XOR ebx, ebx ;ebx = 0
MOV ebx, eax ;bx = ax = (ax-3*c) / a^2+9
XOR eax, eax ;ax = 0
MOV al, D ;al = d
IMUL ax ;ax = d^3
ADD ebx, eax ;bx = d*3 + ((b^2-3*c*b) / a^2+9)
ADD ebx, m ;bx = d*3 + ((b^2-3*c*b) / a^2+9) +350
MOV BYTE PTR[X], bl
PUSH X
PUSH OFFSET str_format
PUSH OFFSET str_buffer
CALL wsprintfA
ADD esp, 12
PUSH MB_OK
PUSH OFFSET m_title
PUSH OFFSET str_buffer
PUSH 0
CALL MessageBoxA@16
RET
END Start
а на асемблері вивід Х=144