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

我的博客

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

[2011-07-30 13:19] 实验十,编写子程序3 ,字串的显示   望大家指正,~。~

由于题目要求将一个word型数据转变为十进制的字符串,因为在进行除法运算的时候有可能会发生除法溢出,因此,调用了一个不会产生溢出的16除法。。完整程序如下,希望大家指正

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

code segment 

 start:
   mov ax,date
   mov ds,ax
   mov si,0
   
   mov ax,0ffffh
   call dtoc ;转化为字串
   
   mov dh,0;行
   mov dl,0;列
   mov cl,2;color
   call show_str ;显示
   
   
   mov ax,4c00h
   int 21h
   
   
;dtoc program..
; 功能 将word型数据转变为十进制型的字符串,字符串以0为结尾符
;参数  (ax)=word型数据
      ; ds:si 指向字符串的首地址
 ; 返回值  无
 
 
 dtoc:
    ;各种寄存器的保存
        push bx
          push di
          push cx
          push si
          
        mov di,0
    
change:  mov bl,10
        mov bh,0
        call divword ;不发生溢出的16位除法
         add bx,30h
         push bx;  余数入?
        inc di ;di 计数?
         mov cx,ax ;将商移入cx 判断是否为0
         jcxz ok
         jmp short change
         
         ok:
         mov cx,di
         ;写入指定的地址中
         write:
         pop bx 
         mov byte ptr[si],bl
         inc si
         loop write
         mov byte ptr[si],0 ;字符串后写入0作为结束符
          
          pop si
          pop cx
          pop di
          pop bx
          ret 
         
  ;--------the end of dtoc        

;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 
      
      
        save:mov cl,[si]
          mov ch,0
          jcxz okend
          mov es:[di],cl
          mov es:[di+1],al
          
          add di,2
          inc si
          jmp short save
         
             okend:pop di
            pop dx
            pop cx
            pop ax
            pop es
          ret
         ;-------end of show_str
         
         
 ;divword program
     ;功能,进行不会产生溢出的除法运算,被除数为word型,除数为8位,结果为word型
     ;参数  (ax)=被除数  (bl)=除数
     ; 返回  (ah)=结果的高8位,(al)=结果的低8位  (bl)=余数
    divword: 
     ;寄存器的保存
     push cx
     
     mov cl,al;cl来保存低位
     mov al,ah
     mov ah,0
     
     div bl
     mov ch,al ;用ch来保存高位的商
     mov al,cl
     div bl 
     mov bl,ah
     mov ah,ch
     
     pop cx
     ret 
  ;------------------------end of divword....
  
  code ends
  end start
评论次数(0)  |  浏览次数(511)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码