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

最后修改:2022 年 03 月 08 日
如果觉得我的文章对你有用,请随意赞赏