. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  课程设计1   修改版 ******  [待解决] 回复[ 1次 ]   点击[ 410次 ]  
wlzaini1314
[帖 主]   [ 发表时间:2011-04-26 19:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-15 22:31
assume cs:Code 
data segment 

    db '1975','1976','1977','1978','1979','1980','1981' 
    db '1982','1983','1984','1985','1986','1987','1988' 
    db '1989','1990','1991','1992','1993','1994','1995' 
     
    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479 
    dd 140417,197514,345980,590827,803530,1183000,1843000 
    dd 2759000,3753000,4649000,5937000 
     
    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037 
    dw 5635,8226,11542,14430,15257,17800 
     
    dw 0,0,0 
data ends 

stack segment 
   db 60 dup (0)    
stack ends 

code segment 
 start:mov ax,data 
       mov ds,ax 
     
       mov ax,stack 
       mov ss,ax 
       mov sp,60 
        
       mov ax,0b800h 
       mov es,ax 
        
       mov bp,0 
       mov di,0 
       mov si,0 
       mov bx,0 
       mov cx,21 
        
  s1: 
     push cx      
     mov cx,4 
 s21:mov ax,ds:[di] 
     mov es:[bp],al 
     mov ax,10
     mov es:[bp+1],al 
     inc di 
     add bp,2 
     loop s21 
     push di    
     sub bp,8
    
     mov ax,ds:[si+54h] 
     mov dx,ds:[si+56h] 
     mov cx,10 
     mov di,20h  
     call divdw  

     mov ax,ds:[bx+0a8h]
     mov dx,0 
     mov cx,10 
     mov di,40h 
     call divdw 
 
     mov ax,ds:[si+54h] 
     mov dx,ds:[si+56h] 
     mov cx,ds:[bx+0a8h]
     push bx
     call divdw1
     pop bx
     mov cx,10   
     mov di,60h     
     call divdw 
       
     add si,4 
     add bx,2 
     add bp,160 
     pop di 
     pop cx   
     loop s1 
        
 divdw1:push ax  
        mov ax,dx 
        mov dx,0 
        div cx 
        mov bx,ax 
        pop ax 
        div cx 
        mov dx,bx 
        ret 

 divdw:push bx
       push si
       mov  si,di
       mov  di,0
       
   dw1:push ax 
       mov ax,dx 
       mov dx,0 
       div cx 
       mov bx,ax 
       pop ax 
       div cx 
       push dx 
       mov dx,bx 
       inc di 
       mov  bx,cx  
       mov  cx,ax 
       jcxz jf 
       mov cx,bx 
       jmp short dw1
       
    jf:mov cx,di 
       mov di,si    
   jf1:pop ax 
       add al,30h 
       mov es:[bp+di],al 
       mov al,10 
       mov es:[bp+di+1],al 
       add di,2 
       loop jf1
       pop si
       pop bx
               
      ret     
            
 code ends 
 end start 
===================================================
assume cs:Code 
data segment 

    db '1975','1976','1977','1978','1979','1980','1981' 
    db '1982','1983','1984','1985','1986','1987','1988' 
    db '1989','1990','1991','1992','1993','1994','1995' 
     
    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479 
    dd 140417,197514,345980,590827,803530,1183000,1843000 
    dd 2759000,3753000,4649000,5937000 
     
    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037 
    dw 5635,8226,11542,14430,15257,17800 
     
    dw 0,0,0 
data ends 

stack segment 
   db 60 dup (0)    
stack ends 

code segment 
 start:mov ax,data 
       mov ds,ax 
     
       mov ax,stack 
       mov ss,ax 
       mov sp,60 
        
       mov ax,0b800h 
       mov es,ax 
        
       mov bp,0 
       mov di,0 
       mov si,0 
       mov bx,0 
       mov cx,21 
        
  s1:=== 开始循环年份 
     push cx     先将外层循环入栈 
     mov cx,4 
 s21:mov ax,ds:[di] 
     mov es:[bp],al 
     mov ax,10//高亮绿色 
     mov es:[bp+1],al 
     inc di 
     add bp,2 
     loop s21 
     push di    //将 DI 入栈 为了下次DW数据用到 
     sub bp,8=== 做完内循环  将 BP-8 恢复BP的值 循环4次 就是2^4次方 BP=8 
    
     mov ax,ds:[si+54h]==设置 DATA第二个数据 
     mov dx,ds:[si+56h] 
     mov cx,10 
     mov di,20h 
     mov ds:[0d8h],di  //将DI数据保存,DI为临时数据 
     mov di,0 
     call divdw   //跳转到DIVDW取ASCII码 

     mov ax,ds:[bx+0a8h]]==设置 DATA第三个数据 
     mov dx,0 
     mov cx,10 
     mov di,40h 
     mov ds:[0d8h],di //将DI数据保存,DI为临时数据 
     mov di,0 
     call divdw //跳转到DIVDW取ASCII码 
      
      
     mov ax,ds:[si+54h] //设置 DATA第四个数据,取平均工资 
     mov dx,ds:[si+56h] 
     mov cx,ds:[bx+0a8h] 
     call divdw1  // 跳转到DIVDW取平均工资 
     mov cx,10  //取完平均工资,做ASCII码 
     mov di,60h  
     mov ds:[0d8h],di //将DI数据保存,DI为临时数据 
     mov di,0 
     call divdw 
       
     add si,4 
     add bx,2 
     add bp,160 
     pop di 出栈到DI 做下次内层循环 
     pop cx  //外循环出栈 
     loop s1 
      
      
 divdw1:push ax //用于取平均工资 
        mov ax,dx 
        mov dx,0 
        div cx 
        mov ds:[0d2h],ax 
        pop ax 
        div cx 
        mov dx,ds:[0d2h] 
        ret 

 divdw:push ax 
       mov ax,dx 
       mov dx,0 
       div cx 
       mov ds:[0d2h],ax 
       pop ax 
       div cx 
       push dx 
       mov dx,ds:[0d2h] 
       inc di //这里的DI 是作为ASCII码传送到显存的循环次数 
       mov  ds:[0d4h],cx  //将除数保存 
       mov  cx,ax //检测CX是否为0,为0跳转到JF做ASCII码不为0继续循环 
       jcxz jf 
       mov cx,ds:[0d4h] 
       jmp short divdw 
    jf:mov cx,di  //将循环次数赋予CX 
       mov di,ds:[0d8h] 恢复DI的值 
   jf1:pop ax 
       add al,30h 
       mov es:[bp+di],al 
       mov al,10//高亮绿色 
       mov es:[bp+di+1],al 
       add di,2 
       loop jf1         
      ret     
            
 code ends 
 end start 
============================= 
汇编QQ群: 
25617704 
共同努力,哦耶 
=============================
wlzaini1314
[第1楼]   [ 回复时间:2011-04-26 19:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-15 22:31
回复:[贴 主]
------------------
下面为老版 上面是 修改后的
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved