设计一多分支程序,要求从键盘输入数字‘0’~‘9’,以决定转向哪一分支。

设计一多分支程序,要求从键盘输入数字‘0’~‘9’,以决定转向哪一分支。
【正确答案】:①CODE1  SEGMENT
    ASSUME CS:CODE2
START:MOV AH,1
   INT 21H
   CMP AL,30H
   JE PROC 0
   CMP AL,31H
   JE PROC 1
   CMP AL,32H
   JE PROC 2
   .
   .
   .
PROC0:……
   .
   .
   .
PROC1:……
   .
   .
   .
PROC2:……
   .
   .
   .
   MOV AH,4CH
   INT 21H
CODE1 ENDS
    END START
②CODE2 SEGMENT
    ASSUME CS:CODE2
START:MOV AH,1
    INT 21H
    CMP AL,30H
    JB START
    CMP AL,39H
    JA START
    SUB AL,30H
    MOV AH,0
    LEA BX,TAB
    ADD BX,AX
    JMP BX
    .
    .
    .
TAB: JMP SHORT PROC0
    JMP SHORT PROC1
    JMP SHORT PROC2
    .
    .
    .
    MOV AH,4CH
    INT 21H
CODE2 ENDS
    END START
【题目解析】:第一种方法是普通的比较转移判断;第二种方法是转移表法。从键盘输入的字符都是ASCII码形式,第一种方法:首先让输入的字符与30H相比,如果相等(即如果从键盘输入的是‘0’),就到过程0处,如果不相等,就与31H相比,如果相等(即如果从键盘输入的是‘1’),就到过程1处,如果不相等,就与32H相比,如果相等(即如果从键盘输入的是‘2’),就到过程2处,等等,直到与39H比完。第二种方法:从键盘输入一个字符,如果比30H小,则重新输入,如果比39H大,则重新输入。如果是30H到39H之间的字符,继续往下执行,让这个字符减去30H,得到纯数字,把AH清零。取地址表的首地址存入BX,让BX与AX相加,得到偏移地址,跳到对应的过程处执行。