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

本文详细解析了汇编语言中的jcxz和loop指令的工作原理及使用场景,对比了两者在条件跳转上的差异,通过实例代码展示了如何在内存中查找特定值。

190

被折叠的 条评论
为什么被折叠?



