📄 BCD.txt
字号:
(16) 标号:HBCD 功能:单字节十六进制整数转换成单字节BCD码整数
入口条件:待转换的单字节十六进制整数在累加器A中。
出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
影响资源:PSW、A、B、R3 堆栈需求: 2字节
HBCD: MOV B,#100 ;分离出百位,存放在R3中
DIV AB
MOV R3,A
MOV A,#10 ;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
ORL A,B ;将十位和个位拼装成BCD码
RET
说明:
流程:
Decibin模块:
把输入的十进制数转换为二进制数。
Binihex模块:
把二进制数转换为十六进制数。
Crlf 模块:
清屏回车,换行 函数。
代码:
DATAREA SEGMENT
STRING DB "EXIT THE PROGRAM(INPUT CHARACTOR SHOULD BE Y/N)?",13,10,'$'
STRING1 DB "PLEASE INPUT THE DECIMAL ",13,10,'$'
DATAREA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAREA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATAREA
MOV DS,AX
REPEAT: CALL DECIBIN
CALL CRLF
CALL BINIHEX
CALL CRLF
LEA DX,STRING
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'Y'
JE EXIT1
CMP AL,'N'
JE REPEAT
EXIT1:
MOV AH,4CH
INT 21H
MAIN ENDP
DECIBIN PROC NEAR
CALL CRLF
LEA DX,STRING1
MOV AH,09H
INT 21H
MOV BX,00H
NEWCHARACTOR:
MOV AH,01H
INT 21H
SUB AL,30H
JL EXIT
CMP AL,39H
JG EXIT
CBW
XCHG BX,AX
MOV CX,0AH
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWCHARACTOR
EXIT:
RET
DECIBIN ENDP
BINIHEX PROC NEAR
MOV CH,4
ROTATE:
MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL PRINTF
ADD AL,07H
PRINTF:
MOV DL,AL
MOV AH,02H
INT 21H
DEC CH
JNZ ROTATE
RET
BINIHEX ENDP
CRLF PROC NEAR
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
RET
CRLF ENDP
CODE ENDS
END START
Top
2 楼tiancai1(ok)回复于 2005-01-23 14:11:23 得分 0 画了个流程图但无法上传
Top
3 楼pdy11(庞七,我什么时候才能当程序员啊)回复于 2005-01-23 14:42:10 得分 0 谢谢搂上的 我想要的是16进制转10进制的算法 给个算法 或者代码都可以谢谢 不用显示 只要能转成10进制 转成bcd码的也可以
Top
4 楼yuanqiongbo2002(玉斑指)回复于 2005-01-23 17:21:23 得分 0 多大的18进制数??
Top
5 楼tiancai1(ok)回复于 2005-01-23 19:14:00 得分 0 我看错,我以为十进制转十六进制,那知正好相反。我写了一个和上面差不多。
不知对否,你看看吧,把十六进制转成bcd码放在寄存器bx中.
DATAREA SEGMENT
STRING DB "EXIT THE PROGRAM(INPUT CHARACTOR SHOULD BE Y/N)?",13,10,'$'
STRING1 DB "PLEASE INPUT THE HEX(0~F) ",13,10,'$'
DATAREA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAREA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATAREA
MOV DS,AX
REPEAT: CALL HEXINTOBIC
CALL CRLF
LEA DX,STRING
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'Y'
JE EXIT1
CMP AL,'N'
JE REPEAT
EXIT1:
MOV AH,4CH
INT 21H
MAIN ENDP
HEXINTOBIC PROC NEAR ;十六进制转化为二进制;存放在BX寄存器中;
CALL CRLF
LEA DX,STRING1
MOV AH,09H
INT 21H
MOV BX,00H
NEWCHARACTOR:
MOV AH,01H
INT 21H
SUB AL,30H
JL EXIT
CMP AL,09H
JG NEXT
HAO: CBW
XCHG BX,AX
MOV CX,10H
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWCHARACTOR
NEXT:
CMP AL,16H
JG EXIT
SUB AL,07H
JMP HAO
EXIT:
RET
HEXINTOBIC ENDP
CRLF PROC NEAR
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
RET
CRLF ENDP
CODE ENDS
END START
说明:
流程:
Decibin模块:
把输入的十进制数转换为二进制数。
Binihex模块:
把二进制数转换为十六进制数。
Crlf 模块:
清屏回车,换行 函数。
代码:
DATAREA SEGMENT
STRING DB "EXIT THE PROGRAM(INPUT CHARACTOR SHOULD BE Y/N)?",13,10,'$'
STRING1 DB "PLEASE INPUT THE DECIMAL ",13,10,'$'
DATAREA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAREA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATAREA
MOV DS,AX
REPEAT: CALL DECIBIN
CALL CRLF
CALL BINIHEX
CALL CRLF
LEA DX,STRING
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'Y'
JE EXIT1
CMP AL,'N'
JE REPEAT
EXIT1:
MOV AH,4CH
INT 21H
MAIN ENDP
DECIBIN PROC NEAR
CALL CRLF
LEA DX,STRING1
MOV AH,09H
INT 21H
MOV BX,00H
NEWCHARACTOR:
MOV AH,01H
INT 21H
SUB AL,30H
JL EXIT
CMP AL,39H
JG EXIT
CBW
XCHG BX,AX
MOV CX,0AH
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWCHARACTOR
EXIT:
RET
DECIBIN ENDP
BINIHEX PROC NEAR
MOV CH,4
ROTATE:
MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL PRINTF
ADD AL,07H
PRINTF:
MOV DL,AL
MOV AH,02H
INT 21H
DEC CH
JNZ ROTATE
RET
BINIHEX ENDP
CRLF PROC NEAR
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
RET
CRLF ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -