我在编写一个应该在堆栈中找到最小数字的简单程序时遇到问题,并且只留下包含该数字的堆栈。 0表示堆栈的结尾,不应计为数字。似乎控制流程存在问题。我也试过用 cmp a,b jle更新 相反,但结果相同:程序只是继续循环,不退出也不更新最小的数字。
主
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
附带一份最终: 结束主要
答案 0 :(得分:1)
我很确定你想要的是这个:
; 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: