ITEEDU

3、辅助循环伪指令

(1)、终止循环伪指令

 .BREAK 
 .BREAK   .IF condition

该伪指令用来终止包含它的最内层循环。前者是无条件终止循环,后者是仅当逻辑表达式condition为真时,才终止循环。

.WHILE?1

…

.BREAK .IF condition

…

ENDW .REPEAT

…

.BREAK .IF condition

…

.UNTIL 0 

对于以上二个循环,如果没有指令来终止循环的话,它们都将进入死循环状态,但如果在该层循环体内,存在伪指令“.BREAK .IF condition”的话,那么,当逻辑表达式condition为真时,该循环就会被终止了。

(2)、循环继续伪指令

 .CONTINUE 
  .CONTINUE .IF condition

该伪指令用于直接跳转到包含它的最内层循环的计算循环条件表达式的代码处。前者是无条件转移到计算循环条件表达式的代码处,后者是仅当条件表达式condition为真时,才进行这样的跳转。

辅助循环伪指令.BREAK和.CONTINUE只能在伪指令.WHILE-.ENDW和.REPEAT-.UNTIL的循环体内使用。

例6.12 显示9个数字字母'1'~'9',26个大写字母,和显示任意输入的数字字符,并用按“回车”键来结束本程序的运行。

解:


DATA1 SEGMENT

MSG1 DB 13, 10,?"Iteration: "

NUM1 DB '1', "$"

MSG2 DB 13, 10,?"Alphabet: $"

NUM2 DB 'A', " $"

MSG3 DB 13, 10, "Type digits, then press ENTER: $"

DATA1 ENDS

CODE1 SEGMENT

ASSUME CS:CODE1, DS:DATA1

START: MOV AX, DATA1

MOV DS, AX

MOV CX, 9

MOV AH, 09H

MOV DX, OFFSET MSG1

.REPEAT

INT 21H

INC NUM1 ;显示Iteration: 1,2,~,9

.UNTILCXZ

MOV DX, OFFSET MSG2

INT 21H ;显示字符串"Alphabet:"

MOV AH, 09H

MOV DX, OFFSET NUM2

.REPEAT

INT 21H

INC NUM2 ;显示当前字母

;当前字母向后移

.UNTIL NUM2 > 'Z' ;显示整个大写字母表

MOV AH, 09H

MOV DX, OFFSET MSG3

INT 21H

.WHILE?1 ;循环条件为永真的循环

MOV AH, 07H

INT 21H ;不带回显地从键盘读一个字符

.BREAK .IF AL == 13 ;如果输入“回车”键,则终止循环

.CONTINUE .IF (AL<'0') || (AL>'9') ;如果字符不是数字字符,则继续循环

MOV DL, AL

MOV AH, 02H

INT 21H ;显示所输入的数字字母

.ENDW

MOV AX, 4C00H

INT 21H

CODE1 ENDS

END START