飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3047|回复: 1

[C/C++] 17课作业 dtoc dword型

  [复制链接]
  • TA的每日心情
    开心
    2024-3-7 15:25
  • 签到天数: 442 天

    [LV.9]以坛为家II

    发表于 2010-12-27 21:48:54 | 显示全部楼层 |阅读模式
    本帖最后由 sdnyzjzx 于 2010-12-27 21:57 编辑

    抛砖引玉,敬请指正!

    assume cs:code

    data segment

            dw 100 dup (0)

         j  dd 1024,1234567,238763,887766,345543,99990088
    data ends

    stack segment
            dw 100 dup (0)
    stack ends

    code segment

    start:  mov ax,data
            mov ds,ax
            mov ax,stack
            mov ss,ax
            mov sp,200

            mov bx,offset j                        ;要显示数据的偏移位置        
            mov si,0                                        ;保存数据转化为字符后偏移位置
            mov di,0       
            mov cx,6                                   ;要转化数据的个数

    _main:       
            push cx
            push bx
            mov cx,0ah
            mov ax,[bx]
            mov dx,[bx+2]
            call dtoc
            mov bx,8*160                        ;第8行开始显示
            add bx,di
            call show_str
            pop bx
            pop cx
            add bx,4
            loop _main

            mov ax,4c00h
            int 21h

    dtoc:               
    _s0:            call divdw
            cmp dx,0                                    ;商的高位是否为0
            jnz _s1
            cmp ax,0                                    ;商的低位是否为0
            jnz _s1
            add cx,30h
            mov [si],cx
            ret                                ;数据转化完成,返回
    _s1:                                        ;写入转化完成的数据为字符
            add cx,30h
            mov [si],cx
            inc si
            mov cx,0ah
            jmp _s0

    show_str:
           
            mov ax,0b800h
            mov es,ax
           
    xianshi:
            mov al,[si]
            mov byte ptr es:[bx],al                            ;要显示的字符
            mov byte ptr es:[bx+1],2                    ;要显示字符的颜色
            cmp si,0
            jz ok
            dec si
            add bx,2
            jmp xianshi
            
    ok:            add di,20                                     ;显示字符宽度
            ret
         
    divdw:        push si                                ;dword型数值除法运算
            push di
            mov si,ax                             ;save ax(L)t
            mov ax,dx
            mov dx,0
            div cx                          ;(H/N)
            mov di,dx                              ;save rem(H/N)
            push di
            mov dx,0                        ;int(H/N)
            mov di,2
            mul di
            mov bx,32768                           ;int(H/N)*65536
            mul bx
            pop di
            push ax                         ;save int(H/N)*65536
            push dx
            mov ax,di                        ;Load rem(H/N)
            mov di,2
            mul di
            mul bx
            add ax,si                        ;rem(H/N)*65536+L
            div cx
            mov si,ax
            mov cx,dx
            pop dx
            pop ax
            pop di
            add ax,si
            pop si
            ret

    code ends
    end start
    dtoc.jpg

    评分

    参与人数 1威望 +20 飘云币 +40 收起 理由
    Nisy + 20 + 40 不错哦

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-27 22:25:36 | 显示全部楼层
    Good Job~!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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