循环控制指令
80x86指令系统中,有三条专门的循环控制指令:
属于程序转移类指令,也是相对转移。
相对位移量是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 ENDS
CODE SEGMENT ;设置代码段
ASSUME CS: CODE, DS: DATA, SS: STACK1
AGAIN: MOV AX, DATA ;置段基指于DS
MOV DS,AX
MOV BX,OFFSET STRING
MOV AL,[BX] ;取一个字符
OR AL,AL ;是否为结尾符0
JZ DONE ;是,退出循环
CMP AL,'A' ;是否为大写A~Z
JB NEXT ;CF=1 AND ZF=0 时跳转到NEXT,否则继续执行
CMP AL,'Z'
JA NEXT
OR AL,20H ;A和a相差20H,是大写转换为小写
MOV [BX],AL
NEXT: INC BX
JMP AGAIN
DONE:
MOV AH,4CH ;调用4CH功能,4CH功能号
INT 21H ;终止程序
CODE ENDS
END 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 ;置段基指于DS
MOV DS,AX
XOR AX,CX
MOV CX,100
AGAIN: ADD AX,CX ;从100,99,........,2,1倒序累加
LOOP AGAIN ;CX <==(CX)-1
MOV SUM,AX
MOV AH,4CH
INT 21H
CODE: ENDS
END STATA