因为唯一的用于统计循环次数的寄存器就是cx,所以有多层循环的时候就会碰到循环次数难以记录的问题,以下是一种解决办法

s0:mov dx,cx//用另一个寄存器来存cx的次数
mov si,0
mov cx,3
s:mov al,[si+bx]
and al,11011111b
mov [si+bx],al
inc si
loop s
add bx,16
mov cx,dx//这里把cx次数取出来减一次
loop s0

但是寄存器的数量是有限的,如果多次循环可能会导致寄存器不够用,因此可以先在数据段定义一个字型数据,然后直接把循环次数放到里面

 data segment
dw 0
data ends

code segment
start: mov ax,data
mov ds,ax
mov cx,3
s0: mov ds:[0],cx
mov cx,2
s:

loop s
mov cx,ds:[0]
loop s0

此外,还可以定义一个栈,直接用push,pop命令把cx值取出存入