LOOP标号 | CX=CX-1;若CX=0,则循环 | CX=0 |
LOOPNZ/LOOPNE 标号 | CX=CX-1;若CX=0且ZF=0,则循环 | CX=0或ZF=0 |
LOOPZ/LOOPE标号 | CX=CX-1;若CX=0且ZF=1,则循环 | CX=0或ZF=1 |
JCXZ 标号 | 仅测试(CX)=0,若是,则转移到目标地址,否则就顺序执行 |
|
循环程序设计示例:
设VARY中有一组8位的符号数,编程统计其中 正数、负数、零的个数,分别存 VM、VN、VK变量中。
分析:设定此数组的元素匀为字节数据,则数组VARY中的数据个数用CNT EQU $-VARY求出,则循环次数为CNT次。在程序中,要将CNT的值送入CX中。将数组VARY中元素挨个与0比较,利用状态标志寄存器中的ZF位求出零的个数,利用SF位求出正、负数的个数。
stack segment para stack
dw 20H dup(0)
stack ends
data segment
vary db 23h,78h,56h,0abh,00h,0cdh,59h,14h,98h,0efh,00h,0c0h
cnt equ $-vary
vm db ?
vn db ?
vk db ?
data ends
code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
mov bx,0
mov dl,0
lea si,vary
mov cx,cnt
lop1:
cmp byte ptr[si],0
je zero
js lop2
inc bh
jmp next
lop2:
inc bl
jmp next
zero:
inc dl
next:
inc si
loop lop1
mov vm,bh
mov vn,bl
mov vk,dl
mov ah,4ch
int 21h
code ends
end start