jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移(jmp为无条件转移指令),在对应的机器码中包含转移的位移,而不是目的地址。对ip的修改范围都为-128~127
j=jmp
cx=cx寄存器
z=zero=0
======>含义:在cx寄存器中的值为0时跳转
与loop指令相反(在cx中值不为零时跳转)
当cx≠0时什么都不做
注意:所有的有条件有条件转移都是短转移,且经过编译之后,机器码包含了位移范围
如:EBXX(XX表示位移范围)
XX是由编译器编译的时候执行的
公式:标号处的偏移地址-jmp指令之后的第一个字节的地址
指令格式:jcxz 标号(如果cx=0,转移到标号处执行)
操作:当cx=0时,IP=IP+8位位移
八位位移=标号处的地址-jcxz指令后的第一个字节的地址
八位位移的范围为-128~127,用补码表示;
八位位移由编译程序在编译时算出。
当cx≠0时,什么都不做(程序向下执行)
问题:
补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存贮在dx中。
assume cs:code
code segment
start: mov ax,2000h
mov ds,ax
mov bx,0
s: mov cl, [bx]
mov ch,0
jcxz ok
inc bx
jmp short s
ok: mov dx,bx
mov ax,4c00h
int 21h
code ends
end start
调试时,修改一下内存单元的数据