0

我在编写一个简单的程序时遇到了麻烦,它应该在堆栈中找到最小的数字,并让堆栈只包含这个数字。0 标记堆栈的结尾,不应算作数字。控制流似乎有问题。我也尝试使用 cmp a, b jle update 代替,但结果相同:程序只是继续循环,没有退出也没有更新最小的数字。

主要的

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

结束:结束主要

4

1 回答 1

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:
于 2013-09-16T12:56:30.560 回答