FOR结构:
一般格式:FOR 循环计数器次数 DO
重复语句代码
END_FOR
LOOP指令:循环指令,循环次数由计数寄存器CX指定,是否执行循环体的判断指令在循环体之后,CX的值不等于0的时候跳转
执行LOOP指令的时候,CPU自动将CX的值减1,若CX=0则结束循环,否则重复执行循环体
格式:
mov cx,循环次数
标号:
这里写你的循环执行的代码
LOOP 标号
MOV AX,1
MOV CX,8
@S:
ADD AX,AX
LOOP @s
JCXZ指令:有条件转移指令,检测CX是否为零,是零则做相应跳转,不改变CX的值 ;CX的值等于0的时候才跳转
JCXZ: j=jmp cx=cx寄存器 z=zero=0;
JCXZ @SKIP
@SKIP:
所有的条件的转移指令都是短转移 位移范围-128~127
注意LOOP和JCXZ的区别,前者是CX不等于0跳转并且会改变CX的值,后者是CX等于0才跳转并且不改变CX的值
例子:输出A-Z的字母
MOV CX,26 ;循环26次
MOV AH,2 ;显示输出
MOV DL,'A' ;输出内容DL存储第一个被输出的字母A
@TOP:
INT 21H ;输出
INC DL ;DL的值加1
LOOP @TOP ;CX减1,并继续循环TOP直到CX等于0
观察ASCII表A-Z的字母,每个加1所以INC DL
不用LOOP的方法:
MOV BX,26 ;BX的值等于26
MOV AH,2 ;显示输出
MOV DL,'A' ;待输出A
@TOP:
INT 21H ;输出
INC DL ;DL的值加一
DEC BX ;把BX减1
JNZ @TOP ;如果不等于就跳转TOP,零标志位(ZF=0)
While结构:
一般形式:WHILE 条件 DO
重复语句代码
END_WHILE
MOV CX,50 ;CX初始化50
MOV BX,5 ;BX存储第一个数字5
MOV AX,0 ;AX初始化0
@WHILE:
CMP CX,0 ;比较CX和0
JLE @END_WHILE ;如果小于或等于则跳出循环
ADD AX,BX ;AX=AX+BX
ADD BX,5 ;BX=BX+5
DEC CX ;CX用于记次数,CX减1
JMP @WHILE ;无条件跳转到WHILE继续循环
@END_WHILE:
DO WHILE结构:
一般形式:将BX初始化为7,AX初始化为0
DO WHILE
将BX加到AX里
BX+7
如果BX大于100则WHILE语句结束运行
END_WHILE
MOV BX,7 ;BX初始化7
MOV AX,0 ;AX初始化0,存储总和
@WHILE:
ADD AX,BX ;AX=AX+BX
ADD BX,7 ;BX=BX+7
CMP BX,100 ;比较BX和100
JL @WHILE ;如果小于则跳转,BX<100
1 条评论
[…] 汇编(19)循环语句/LOOP指令/JCXZ指令/FOR/While/Do While […]