Assembly 带括号的汇编程序简单计算

Assembly 带括号的汇编程序简单计算,assembly,masm,masm32,Assembly,Masm,Masm32,我想解一个方程。我用的是MASM32。我认为我使用的代码是正确的。但我得到了“更大”的值,即使我使用必要的值来解方程。我错过了什么或做错了什么 .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc includelib \masm32\lib

我想解一个方程。我用的是MASM32。我认为我使用的代码是正确的。但我得到了“更大”的值,即使我使用必要的值来解方程。我错过了什么或做错了什么

.386
.model flat, stdcall 
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib


.data
blogas_a db "OK",0
a_value dw 6   
a_min dw 1     
a_max dw 7



blogas_b db "less",0
b_value dw -9  
b_min dw -10
b_max dw 19

blogas_c db "greater",0
c_value dw 2
c_min dw -3
c_max dw 27

.code
start:
;________1 lygtis______a-b*c+2*a=36____________________________
_check1:
mov ax, [a_value]
push ax

mov ax, [b_value]
mov bx, [c_value]
mul bx
push ax

mov ax, 2
mov bx, [a_value]
mul bx
push ax

pop ax
pop bx
add ax, bx
pop bx
sub bx, ax

cmp ax, 36
je _outOfRange
jg _outOfRange2
jl _outOfRange3
;_____________________________________
_outOfRange: invoke StdOut, addr blogas_a
JMP _exit
_outOfRange3: invoke StdOut, addr blogas_c
JMP _exit
_outOfRange2: invoke StdOut, addr blogas_b
_exit: invoke ExitProcess, 0
end start

子bx,ax
将修改
bx
,而
ax
将保持原样。您可能正在寻找
子ax、bx


编辑:你计算的方程式与你的评论所暗示的不同。您的代码将以下值推送到堆栈:

a
b * c
a * 2
并弹出它们来执行以下数学运算(在应用我上面建议的更改之后):


你需要修改你正在执行的数学。

但是如果我最后使用的是pop bx sub bx,ax,那么你的数学应该是(a)-(b*c)+(a*2))。
(a * 2) + (b * c) - (a)