鱼C论坛

 找回密码
 立即注册
查看: 2550|回复: 4

dword型数据转变如何得到各位ASICC码

[复制链接]
发表于 2012-11-15 10:03:14 | 显示全部楼层 |阅读模式
1鱼币
(ax)=dword型数据的低16位
(dx)=dword型数据的高16位

比如97479的十六进制为:17CC7H

谁写个32位的数据转换成ASCII码
代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-15 10:39:09 | 显示全部楼层
dtoc:       push si
            push di
            push bp
            push cx
            push bx
            mov bx,10
            mov si,0
            ;-----------保存数据
d_hys:      mov bp,ax
            ;-----------转移L位
            mov ax,dx
            xor dx,dx
            ;-----------H转AX D清零
            div bx
            ;-----------H/10
            mov di,ax
            ;-----------H结果=DI
            mov ax,bp
            ;-----------L重赋给AX
            div bx
            ;-----------REG+L/10  DX=余娄  H结果=DI
            ;===========          L结果AX
            
            mov cx,bp
            jcxz d_wk            
            ;-----------余数为空jmp 到出栈
            add dx,30h
            push dx
            inc si
            xor dx,dx
            ;------------余数+30H=ASCII
            mov dx,di
            ;------------H重赋给DX
            jmp d_hys
            ;------------判断H为0,不为0循环
            ;============          为0做L位除法
d_wk:       mov cx,si
            ;------------设定循环数
            jcxz d_ecs
            ;------------CX为0 jmpECS
            mov si,offset d4
            ;------------d4数据给SI        
d_cz:       pop ds:[si]
            inc si
            loop d_cz              
            ;-------------循环出栈

d_ecs:      pop bx
            pop cx
d_2:        pop bp
            pop di        
            pop si
            ret
俺写的,希望对你有帮助!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-15 14:39:59 | 显示全部楼层
我也来个。
assume cs:codesg,ds:datasg,es:table,ss:stack

table segment

  db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  db '1984','1985','1986','1987','1988','1989','1990','1991','1991'
  db '1993','1994','1995'
  ;以上是表示21年的21个字符串
  
   dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
   dd 345980,590827,803530,1183000,1843000,2795000,3753000,4649000,5937000
  ;以上是表示21年公司总收入的21个dword型数据
  
  dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  dw 11542,14430,15257,17800
  ;以上是表示21年公司雇员人数的21个word型数据
  
  dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239
  dw 260,304,333
  ;以上是表示21年公司人均收入
  
  dd 10 dup (0)
table ends

datasg segment
  
  db 1000 dup (0)
  
datasg ends

stack segment

  db 100 dup (0)
 
stack ends

codesg segment

  start:
          
            mov ax,datasg
                        mov ds,ax
                        
                    mov ax,table
                        mov es,ax
                        mov si,0
                        mov bp,0
                        
                        mov ax,stack
                        mov ss,ax
                        mov sp,100
                        
                        mov cx,21
        s7:                call dtoc
                        add bp,16               ;bp加16换行
                    add di,4                ;si+4
                        loop s7
                        
            mov ax,4c00h
            int 21h                        

                     

                
        dtoc: 
              push cx
                  push di
                  push si
          push bp
                  ;cx、si入栈


        s4:                           
              mov ax,es:[di+54h]
              mov dx,es:[di+56h]
         

                  

                  mov bx,10
                  
        s1:  mov bp,ax     ;转移到L位
                 
                 mov ax,dx     ;dx值等于ax
                  
                 xor dx,dx     ;-----------H转AX D清零
                 
                 div bx        ;H除以bx
         
                 mov di,ax     ;H结果=di
                 
                 mov ax,bp     ;ax植出栈,L重赋给ax
                 
                 div bx        ;-----------REG+L/10  DX=余娄  H结果=DI
                       ;===========          L结果AX           
                 
                 mov cx,bp     ;商为零cx
                 
                 jcxz d_wk     ;-----------余数为空jmp 到出栈

                 add dx,30h
         push dx
         inc si
         xor dx,dx
         ;------------余数+30H=ASCII
         mov dx,di
         ;------------H重赋给DX
         jmp s1
            ;------------判断H为0,不为0循环
            ;============          为0做L位除法

                 
        d_wk:    mov cx,si 
            ;------------设定循环数

            ;------------CX为0 jmpECS
          

                 jcxz s3       ;cx为零转移到s2
                  


                  
                  mov si,0
                  mov di,0            ;di等于0
                  
        s3:   pop ax              ;dx植出栈放入ax
          
                  mov es:[di+100h],al   ;[bp+di+05h]=al
                  add di,1                      ;di加1
                                                        
                   loop s3                 ;loop 循环
          
                  pop bp                                                        
                  mov cx,di
          
        s2:          mov al,es:[si+100h]     
                  mov ds:[si+bp+05h],al
                  
                  add si,1
                  
                  loop s2
                  



        okay: pop si
              pop di
                  pop cx                          
                  
                  ret

codesg ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-11-15 23:16:26 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-13 19:34:50 | 显示全部楼层
s0512 发表于 2012-11-15 23:16
嗯。。。。厉害。。。。楼主给力

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 12:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表