【正确答案】STACKSG SEGMENT STACK 'STACK'
DW 32 DUP(?)
STACKSG ENDS
DATASG SEGMENT
CR EQU 13
LF EQU 10
CRLF DB CR, LF,'$'
PROMPT DB 'PLEASE INPUT A NUMBER(0-3): ','S'
ERRORS DB 'YOUR INPUT IS WRONG!','$'
STRI DB 'THIS IS THE FIRST STRING.','$'
STR2 DB 'THIS IS THE SECOND STRING.','$'
STR3 DB 'THIS IS THE THIRT STRING.','$'
MENU DW NUM1,NUM2,NUM3
DATASG ENDS
EXTRASG SEGMENT
EXTRASG ENDS
CODESG SEGMENT
MAIN PROC FAR
ASSUME CS: CODESG, DS: DATASG, ES: EXTRASG, SS: STACKSG
MOV AX, DATASG
MOV DS,AX
LEA DX, PROMPT ;显示提示语
MOV AH,9
INT 21H
MOV AH,1 ;待用户输入字符
INT 21H
MOV CL, AL
LEA DX, CRLF ;输出按Enter键换行
MOV AH,9
INT 21H
CMP CL,'1' ;判断输入的字符是否在1~3的范围内,
;若不在此范围内则输出错误提示
JB ERROR
CMP CL,'3'
JA ERROR
AND CL, OFH ;判断输入的字符具体值,依此值跳至不同分支执行
DEC CL
XOR BH, BH
MOV BL, CL
SHL BX,1
JMP [MENU+BX]
NUM1: LEA DX, STR1
JMP DISP
NUM2: LEA DX, STR2
JMP DISP
NUM3: LEA DX, STR3
DISP: MOV AH,9
INT 21H
JMP EXIT
ERROR: LEA DX, ERRORS
MOV AH,9
INT 21H
EXIT: MOV AX, 4COOH
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN
【答案解析】[说明]以上多个例子都是既有分支结构又有循环结构,实际上,多数程序都是各种程序结构的组合。而且,循环结构可以看作是分支结构的一种特例,它只是多次走一个分支,只在满足循环结束条件时,走另一个分支罢了。