子程序名:B2TOBCD

; 子程序名:B2TOBCD
;
输入参数:AX=十六位二进制数
;
输出参数:CF=0,则AX=四位压缩型BCD码。CF=1,则要转换的数大于9999,AX不变。
;
使用寄存器:CX:存放除数,DX:存放中间结果。

B2TOBCD    PROC    FAR
    CMP        AX
, 9999
    JBE        TRAN    
; 低于等于/不高于时转移
    STC                 ; 置CF=1
    JMP        EXIT
TRAN:
    PUSH    CX
    PUSH    DX
    SUB        DX
, DX     ; DX清零
    MOV        CX , 1000      ; 计算千位数
    DIV        CX         ; (AX)<--(DX)(AX)/OPRD,(DX)<--(DX)(AX) MOD OPRD;1字=2字节
    XCHG    AX , DX     ; 商在DX中,余数在AX中
    MOV        CL , 4
    SHL        DX
, CL     ; DX左移4位
    MOV        CL , 100      ; 计算百位数
    DIV        CL         ; (AL)<--(AX)/OPRD,(AH)<--(AX)MOD OPRD
    ADD        DL , AL     ; 百位数加到DL中
    MOV        CL , 4
    SHL        DX
, CL     ; DX左移4位
    XCHG    AL , AH     ; 余数保存在AL中
    SUB        AH , AH     ; AH清零
    MOV        CL , 10      ; 计算十位数
    DIV        CL
    ADD        DL
, AL
    MOV        CL
, 4
    SHL        DX
, CL
    ADD        DL
, AH     ; 加个位数
    MOV        AX , DX     ; 结果送到AX中
    POP        DX
    POP        CX
EXIT:
    RET
B2TOBCD    ENDP
Posted on 2010-10-31 12:11 JimmyZhang 阅读(75) 评论(0)   编辑  收藏 引用

你可能感兴趣的:(子程序名:B2TOBCD)