この方法で最後に条件付きでこのループを実行したい
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
ゼロフラグがクリアされている場合はジャンプします。以外にも、ゼロ フラグを変更する多くの 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
ところで、x86 の命令であるLOOP
ため、ラベル名の選択としては適切ではありません。LOOP
実際、次のようにコードを置き換えることができます。
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: