Решение арифметических вопросов на ассемблере - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть эта задача написать код на ассемблере, чтобы найти решение (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



...