zoukankan      html  css  js  c++  java
  • 汇编将数据以十进制格式显示在屏幕上

       子程序描述

    名称:dtoc

    功能:将word型数据转变为表示十进制数的字符串

    参数:(ax)=word型数据
            ds:si指向字符串的首地址

    应用举例:将数据12666以十进制形式在屏幕的8行3列,用绿色显示出来。

    分析: 要得到字符串“12666”,就是要得到一列表示该字符的ascii吗,31h,32h,36h,36h,36h.

    十进制数码字符对应的ascii=十进制数码值+30h

    看我最开始写的一段代码,是有问题的,不能逆序输出,输出的是66621

    dtoc:
         push ax
         push bx
         push cx
         push dx
         push si
         
          mov bx,10
       s: mov dx,0 
          
          div bx;ax存放商,dx余数
          add dl,30h  ;dh 没用
          
          mov  ds:[si],dl
          inc si
          mov cx,ax
          jcxz dtoc_ok 
          jmp short s
          
     dtoc_ok:     pop si
          pop dx
          pop cx
          pop bx
          pop ax
          ret

       怎么才能逆序输出呢?没有什么好的办法,把结果一个一个保存到栈中,注意栈是以字为操作单位的,而且,为了正确的循环,我们还有统计余数的个数。

    assume  cs:code
    data segment
    db
    16 dup(0) data ends code segment start: mov ax,12666 mov bx,data mov ds,bx mov si,0 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_str mov ah,4c int 21h dtoc: push bx push cx push ax push si push bx mov bx,0 s1: mov cx,10d mov dx,0 div cx ;dx余,ax商 mov cx,ax jcxz s2 add dx,30h push dx inc bx ;bx是统计余数的个数 jmp s1 s2: add dx,30h ;s2很重要,不能忽略 push dx inc bx ;再进行一次栈操作(补充当"商为零而余数不为零"时的情况) mov cx,bx mov si,0 s3: pop ax mov [si],al inc si loop s3 ok: pop bx pop si pop ax pop cx pop dx ret ;数值显示的子程序定义结束 show_str: push ax push bx push cx push dx push es ;bx=160*(lines-1) sub dh,1 mov al,160 mul dh mov bx,ax ;ax=lie*2-2 mov al,2 mul dl sub ax,2 add bx,ax ; 偏移地址存在bx中了 mov ax,0b800h mov es,ax mov dl,cl ;dl存放字符颜色属性 mov ch,0 s_show_str: mov cl,ds:[si] mov es:[bx],cl jcxz ok_show_str mov es:[bx+1],dl inc si add bx,2 jmp short s_show_str ok_show_str: pop es pop dx pop cx pop bx pop ax ret code ends end start


    可以用下面的代码简化:

      mov di,0 ;di计数
          mov  bx,10
        s:mov dx,0
          div bx ;dx 余 ax 商
          mov cx,ax
          add dx,30h
          push dx
          inc di
          jcxz s1
         
          jmp short s
          
           
        s1:    mov cx,di
        s2:  pop ax
        
            mov ds:[si],al;
            
            inc si
            loop s2
         
  • 相关阅读:
    oracle中pro*c的学习
    影响因子最大的国外计算机科学期刊50种
    eclipse3.6安装subversive插件
    WebLogic、WebSphere、JBOSS、Tomcat之间的区别
    hibernate.hbm.xml详解
    DotSpatial
    FLARtoolkit技巧:使用彩色marker
    全新体验 腾讯正式发布Sliverlight QQ
    ARToolKit技术视频欣赏
    写给未来的妻子你
  • 原文地址:https://www.cnblogs.com/youxin/p/2530837.html
Copyright © 2011-2022 走看看