Pregunta

Estoy tratando de resolver una ecuación.Estoy usando MASM32.Creo que estoy usando el código correcto.Pero obtengo un valor "mayor" incluso cuando uso los valores necesarios para resolver la ecuación.¿Qué me falta o estoy haciendo mal?

.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
¿Fue útil?

Solución

sub bx, ax modificará bx, y ax permanecerá como estaba.Probablemente estés buscando sub ax, bx en cambio.


Editar:Estás calculando una ecuación diferente a la que sugiere tu comentario.Su código envía los siguientes valores a la pila:

a
b * c
a * 2

y los abre para realizar los siguientes cálculos (después de aplicar el cambio que sugerí anteriormente):

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

Necesitas modificar los cálculos que estás realizando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top