我在编写一个简单的程序时遇到问题,该程序应该在堆栈中找到最小的数字,而堆栈只包含这个数字。 0 标记堆栈的末尾,不应计为数字。控制流似乎有问题。我也尝试过使用CMP A, BJLE 更新相反,但结果相同:程序只是继续循环,不退出或更新最小的数字。
主要
push 0 ;
push 7 ;
push 2 ;
push 8 ;
push 5 ;
push 4 ;
data a
data b
pop b
loop:
pop a
je a, zero, done
jle a, b, update
jmp loop
update:
add b, a, zero
jmp loop
done:
push b
jmp theend
结束:结束主
我很
确定你想要的是这个:
; a and b are defined as 16-bit words
; if you're using 32-bit, you probably want
; to use 'dd' instead.
a dw 0
b dw 0
pop b
loop:
pop a
or a,a ; Sets the Z flag if a is 0
je done
cmp a,b ; compares a and b, and sets flags
jle update
jmp loop
update:
add b, a
jmp loop
done:
push b
jmp theend
另请注意,您可以更改此设置:
jle update
jmp loop
update:
对此:
jg loop ; jump greater
update: