问答题 阅读下列程序并说明其功能。
       LEA  SI,A
   LP:IN   AL,20
       AND  AL,0FH
       OR   AL,30H
       CMP  AL,'*'
       JZ   ENDP
       MOV  [SI],AL
       INC  SI
       OUT  30H,AL
       JMP  LP
   ENDP:HLT
【正确答案】LEA  SI,A    ;取A单元的首地址
   LP:IN    AL,20   ;从20端口读入一个字节数据到AL中
       AND   AL,0FH    ;屏蔽AL中的高4位内容
       OR    AL,30H    ;将AL中的内容变换成对应的ASCⅡ码
       CMP   AL,'*'    ;判断AL内容的是否为A'*'
       JZ    ENDP    ;是则结束
       MOV   [SI],AL    ;将AL中的内容存入[SI]中
       INC   SI    ;地址增1
       OUT   30H,AL    ;将AL中的内容输出到30H端口
       JMP   LP    ;继续
   ENDP:HLT
   程序功能为:不断地从20端口输入一个数据到AL中,取其低四位,并将其变换成对应的ASCⅡ码,把AL中的内容存入以A开始的单元中,并从30H端口输出,以‘*’号作为结束标志(该程序永远不会结束)。
【答案解析】由于CMP AL,‘*’语句中的‘*’为20H,而AL中的内容为30H~3FH,所以该比较语句的条件永远不能满足,也就意味着该程序段没有结束条件。本题的意图是通过阅读程序,从中可以发现程序的不足,以训练学生的编程能力。
       LEA  SI,A
   LP:IN   AL,20
       CMP  AL,'*'
       JZ   ENDP
       AND  AL,0FH
       CMP  AL,0AH
       JB   BC
       ADD  AL,07H
   BC:ADD  AL,30H
       MOV  [SI],AL
       INC  SI
       OUT  30H,AL
       JMP  LP
   ENDP:HLT