本例分两步实现。
(1)转换并保存结果
这一步将二进制数转换为十进制值,即求出十进制值各位上的数字。由于16位二进制数最大能表示的数是65535,所以,转换后,最多是一个万位的十进制数。转换的步骤就是:把要转换的数依次除以10000,1000,100和10,分别可以得到万位数字、千位数字、百位数字和十位数字。除以10得到的余数就是个位数字。程序中,将得到的这些数字先存入内存指定单元,供显示模块使用。
(2)显示
本例程序把转换和显示分成两个模块来实现,使得程序的结构清晰。
代码:
DATA SEGMENT
DECNUM DB 5 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV BX,65530 ;要转换的值
LEA SI,DECNUM
MOV DX,0
MOV AX,BX
MOV CX,10000
DIV CX
MOV [SI],AL;求得万位的值,存入指定单元
INC SI
MOV AX,DX ;上次计算的余数存在DX中
MOV DX,0
MOV CX,1000
DIV CX
MOV [SI],AL;求得千位的值,存入指定单元
INC SI
MOV AX,DX
MOV DX,0
MOV CX,100
DIV CX
MOV [SI],AL;求得百位的值,存入指定单元
INC SI
MOV AX,DX
MOV CL,10
DIV CL
MOV [SI],AL;求得十位的值,存入指定单元
INC SI
MOV [SI],AH ;此时,余数就是个位的值,
LEA SI,DECNUM
;以下代码开始显示存储在存储单元中的十进制数
MOV CX,5
DISP:
MOV DL,[SI] ;依次取出十进制数各位的值
OR DL,30H ;将取出的值转换为ASCII值
MOV AH,2
INT 21H ;利用DOS功能调用,显示
INC SI
LOOP DISP
MOV DL,'D'
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
0