补全程序,利用 jcxz 指令,实现在内存 2000H 段中查找第一个值为 0 的字节,找到后,将它的偏移地址存储在 dx 中。
assume cs:code
code segment
start:mov ax,2000h
mov ds,ax
mov bx,0
s:______
______
______
______
jmp short s
ok:mov dx,bx
mov ax,4c00h
int 21h
code ends
end start
分析:考察对 jcxz 指令的使用
jcxz x 如果 cx = 0,转移到标号x处执行;如果cx不为零,则什么也不做。
基本思路就是从 2000:0000 位置处逐字节遍历,每次取出一个字节放入cx寄存器的低地址处cl,高地址ch不起作用故补0,用jcxz指令判断cx是否为0,若为0则执行 OK 代码段,将偏移地址bx存储到dx中,否则bx+1,检测下一个字节是否为0。
故程序为
assume cs:code
code segment
start:mov ax,2000h
mov ds,ax
mov bx,0
s:mov cl,[bx] ;取出一个字节,放在cx低地址处
mov ch,0 ;cx高地址不起作用,补0
jcxz ok ;判断该字节是否为0,成立则跳到ok处执行
inc bx ;不成立则取下一个字节
jmp short s
ok:mov dx,bx
mov ax,4c00h
int 21h
code ends
end start
实验结果如下:
可以看到在DS:000处的第一个就为0,故执行了一次循环就结束了