十六进制数转换为二进制数程序
程序:
CRLF      MACRO                                          ;宏定义
          PUSH  AX                                      ;把AX压入堆栈
          PUSH  DX                                      ;把DX压入堆栈
          MOV    AH,  02H                                ;显示回车
          MOV    DL,  0DH
          INT    21H
          MOV    AH,  02H                                ;显示换行
          MOV    DL,  0AH
          INT    21H
          POP    DX                                      ;弹出DX
          POP    AX                                      ;弹出AX
          ENDM
DATA      SEGMENT                                      ;数据段
MESS      DB  'INPUT  HEXNUMBER:',  '$'
ERROR    DB  'INPUT  ERROR',  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
LLL:      MOV    AH,  09H                              ;显示提示信息
          MOV    DX,  OFFSET  MESS                      ;把MESS的偏移地址给DX
          INT    21H
          CRLF
          XOR    DX,  DX                                DX清零
二进制转换十六进制数
          MOV    BL,  04H                              ;接收字符个数
GGG:      MOV    AH,  01H                              ;接收字符
          INT    21H
          CMP    AL,  0DH                              AL-0DH(判断是不是回车)
          JZ    PPP                                    ;是回车,转PPP
          CMP    AL,  20H                              AL-20H(判断是不是空格)
          JZ    PPP                                    ;是空格,转PPP
          CMP    AL,  30H                              AL-30H(判断是不是ASCII0
          JB    KKK                                    ;不是,转KKK
          SUB    AL,  30H                    AL=AL-30H(将ASCII码转换成十六进制数)
          CMP    AL,  0AH                              AL-0AH
          JB    GETS                                  ;结果小于等于0,跳转GETS
          CMP    AL,  11H                              AL-11H
          JB    KKK                                  ;结果小于等于0,跳转KKK
          SUB    AL,  07H                              AL=AL-07H
          CMP    AL,  0FH                              AL-OFH
          JBE    GETS                                  ;结果大于等于0,跳转GETS
          CMP    AL,  2AH                              AL-2AH
          JB    KKK                                  ;结果小于等于0,跳转KKK
          CMP    AL,  2FH                              AL-2FH
          JA    KKK                                  ;结果大于0,跳转KKK
          SUB    AL,  20H                              AL=AL-20H
GETS:    MOV    CL,  04H                              CL=04H
          SHL    DX,  CL                              DX左移4
          XOR    AH,  AH                              AH清零
          ADD    DX,  AX                              DX=DX-AX(二进制数送DX
          DEC    BL                                    BL=BL-1
          JNZ    GGG                                  BL非零,跳转GGG(继续接收)
          CRLF
          CALL  ZHXS                                  ;调用ZHXS
          CRLF
          JMP    LLL                                  ;跳转LLL
KKK:      PUSH  DX                                    ;把DX压入堆栈
          CRLF
          MOV    AH,  09H                              ;显示错误提示信息
          MOV    DX,  OFFSET  ERROR                    ;把ERROR的偏移地址给DX
          INT    21H
          POP    DX                                    ;弹出DX
PPP:      CRLF
          CALL  ZHXS                                  ;调用ZHXS
          MOV    AX,  4C00H                            ;返回DOS
          INT    21H
ZHXS      PROC                                        ;显示子程序
          MOV    CX,  0010H                            CX=0010H
          MOV    BX,  DX                              BX=DX
TTT:      ROL    BX,  1                                BX左移一位
          MOV    DL,  BL                              DL=BL
          AND    DL,  01H                              DL高位清零

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。