TASM汇编8086 DOS中的循环和条件



我想以这种方式在循环结束时使用条件语句

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:

最新更新