进制数据输出的通用程序

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?boardID=126&ID=167744

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  http://www.bccn.net
*/ 作者: liyun2060    E-mail:blakcuttlefish@hotmail.com    
*/ 时间: 2007-9-5  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

昨天看了别人的文章,然后写了一个进制输出的程序,程序实在是太乱了。并且可调试性也很差。于是今天重新写了一个。

进制输出的原理很简单,就是先建一个‘0123456789ACDEF’的数据表

然后根据 除(2,10或者16 这要看你想以什么进制数据形式输出了) 取余,再拿商去除(2,10,16) 再取余的原理。  拿余数跟数据表比较,取得相应的ASCII码。

哎说不清楚,还是看程序吧。自认为程序写的还算清晰明了

assume cs:codes
codes  segment
  
start:
       mov ax,cs
       mov ds,ax
       mov ax,0b800h
      
       mov es,ax
      
       mov cl,2
       mov dl,011111111b
       call data_turn
       mov cx,ax
       mov di,160*10+40
moves: mov ah,[si]
        mov es:[di],ah
        inc si
        add di,2
        loop moves
       mov ah,04ch
       int 21h
      

;/**转换程序开始nc
;数制转换通用程序
;功能:将内存中的数据转换成以2进制 16进制 或 10进制 表示的 相应的ASCII码字符串
;进口参数CL  需要转换成的进制
;进口参数DL  被转换数
;出口参数AX  转换后的字符串的长度
;出口参数SI  转换后的字符串的起始偏移地址  段地址为CS

data_turn proc
            jmp turn_start
            table_t1 db '0123456789abcdef'
            table_t2 db 8 dup(?)  ;用来存储转换后的数据
turn_start: push ds
            push bx
            
            mov ax,cs
            mov ds,ax
            mov si,7    
            mov al,dl
            cmp al,0
            je dl_zero  ;如果被转换数为0 则直接将0写入table_t2+7处
        LP: xor bh,bh
            xor ah,ah
            DIV cl
            mov bl,ah
            mov bh,table_t1[bx]
            mov table_t2[si],bh
            dec si
            cmp al,0
            je turn_end
            jmp LP
            
            
dl_zero:  mov ds:[table_t2+7],'0'
           mov ax,1
           lea si,table_t2
           add si,7
           jmp over
turn_end:  mov ax,7
           sub ax,si
           lea si,table_t2
           add si,8
           sub si,ax
  
    over:  pop bx
           pop ds
           ret
data_turn  endp
;/**//转换程序结束

codes ends
end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值