循环控制指令
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