BCD2BIN PROC
PUSH AX
PUSH CX
PUSH BX
PUSH DX
PUSH SI
MOV CL,08H
LB :
SAL DH,1
JC PRTONE
CMP CL,04H
JG SKP3
MOV DL,48
MOV AH,02H
INT 21H
JMP SKP3
PRTONE: CMP CL,04H
JG SKP3
MOV DL,49
MOV AH,02H
INT 21H
SKP3: DEC CL
CMP CL,00H
JE SKP4
JMP 040H
SKP4: MOV DL,' '
MOV AH,02H
INT 21H
POP SI
POP DX
POP BX
POP CX
POP AX
RET
BCD2BIN ENDP
这是将bcd数转换为二进制数的程序的一部分。任何人都可以解释一下这背后的逻辑吗?我可以通过查看互联网了解这些说明,但这样做的逻辑/算法是什么?谢谢!
答案 0 :(得分:0)
这段代码设计得很糟糕(比必要的慢,而且比必要的读取更难)。它等同于:
PUSH AX
PUSH CX
PUSH BX
PUSH DX
PUSH SI
MOV CL,04H
SAL DH,4
LB:
SAL DH,1
JC PRTONE
MOV DL,'0'
MOV AH,02H
INT 21H
JMP SKP3
PRTONE:
MOV DL,'1'
MOV AH,02H
INT 21H
SKP3:
DEC CL
JNE LB
MOV DL,' '
MOV AH,02H
INT 21H
POP SI
POP DX
POP BX
POP CX
POP AX
RET
..可以进一步改进:
PUSH AX
PUSH CX
PUSH BX
PUSH DX
PUSH SI
MOV CL,04H
SAL DH,4
LB:
MOV DL,'0'
SAL DH,1
ADC DL,0
MOV AH,02H
INT 21H
DEC CL
JNE LB
MOV DL,' '
MOV AH,02H
INT 21H
POP SI
POP DX
POP BX
POP CX
POP AX
RET
..可以展开:
PUSH AX
PUSH CX
PUSH BX
PUSH DX
PUSH SI
MOV DL,'0'
SAL DH,5
ADC DL,0
MOV AH,02H
INT 21H ;Display bit 3 as '0' or '1'
MOV DL,'0'
SAL DH,1
ADC DL,0
MOV AH,02H
INT 21H ;Display bit 2 as '0' or '1'
MOV DL,'0'
SAL DH,1
ADC DL,0
MOV AH,02H
INT 21H ;Display bit 1 as '0' or '1'
MOV DL,'0'
SAL DH,1
ADC DL,0
MOV AH,02H
INT 21H ;Display bit 0 as '0' or '1'
MOV DL,' '
MOV AH,02H
INT 21H ;Display a space
POP SI
POP DX
POP BX
POP CX
POP AX
RET
基本上,它所做的只是打印4个二进制数字(来自DH的最低4位),然后是空格。