1.指令格式:
jcxz 标号
表示:如果(cx)=0,转移到标号处执行;若(cx)0,继续向下执行。
2.指令执行过程:
- 当(cx) = 0时,(IP) = (IP) + 8位位移;
- 8位位移 = 标号地址 — jxcz指令后的第一个字节的地址;
- 8位位移的范围:-128~127,使用补码表示;
- 8位位移由编译程序在编译时算出。
3.深入概念:
- jcxz指令是有条件的转移指令(所有有条件的转移指令都是短转移)。
- 由于jcxz为短转移,对应机器码中包含转移的位移,IP修改范围为-128-127。
4.使用案例
利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。
首先在debug中修改2000:0000内存中的内容为11 22 33 44 00 55 55 00 ,
代码如下:
assume cs:code,ds:data,ss:stack
data segment
db 0,0,0
data ends
stack segment
dw 16 dup(0)
stack ends
code segment
start: mov ax,2000H
mov ds,ax
mov bx,0
s: mov ch,0
mov cl,ds:[bx]
jcxz ok ;若(cx)==0,跳转至ok标号处执行
inc bx ;继续循环,直至查找到第一个值为0的字节
jmp short s
ok: mov dx,bx
mov ax,4c00H
int 21H
code ends
end start
运行结果:
u