本文讲述如何编写一段子程序BINIHEX,完成十六进制数输出的功能

STACKS   SEGMENT  STACK
         DW     20H DUP(?)
         TOP    LABEL WORD
         STACKS ENDS             --定义栈

DATAS    SEGMENT
         TABLE  DB '123456789ABCDEF'
         DATAS  ENDS     --建一张表,对应十六进制的表示方式

CODES    SEGMENT
         ASSUME CS:CODE,SS:STACKS,DS:DATAS
                 MAIN PROC FAR
                 MOV AX,STACKS
                 MOV SS,AX
                 LEA SP,TOP
         MOV AX,DATAS
         MOV DS,AX

         MOV   AX,1234
         CALL  BINIHEX

EXIT:
        MOV AH,4CH
            INT 21H
        MAIN   ENDP

        BINIHEX PROC  NEAR
        PUSH   CX
        PUSH   BX
        PUSH   DX
                          --保存现场

        LEA    BX,TABLE   --将表的首地址送到BX目的是使用XLAT指令
        MOV    DH,4       --循环的次数为四次
L1:             PUSH   AX
        AND    AX,F000H   --让AX和F000H做与运算,目的是保留前四位
        MOV    CL,4       --设置循环左移位数为4
        RCL    AX,CL      --循环左移四位
        XLAT              --换码指令:(AL)<--((BX)+(AL))
        MOV    DL,AL      --将AL中的值送到DL进行输出
        MOV    AH,2
        INT    21H
        POP    AX         --将求与运算之前的AX出栈
        RCL    AX,CL      --左移四位,进行下一次运算
        DEC    DH         --DH自减
        CMP    DH,0       --如果DH不等于0,则循环这段操作
        JNZ    L1

    POP   DX
      POP   BX
      POP   CX
    MOV    AH,4CH
    INT    21H
    BINIHEX ENDP