jcxz = j:jmp cx:cx寄存器 z:zero(当cx寄存器中的值为0时,进行跳转)
jcxz指令与loop指令正好相反.
loop指令:当cx寄存器的值不等于0时,才进行跳转.
所有的条件转移指令都是短转移,位移范围是(-128~127), 经过编译后,机器码中包含了位移的范围。 EBXX, XX就是转移的字节长度, 这个XX是在编译器编译时候计算的。计算公式是: 标号处的编译地址 - jmp指令后第一个字节的地址。
assume cs:code
code segment
start: mov ax, 2000H
mov ds,ax
mov bx,0
s: mov ch,0
mov cl, ds:[bx]
jcxz ok ; cx寄存器的值为0, 才会跳转
inc bx
jmp short s
ok: mov ax, bx
mov ax, 4C00H
int 21H
code ends
end start
assume cs:code
code segment
start: mov ax, 2000H
mov ds, ax
mov bx,0
; 利用loop指令,实现在内存 2000H段中查找第一个值
; 为0的字节,找到后,将它的偏移地址存储在dx中
s: mov cl, ds:[bx]
mov ch, 0
inc cx
inc bx
loop s
dec bx ; 将bx中的值-1
mov dx, bx
mov ax,4C00H
int 21H
code ends
end start