public.asm

来自「fx.asm 反序输出 cpc.asm 人机对话 DECHEX.ASM 」· 汇编 代码 · 共 114 行

ASM
114
字号
DATA    SEGMENT
INDAT   DB 50
        DB 0
        DB 50 DUP(0)
MSG1    DB 'Input A Number Not Large Then 255 : $'
MSG2    DB 'The DEC System of The Number is : $'    
DATA    ENDS
;------------------------------------
STACK   SEGMENT PARA STACK 'STACK'
        DB 100 DUP(?)
STACK   ENDS
;------------------------------------
CODE    SEGMENT
        ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN    PROC FAR
START:  PUSH DS
        MOV AX,0
        PUSH AX
        MOV AX,DATA
        MOV DS,AX
;----------------------------------------
        CALL CRLF
        MOV DX,OFFSET MSG1
        MOV AH,09H
        INT 21H

        MOV DX,OFFSET INDAT
        MOV AH,0AH
        INT 21H
        CALL CRLF

        MOV DX,OFFSET MSG2
        MOV AH,09H
        INT 21H
        
        MOV SI,OFFSET INDAT+1
        MOV CX,[SI]
CONVR:  PUSH CX
        CALL HEXTOBIN
        CALL BINTODEC
        POP CX
        LOOP CONVR

        CALL CRLF
        RET
MAIN    ENDP        
;---------------------------------------
HEXTOBIN  PROC NEAR
        MOV BX,0
        MOV SI,OFFSET INDAT+1
LP:     INC SI
        MOV AL,[SI]
        SUB AL,30H
        JL EXIT
        CMP AL,10
        JL ADD_TO

        SUB AL,27H
        CMP AL,0AH
        JL EXIT
        CMP AL,10H
        JGE EXIT
ADD_TO: MOV CL,4
        SHL BX,CL
        MOV AH,0
        ADD BX,AX
        JMP LP

EXIT:   RET
HEXTOBIN  ENDP
;---------------------------------------
BINTODEC  PROC NEAR
        MOV CX,10000
        CALL DEC_DIV
        MOV CX,1000
        CALL DEC_DIV
        MOV CX,100
        CALL DEC_DIV
        MOV CX,10
        CALL DEC_DIV
        MOV CX,1
        CALL DEC_DIV

        RET
BINTODEC  ENDP
;--------------------------------------
DEC_DIV PROC NEAR
        MOV AX,BX
        MOV DX,0
        DIV CX
        MOV BX,DX
        MOV DL,AL
        ADD DL,30H
        MOV AH,02H
        INT 21H

        RET
DEC_DIV ENDP
;--------------- -----------------------
CRLF    PROC NEAR
        MOV DL,0AH
        MOV AH,02H
        INT 21H
        MOV DL,0DH
        MOV AH,02H
        INT 21H
        RET
CRLF    ENDP
;------------------------------------
CODE    ENDS
        END START


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?