我希望以这种方式在末尾运行带有条件的循环
mov cx, 10
mov di, 0
loop:
...
inc di
dec cx
cmp di, 5
jne loop
...
jnz loop
但似乎除非我在
之前减少cx,否则它将无效jnz loop
这阻止了我每次di != 5
递减cx。
我想我误解了正确使用cx
答案 0 :(得分:2)
JNZ
会跳转。有许多x86指令会修改除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
答案 1 :(得分: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: