0

我想以这种方式运行这个循环,最后有一个条件

mov cx, 10
mov di, 0

loop:

...

inc di
dec cx

cmp di, 5
jne loop

...     

jnz loop

但它似乎不起作用,除非我立即减少 cx

jnz loop

这使我每次都无法减少 cx di != 5。我想我误解了 cx 的正确使用

4

2 回答 2

2

JNZ如果零标志被清除,则跳转。除了DEC.

听起来你想要这样的东西:

cmp di, 5
je no_dec
dec cx      ; decrement CX when di != 5
no_dec:
...
jncxz loop  ; jump if CX != 0
            ; if JNCXZ isn't supported on the target CPU you could
            ; replace it with CMP CX,0 / JNZ loop

顺便说一句,LOOP标签名称是一个糟糕的选择,因为LOOP它是 x86 上的指令。实际上,您可以像这样替换代码:

dec cx
jnz label

loop label  ; decrements CX and jumps if not zero
于 2013-04-08T07:15:46.407 回答
0
xor di,di
mov cx,10
_theLoop:
    ; ...
    inc di    ; I wonder why are you incrementing DI manually...
    cmp di,5
    ja _done
    loop _theLoop
_done:
于 2013-04-13T15:46:45.047 回答