2012-05-20 1 views
-1

Я пытаюсь решить уравнение. Я использую 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 

ответ

1

sub bx, ax изменит bx и ax останется, как было. Вероятно, вы, скорее всего, ищете sub ax, bx.


Редактировать: Вы вычисляете другое уравнение, чем предлагает ваш комментарий. Ваш код толкает следующие значения в стек:

a 
b * c 
a * 2 

и хлопает их выполнить следующую математику (после применения изменений я предложил выше):

(a * 2) + (b * c) - (a) 

Вам нужно изменить математику вы» повторное выполнение.

+0

Я попробовал это раньше, и он дает ответ, что он больше. – LTnewbie

+0

@LTnewbie: Я обновил ответ. – DCoder

+0

, но если в конце я использую pop bx sub bx, ax Не должно ли это нормально работать? – LTnewbie