程序集 x86 控制流



我在编写一个简单的程序时遇到问题,该程序应该在堆栈中找到最小的数字,而堆栈只包含这个数字。 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:

相关内容

  • 没有找到相关文章

最新更新