飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3755|回复: 2

[C/C++] 学完视频18 再写一次 dtoc 1234567890

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

    [LV.9]以坛为家II

    发表于 2011-1-6 19:04:39 | 显示全部楼层 |阅读模式
    学习了第18个视频,思路有所进步,再写一遍这个代码,比原来思路清楚多了。代码中与视频中不同一点:没有把转化成的字符先压入堆栈,而是直接放到了 _save_c 数据段,显示的时候从后向前显示。
    第一次代码地址: https://www.chinapyg.com/viewthread.php?tid=60715
    1. assume cs:code

    2. stack segment
    3.         dw 100 dup(0)
    4. stack ends

    5. data segment
    6.         _num        dd 1234567890
    7.         _save_c dw 20h dup(0)
    8. data ends

    9. code segment

    10. _div:       
    11.         xor si,si        ;必须清0,因为下面 _div_2 里面还要把 si 值放到 dx 里面
    12.         test dx,dx        ;测试高16位是否为 0
    13.         jz _div_2
    14.         push ax
    15.         mov ax,dx
    16.         xor dx,dx
    17.         div cx
    18.         mov si,ax
    19.         pop ax

    20. _div_2:                        ;低16位做除法
    21.         div cx
    22.         push dx
    23.         mov dx,si        ;上面 si 不清0 ,这里当 dx 为0时,si 的内容就会赋值给 dx,结果就错了
    24.         pop si
    25.         retn
    26. ;显示字符串       
    27. _show:                        ;初始化显示
    28.         mov ax,0b800h
    29.         mov es,ax
    30.         mov si,12*160+20*2
    31.         mov bx,offset _save_c
    32.         mov cx,di
    33.         inc cx                ;加1因为 cx=0 时就不显示了,而在 _save_c 偏移0位置还有数据
    34. _t:                        ;显示
    35.         mov ax,[bx+di]
    36.         mov ah,6        ;颜色
    37.         mov es:[si],ax
    38.         add si,2
    39.         dec di
    40.         loop _t
    41.         retn
    42. ;程序结束
    43. _over:
    44.         mov ax,4c00h
    45.         int 21h

    46. start:
    47.         mov ax,data
    48.         mov ds,ax
    49.         mov ax,stack
    50.         mov ss,ax
    51.         mov sp,200h
    52.         mov si,0
    53.         mov di,0
    54.         mov cx,10

    55.         mov bx,offset _num
    56.         mov ax,[bx]
    57.         mov dx,[bx+2]

    58. _s:        call _div
    59.         mov bx,offset _save_c
    60.         add si,30h
    61.         push cx
    62.         mov cx,si
    63.         mov [bx+di],cl
    64.         pop cx
    65.         inc di
    66.         test dx,dx
    67.         jnz _s
    68.         test ax,ax
    69.         jnz _s
    70.         call _show
    71.         jmp _over

    72. code ends
    73. end start
    复制代码
    stoc.jpg
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-2-19 22:08:39 | 显示全部楼层

                  

    支持关注中!












    燃文
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-3-21 00:55:25 | 显示全部楼层
    楼主很有想法
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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