我想以这种方式运行这个循环,最后有一个条件
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 的正确使用
我想以这种方式运行这个循环,最后有一个条件
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 的正确使用
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
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: