. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  droc 32位的 帮忙看看  [待解决] 回复[ 0次 ]   点击[ 280次 ]  
static
[帖 主]   [ 发表时间:2011-01-03 18:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12
;名称:dtoc
;功能:将dwort型数据转变为表示十进制数的字符串,字符串以0位结尾符
;参数:(ax)=dword型数据的低16位
;      (dx)=dword型数据的高16位
;       ds:si指向字符串的首地址  
;返回:无

assume 
data segment
db 10 dup (0)
data ends

code segment
        start:
        mov bx,data
        mov ds,bx
        mov si,0
        
        ;下面的赋值是调试用的
        mov ax,12666
        mov dx,12666
        call dtoc
        
        mov dh,8
        mov dl,3
        mov cl,7
        mov si,0
        call show_str
        
        dtoc:
        push ax
        push bx
        push cx
        push dx
        push si
        push di
        
        xor di,di
        xor bx,bx

        
        s1:
        mov cx,10
        call divdw
        mov bx,cx;把余数给bx
        jcxz quit
        add bx,30h
        inc di;计数用
        push bx
        
        jmp short s1
        
        quit:
        mov cx,di
        s2:
        pop bx
        mov ds:[si],bl
        inc si
        loop s2
        
        pop di
        pop si
        pop dx
        pop cx 
        pop bx
        pop ax
        ret
        
        divdw: 
        push ax 
        mov ax,dx 
        mov dx,0 
        div cx 
        ;结果 dx位余数亦下一次计算的被除数的高位,ax为商 
         
        mov bx,ax;bx为高16位 
        pop ax 
        div cx; ax为低16位,dx为余数 
        mov cx,dx 
        mov dx,bx 
         
        ret 

    show_str: 
        ;保护现场 
        push ax 
        push bx 
        push cx 
        push dx 
        push si 
        push di 
         
        ;计算显示位置,最终ax存放最终显示位置 
        mov ax,0 
        sub dh,1 
        mov al,dh 
        mov ah,160 
        mul ah 
        mov dh,0 
        mov bx,ax 
        sub dl,1 
        mov al,dl 
        mov ah,2 
        mul ah 
        add ax,bx 
         
        ;准备显示字符串 
        mov bx,0b800h 
        mov es,bx 
        mov di,ax 
        xor bx,bx 
        mov bl,cl 
        ;设置字符以及字符属性 
        s10: 
        mov ch,ds:[si];ch存放字符 
        mov es:[di],ch 
        mov es:[di+1],bl;bl存放字符数形 
        mov cl,0 
        jcxz quit1 
        inc si 
        add di,2 
        jmp short s10 
         
        ;现场恢复 
        quit1: 
        pop di 
        pop si 
        pop dx 
        pop cx 
        pop bx 
        pop ax 
        ret
        
        mov ah,4ch
        int 21h
        
        code ends
        end start


帮忙看看
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved