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

我的博客

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

[2008-01-15 14:25] 10-3

图片载入中
数值显示 
问题:编程,将data段中的数据以十进制的形式显示出来。 
子程序描述: 
名称:dtoc 
功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。 
参数:(ax) = word 型数据 
      ds:si指向字符串的首地址 
返回:无 


assume cs:code   

data segment   
   db 10 dup(0)  
data ends  
stack segment 
   db 16 dup(0) 
stack ends 
code segment   
 start:  
    mov ax,12666  
    mov bx,data  
    mov ds,bx  
    mov bx,stack 
    mov ss,bx 
    mov sp,16;栈存放计算后的数字 

    mov si,0  
    call dtoc  
    mov dh,8  
    mov dl,3  
    mov cl,2  
    call show_str  
      
    mov ax,4c00h  
    int 21h  

;数值显示---------------  
   dtoc:  
    push ax  
    push bx  
    push cx  
    push dx  
    push si 
    push di  

    mov si,0  
 s1:  
    mov bx,10  
    mov dx,0  
    div bx  
    add dx,30h  
    ;mov [si],dx 
    push dx 
    add si,1    ;结果的数字个数 
    mov cx,ax  
    jcxz ok     
    jmp s1  

  ok:  
    mov di,0  ;指向ds 
    mov cx,si ;数字个数 
  s2: 
    pop ax 
    mov [di],al    ;存到ds段内,用于调用显示子程序显示 
    inc di 
    loop s2  
     
    pop di 
    pop si  
    pop dx  
    pop cx  
    pop bx  
    pop ax  
    ret  

;---------显示字符串---------   
;子程序描述:   
;名称:show_str   
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。   
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=颜色,ds:si指向字符串的首地址。   
;返回:无 
show_str:  
       push ax                
       push bx                 
       push cx                 
       push si                ;指向字符串变量  
         
       mov ax,0b800h   
       mov es,ax           ;定义显存段起始段地址   
         
       mov al,160   
       mul dh                
       mov bx,ax              
       mov al,2   
       mul dl  
       add bx,ax           ;存放显存起始地址  
         
       mov al,cl           ;将颜色属性暂存al中    
  show_str_loop:   
       mov ch,0   
       mov cl,[si]   
       jcxz show_str_ret   ;判断字符为0时结束   
       mov ch,al  
       mov es:[bx],cx  
       add si,1   
       add bx,2  
       jmp show_str_loop   
         
 show_str_ret:   
       pop si   
       pop cx   
       pop bx   
       pop ax   
       ret     ;返回主程序  

;----------------------- 
;名称:Divdw  
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。  
;参数:(ax)=dword型数据的低16位  
;      (dx)=dword型数据的高16位  
;      (cx)=除数  
;返回:(ax)=结果的低16位  
;      (dx)=结果的高16位  
;      (cx)=余数  

 divdw:            
    push si   
    push di  
          
    mov di,ax      ;将低16位ax暂存于bx    
    mov ax,dx      ;将高16位进行除法运算   
    mov dx,0            
    div cx   
    mov si,ax      ;将int(H/N)暂存于si  
     
    mov ax,di                     
    mov cx,dx      ;将最终余数给cx      
    mov dx,si     
            
    pop di  
    pop si   
    ret   

code ends 
end start
评论次数(1)  |  浏览次数(408)  |  类型(汇编作业) |  收藏此文  | 

[  zysong   发表于  2008-01-15 15:14  ]

不错,支持一下。

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