У меня есть эта задача написать код на ассемблере, чтобы найти решение (a + b + c) ^ 3 / (a + b) ^ 2, я написал код, но результат не верный, который возможно, потому, что я допустил ошибки, но не могу понять где, и я действительно не понимаю различий между 8-битным, 16-битным и 32-битным кодами.
format PE console
entry start
include 'include\win32a.inc'
section '.idata' import data readable
library kernel,'kernel32.dll',\
msvcrt,'msvcrt.dll'
import kernel,\
ExitProcess,'ExitProcess'
import msvcrt,\
printf,'printf',\
getchar,'_fgetchar'
section '.data' data readable writeable
a dw 1
b dw 2
c dw 2
MESSAGE db "(a + b + c) ^ 3 / (a+b)^2 = %d",0
section '.code' code readable executable
start:
xor eax, eax
xor ebx, ebx
mov ax, [a]
add ax, [b]
add ax, [c] ; add a + b + c
imul ax ; find the square of ax
imul ax ; find the cube of ax
xor dx, dx
push ax
mov bx, [a]
add bx, [b] ; add a+ b
imul bx ; find the square
idiv bx ; divide ax by bx
cwde
ccall [printf], MESSAGE, eax
ccall [getchar]
stdcall [ExitProcess],0