鱼C论坛

 找回密码
 立即注册
查看: 1864|回复: 2

求帮我看一个数字转化进十进制表示的字符串的问题

[复制链接]
发表于 2012-7-8 20:33:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求将DATA段的数字转换成十进制表示的字符串放入DATA2段中:

assume cs:code
data segment
dd 2320001,8acbeffh,0fffe0001h,0ffffffffh,987654321
data ends
data2 segment
db 64 dup(0)
data2 ends
code segment
start:mov ax,data
      mov ds,ax
      mov ax,data2
      mov es,ax
      
      mov bx,0
      mov cx,5
    s:push bx
      mov ax,[bx]
      mov dx,[bx+2]
      mov bx,0
      mov si,0
      call dtoc
      pop bx
      add bx,4
      add si,0ah
      loop s
      
     mov ax,4c00h
     int 21h  
   
      
      dtoc:        
           push si
           push bx
        s1:
           mov cx,10
           call divdw
           add cl,30h
           mov es:[si+bx],cl
           mov cx,ax
           or cx,dx
           inc cx
           loop s1
           pop si
           pop bx
           ret
           
           
           
           
     divdw:push bx
           mov bx,ax
           mov ax,dx
           mov dx,0
           div cx
      
           push ax
           mov ax,bx
           div cx
      
           mov cx,dx
           pop dx
           pop bx
           ret
           
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-7-8 20:35:14 | 显示全部楼层
不懂为什么就死循环了,哪位大侠帮我看看,感激不尽!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-7-8 22:02:16 | 显示全部楼层
搞明白了,原来是CX没保存!!!
程序改良如下:assume cs:code
data segment
dd 2320001,8acbeffh,0fffe0001h,0ffffffffh,987654321
data ends
data2 segment
db 64 dup(0)
data2 ends
code segment
start:mov ax,data
      mov ds,ax
      mov ax,data2
      mov es,ax
      
      mov bx,0
      mov si,0
      mov cx,5
    s:           ;依次将DATA段的数据放入AX、DX寄存器,然后调用子程序DTOC实现转化
      mov ax,[bx]
      mov dx,[bx+2]
      call dtoc
      add bx,4
      add si,0ah
      loop s
      
     mov ax,4c00h
     int 21h  
   
      
      dtoc:        ;该子程序用于将AX、DX中的DW型数据以十进制表示的字符串放入ES段中
           push si
           push bp
           push cx
           push ax
           push dx ;将所有用到的寄存器入栈保存
           
           mov bp,9
        s1:
           mov cx,10
           call divdw
           add cl,30h
           mov es:[si+bp],cl
           sub bp,1
           mov cx,ax
           or cx,dx
           inc cx
           loop s1
           
           pop dx
           pop ax
           pop cx
           pop bp
           pop si
           ret
           
           
           
           
     divdw:            ;该子程序用于DW型除法计算
           push bx     ;将BX入栈保存
                       ;因为要用AX、DX传商,CX传余数,所以无须入栈保存
           mov bx,ax
           mov ax,dx
           mov dx,0
           div cx
      
           push ax
           mov ax,bx
           div cx
      
           mov cx,dx
           pop dx
           
           pop bx
           ret
           
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 06:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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