灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4340回复:0

[汇编源码]进制数据输出的通用程序

楼主#
更多 发布于:2011-11-20 07:37
昨天看了别人的文章,然后写了一个进制输出的程序,程序实在是太乱了。并且可调试性也很差。于是今天重新写了一个。
进制输出的原理很简单,就是先建一个‘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
游客

返回顶部