LOOP
label 循环(loop)
执行操作:① (CX)←(CX)-1
② 若(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束
LOOPZ/LOOPE label 为零/相等时循环(loop while zero,or equal)
执行操作:① (CX)←(CX)-1
② 若ZF=1且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束
LOOPNZ/LOOPNE label 不为零/不等时循环(loop while nonzero,or not equal)
执行操作:① (CX)←(CX)-1
② 若ZF=0且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束
例3.42
编写程序,实现两个数据块BLOCK1和BLOCK2相加,结果存入BLOCK2。
DATA SEGMENT
BLOCK1 DW 100 DUP(?)
BLOCK2 DW 100 DUP(?)
DATA ENDS
; - - - - - - - - - - - - - - - - - -
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA
MOV DS,AX ; initialize the data segment
MOV ES,AX ; initialize the extra segment
CLD ; DF=0 for autoincrement
MOV CX,100 ; load the counter
MOV SI,OFFSET BLOCK1 ; address of block1
MOV DI,OFFSET BLOCK2 ; address of block2
NEXT: LODSW ; load the data of block1 into AX
ADD AX,ES:[DI] ; add the data of block2 to AX
STOSW ; store the sum to block2
LOOP NEXT ; repeat 100 times
MOV AX,4C00H ; return to DOS
INT 21H
CODE ENDS
END START