| 网站首页 | 技术文章 | 下载频道 | 博客 | 编程论坛 |
 
| 技术教程首页 | 开发语言 | WEB开发 | .NET技术 | 数据库 | 操作系统 | 网页制作 |
 
 
您现在的位置: 编程中国 >> 技术教程 >> 开发语言 >> 汇编 >> 汇编技术资料 >> 正文
  ►  进制数据输出的通用程序
进制数据输出的通用程序
作者:liyun2060    阅读人次:……    文章来源:本站原创    发布时间:2007/9/5    网友评论()条
 

原帖及讨论: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

 

 
文章录入:静夜思    责任编辑:静夜思 
  • 上一篇文章:

  • 下一篇文章:

  •  
    相关文章
    没有相关文章
    原创地带
    24小时热门帖子