3、辅助循环伪指令
(1)、终止循环伪指令
.BREAK
.BREAK  .IF condition
该伪指令用来终止包含它的最内层循环。前者是无条件终止循环,后者是仅当逻辑表达式condition为真时,才终止循环。
| .WHILE 1 | .REPEAT | |
| 
       …  | 
    
       …  | 
  |
| ENDW | .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 | |||