;子程序名: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