的正确使用
我想以这种方式在循环结束时使用条件语句
mov cx, 10
mov di, 0
loop:
...
inc di
dec cx
cmp di, 5
jne loop
...
jnz loop
,但似乎它不会工作,除非我减少cx立即在
jnz loop
这阻止了我每次di != 5
。我想我误解了cx
如果零标志清除,则JNZ
跳转。除了DEC
之外,还有很多x86指令会修改零标志。
听起来你想要这样做:
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: