循环控制指令

80×86指令系统中,有三条专门的循环控制指令:
属于程序转移类指令,也是相对转移。
相对位移量是8位以补码表示的二进制带符号整数。
隐含使用寄存器CX作循环次数计数器。在进入循环前,把循环次数送入CX。执行循环控制指令时,对CX进行减1计数
LOOP指令:
格式:LOOP 目标地址
功能:CX <==(CX)-1;
若(CX)≠0,转移到目标地址,继续循环;
否则( CX)=0 )退出循环顺序执行。

实例1

把字符串中大写改成小写

DATA SEGMENT ;设置数据段
STRING DB  41H,42H,0H
BX DW ?
DATA ENDS
STACK1 SEGMENT PARA STACK  ;设置堆栈DW 20H DUP(0)STACK1 ENDSCODE SEGMENT              ;设置代码段ASSUME CS: CODE, DS: DATA, SS: STACK1
AGAIN:      MOV	AX, DATA   ;置段基指于DSMOV DS,AX		MOV BX,OFFSET STRINGMOV AL,[BX]   ;取一个字符OR  AL,AL     ;是否为结尾符0JZ  DONE      ;是,退出循环CMP AL,'A'    ;是否为大写A~ZJB NEXT       ;CF=1 AND ZF=0 时跳转到NEXT,否则继续执行CMP AL,'Z'JA NEXTOR AL,20H    ;A和a相差20H,是大写转换为小写MOV [BX],AL
NEXT: 		INC BXJMP AGAIN
DONE:MOV AH,4CH     ;调用4CH功能,4CH功能号INT 21H        ;终止程序CODE ENDSEND AGAIN

实例2

1~100求和

DATA SEGMENT ;设置数据段
SUM DW ?
DATA ENDS
STACK1 SEGMENT PARA STACK  ;设置堆栈DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT              ;设置代码段ASSUME CS: CODE, DS: DATA, SS: STACK1
STATA:      MOV	AX, DATA   ;置段基指于DSMOV DS,AX	XOR AX,CXMOV CX,100
AGAIN:      ADD AX,CX    ;从100,99,........,2,1倒序累加LOOP AGAIN   ;CX <==(CX)-1MOV SUM,AXMOV AH,4CHINT 21H
CODE:	ENDSEND STATA