汇编网首页登录博客注册
qingpengchen2011的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
友情链接

[2011-07-30 13:55] 为课程设计1准备的显示dword型数据的子程序

assume cs:code,ds:date
date segment
  dw 16 dup(0)
date ends

code segment
   start:
     mov ax,date
     mov ds,ax
     mov si,0
     
     mov dx,0013h
     mov ax,2884h
     
     call dwordtoc
     
     mov dh,0
     mov dl,0
     mov cx,2
     call show_str
     
     mov ax,4c00h
     int 21h

;the shor_str 
    ;the intruduction of the show_str
    
    ;名称:SHOW_STR
    ;功能:在指定的的位置,指定的颜色,显示一个用0结束的字符串
    ;参数  (dh)=行号 (取值范围0-24) (dl)=列号(取值范围0-79)  (cl)=颜色 ds:si 指向字符串首地址
    ;返回值: none
    show_str:
      ;save the register values
      push es
      push ax
      push cx
      push dx
      push di
      
      ;work out the addess 
      mov al,160
      mov ah,0
      mul dh
      mov di,ax
      
      mov al,2
      mov ah,0
      mul dl
      add di,ax
      
      mov ax,0b800h
      mov es,ax
      mov al,cl ;get the attribute 
      
      write:
         mov cl,[si]
          mov ch,0
          jcxz ok
          mov es:[di],cl
          mov es:[di+1],al
          
          add di,2
          inc si
          jmp short write
          ok:
            pop di
            pop dx
            pop cx
            pop ax
            pop es
          ret
         ;-------end of show_str

;dwordtoc 
;功能  将dword型数转变为表示十进制的字符串,字符串以0为结尾符
;参数 (ax)=dword型数据的低16位  (dx)=dword型数据的高16位
      ; ds:si 指向字符串的首地址
;返回  无

dwordtoc:

    ;各种寄存器的保存
    push si
    push di
    push cx
    push dx
    push bx
    
       

    mov di,0 ;用来保存字符的长度
    change:
         mov cx,10
           call divdw  ;呼叫不溢出除法
           add cx,30h
           push cx
           inc di ;将余数入栈,并增加字符计数
           mov cx,dx
           jcxz ok0 ;判断高位商是否为0,不为0直接再chnange
           jmp short change



         ok0:
             mov cx,ax
             jcxz ok1 ;判断低位商是否为0
             jmp short change
           


          ok1:
             mov cx,di
             write_str:
                 pop bx
                   mov [si],bl
                   inc si
                   loop write_str
                   mov [si],0 ;字符后加0为结束符
                   
            ;寄存器出栈
            pop bx
            pop dx
            pop cx
            pop di
            pop si
            ret 
            
            
;-------------------end of dwordtoc
             





 ; the divdw
     ; 功能:进行不会产生除法溢出的运算,被除数为dword型,除数为word型,结果为dword型
     ;参数:(ax)=dword型数据的低16位
      ;     (dx)=dword型数据的高16位
      ;     (cx)=除数
     ;返回值 :(dx)=结果的高16位,(ax)=结果的低16位 (cx)=余数
     divdw:
     
     ;保存寄存器的值
       push bx
       push ax ;低位入栈保存
       
       ;构造高位除法
       mov ax,dx
       mov dx,0
       
       div cx ;除法运算后,dx存放高位的余数,ax 存入高位的商
       
       mov bx,ax ;将高位商存入bx
       pop ax ;低位出栈, 此时dx中存放着高位除法运算后的余数
       
       div cx ; 运算后,ax存放着低位的商,dx存放着低位的余数.-->即为整个除法运算的余数
       
       mov cx,dx ;将余数存入cx
       mov dx,bx ;高位商存入dx
       
       ;寄存器恢复
       pop bx
       ret 
    ; divdw ...ends       
code ends
end start
评论次数(1)  |  浏览次数(508)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2011-08-02 17:33  ]

继续想课程设计1前进

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码