汇编语言——十进制显示Bx的值

本例分两步实现。
(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

Leave a Reply

Your email address will not be published.