风幻影 发表于 2012-7-8 20:33:49

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

求将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,
      mov dx,
      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:,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

风幻影 发表于 2012-7-8 20:35:14

不懂为什么就死循环了,哪位大侠帮我看看,感激不尽!!!

风幻影 发表于 2012-7-8 22:02:16

{:5_104:}搞明白了,原来是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,
      mov dx,
      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:,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
页: [1]
查看完整版本: 求帮我看一个数字转化进十进制表示的字符串的问题