. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  课程设计1(有点长,应该可以优化的更简短)  [待解决] 回复[ 0次 ]   点击[ 18次 ]  
rocky_ton
[帖 主]   [ 发表时间:2024-05-22 12:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2024-05-05 10:34
data ends

table segment

    db 21 dup('year summ ne ?? ')

table ends

codesg segment

start:          
       mov ax,data
       mov ds,ax
       mov ax,table
       mov es,ax
       mov bx,0
       mov si,0
       mov di,0
       mov cx,21

   s:  mov dx,cx
       mov cx,4
  s0:  mov al,[di]
       mov es:[bx][si],al
       inc si
       inc di
       loop s0

       mov si,0
       add bx,10h
       mov cx,dx
       loop s
       
       mov bx,0
       mov cx,21 

   s1: mov dx,cx
       mov cx,2
   s2: mov ax,[di]
       mov es:[bx].5[si],ax
       add si,2
       add di,2
       loop s2

       mov si,0
       add bx,10h
       mov cx,dx
       loop s1

       mov bx,0
       mov cx,21

   s3: mov ax,[di]
       mov es:[bx].0ah[si],ax
       add di,2
       add bx,10h
       loop s3
       
       mov bx,0
       mov cx,21

   s4: mov ax,es:[bx].5[si]
       add si,2
       mov dx,es:[bx].5[si]
       mov si,0
       div word ptr es:[bx].0ah[si]
       mov es:[bx].0dh[si],ax
       add bx,10h
       loop s4             

       mov dh,3             
       mov dl,5             
       mov cl,2

       call show_str            

       mov bx,0   
       mov ax,table          
       mov byte ptr es:[si],0    
       inc si                

      call ddtoc              
       mov dh,23           
       mov dl,20           
       mov cl,2
       sub si,2
       mov di,si               

      call show_str1          

       mov bx,0   
       mov di,0ah  
       mov si,160h  
       mov byte ptr es:[si],0   
       inc si                

      call dwtoc              
       
       mov dh,23   ;起始行数
       mov dl,40   ;起始列数
       mov cl,2
       sub si,2
       mov di,si               

      call show_str1           
        mov bx,0   
        mov di,0dh  
        mov si,160h  
        mov byte ptr es:[si],0  
        inc si                

        call dwtoc               
 
        mov dh,23   
        mov dl,60   
        mov cl,2
        sub si,2
        mov di,si                
        call show_str1           
        mov ax,4c00h
        int 21h

 ddtoc: 
          mov cx,21
    s7:   push bx
          mov ax,es:[bx+5]  
          add bx,2
          mov dx,es:[bx+5]  
                   
          push cx
          mov cx,10
          mov di,10          
    s8:   push cx
          mov bp,0      
          push ax            
          mov ax,dx          
          mov dx,0          
          mov cx,ax                
          jcxz ok
          div di
          mov bp, ax      

    ok:   pop ax             
          div di
          mov bl,dl          
          mov dx,bp                       
          add bl,30h                
          mov es:[si],bl     
          inc si  
          mov cx,ax             
          jcxz  ok1         
          pop cx
          loop s8 
        
    ok1:  mov byte ptr es:[si],0       
          inc si
          pop cx
          pop cx
          pop bx
          add bx,10h  
          loop s7
          ret

dwtoc:
           mov cx,21
     s9:   push bx
           push cx
           mov ax,es:[bx+di]                                
           mov cx,10
           
     s10:  push cx
           mov dl,10                     
           mov bl,al           
           mov al,ah            
           mov ah,0             
           mov cx,ax          
           jcxz ok3
           div dl

   ok3:  mov bh,al              
           mov al,bl            
           div dl
           mov bl,al                     
           mov dh,ah          
           mov ax,bx           
           mov cx,ax            
           add dh,30h           
           mov es:[si],dh
           inc si           
           jcxz ok4
           pop cx
           loop s10

  ok4:    mov byte ptr es:[si],0       
          inc si
          pop cx
          pop cx
          pop bx
          add bx,10h 
          loop s9
          ret

show_str: mov al,160
          mul dh
          mov si,ax
          mov al,cl     
          mul dl
          add ax,si
          mov si,ax     
          mov ax,0b800h  
          mov ds,ax
          mov bx,0
          mov di,0
          mov cx,21

      s5: mov bp,cx
          mov cx,4
                
      s6: mov al,es:[bx+di]
          mov ah,0ah          
          mov ds:[si],ax
          add si,2
          inc di
          loop s6

          add si,152
          mov di,0
          add bx,10h
          mov cx,bp
          loop s5
          ret

show_str1:mov al,160
          mul dh
          mov si,ax
          mov al,cl      
          mul dl
          add si,ax     
          mov ax,0b800h  
          mov ds,ax
          mov cx,21

   w0:    mov bp,cx       
          push si
          mov cx,10
                           
   w1:    mov bx,cx    
          mov al,es:[di]
          mov ah,0ah          
          mov ds:[si],ax
          add si,2
          dec di
          mov al,es:[di]
          mov ah,0
          mov cx,ax
          jcxz ok2
          mov cx,bx
          loop w1

   ok2:   dec di
          pop si
          sub si,160         
          mov cx,bp
          loop w0
          ret

codesg ends

end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved