从键盘输入数据并显示(微机原理)

CRLF  MACRO
      MOV  AH,02H
      MOV  DL,0DH
      INT  21H
      MOV  AH,02H
      MOV  DL,0AH
      INT  21H
ENDM
DATA  SEGMENT
MARK  DB ?
MESS  DB  '输入四位十六进制数,按回车键转化为二进制数,空格键结束!',0DH,0AH,'输入:$'
ERROR  DB 0DH,0AH, '输入错误!',0DH,0AH,'$'
DATA  ENDS
STACK  SEGMENT
STA  DW  32 DUP(?)
TOP  DW  ?
STACK  ENDS
CODE   SEGMENT
ASSUME  CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:  MOV  AX,DATA
      MOV  DS,AX
      MOV  ES,AX
      MOV  SP,TOP
HEAD:   CRLF
      MOV  MARK,0
      MOV  AH,09H
      LEA  DX,MESS
      INT  21H            ;显示提示输入的信息
      CALL GETNUM         ;接收键入数值送DX
      CMP  MARK,01H
      JE   HEAD
      MOV  CX,0010H       ;16位
      MOV  BX,DX
TTT:    ROL  BX,1           ;循环左移1位
      MOV  DL,BL
      AND  DL,01H         ;屏蔽掉高7位
      ADD  DL,30H
      MOV  AH,02H
      INT  21H            ;显示二进制位对应的ASCII字符
      LOOP  TTT
      JMP   HEAD
FINI:    MOV   AX,4C00H
      INT   21H            ;返回DOS
GETNUM  PROC  NEAR           ;子程序,接收键入数值送DX
      PUSH  CX
      XOR   DX,DX
GGG:    MOV  AH,01H
      INT  21H
      CMP  AL,0DH          ;输入为回车,则进行转换
      JE   PPP
      CMP  AL,20H          ;输入为空格,则退回DOS
      JE   FINI
      CMP  AL,30H
     JB   KKK
     SUB  AL,30H
     CMP  AL,0AH
     JB   GETS
     CMP AL,11H
     JB   KKK
     SUB  AL,07H
 CMP  AL,0FH
     JBE  GETS         
     CMP  AL,2AH
     JB   KKK
     CMP  AL,2FH
     JA   KKK
     SUB  AL,20H
GETS:   MOV  CL,04
     SHL  DX,CL
     XOR  AH,AH
     ADD  DX,AX
     JMP  GGG
KKK:    MOV  AH,09H
     MOV  DX,OFFSET ERROR
     INT  21H
     MOV  MARK,01H
PPP:    PUSH  DX
     CRLF
     POP  DX
     POP  CX
     RET
GETNUM  ENDP
CODE   ENDS
  END START

你可能感兴趣的:(从键盘输入数据并显示(微机原理))