. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  课程设计1(花了很长时间,能正确显示,欢迎大家指点)  [待解决] 回复[ 5次 ]   点击[ 86次 ]  
1152659530
[帖 主]   [ 发表时间:2023-08-08 02:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
assume cs:code,ss:stack,ds:data

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

table segment
                db 21 dup('                                       ',0)  //每行40个字节
table ends

stack segment
                db 64 dup(0)       //注意栈不要溢出
stack ends
----------------------------------------------------------------------------------
code segment
start:
                                mov ax,data
                                      mov ds,ax
                                mov ax,table         
                                     mov es,ax
                                mov ax,stack       
                                   mov ss,ax
                                   mov sp,64
----------------------------------------------------------------------------------                
employee:                           
                                push ax
                                push dx
                                push cx
                                push si
                                push di
                                push bx
                                mov cx,21
                                mov si,84
                                mov di,168
                                mov bx,252
ave:        
                                push cx
                                mov ax,[si]         
                                mov dx,[si+2]
                                mov cx,[di]       
                                                
                                call divdw
                                mov [bx],ax       
                                mov [bx+2],dx
                                                
                                add si,4
                                add di,4
                                add bx,4
                                pop cx
                                loop ave
                                
                                pop bx
                                pop di
                                pop si
                                pop cx
                                pop dx
                                pop ax


**********************************************************************************
**********************************************************************************
主程序:
                
----------------------------------------------------------------------------------                                

                                mov cx,21
                                mov bx,0
                                mov si,0
                c0:                call insert_y         //向table中录入年份
                                add bx,40
                                loop c0

----------------------------------------------------------------------------------                                                

                                mov cx,21
                                 mov si,84
                                 mov bp,0
                c1:                 push cx
                                 mov cx,10
                                 mov ax,[si]
                                 mov dx,[si+2]
                                 call dtoc1            //向table中录入收入
                                 add si,4
                                 add bp,40
                                pop cx
                                 loop c1
                                
----------------------------------------------------------------------------------                        

                                mov cx,21
                                 mov si,168
                                 mov bp,0
                c2:                 push cx
                                 mov cx,10
                                 mov ax,[si]
                                 mov dx,[si+2]
                                 call dtoc2            //向table中录入雇员数
                                 add si,4
                                 add bp,40
                                pop cx
                                 loop c2

----------------------------------------------------------------------------------

                                mov cx,21
                                 mov si,252
                                 mov bp,0
                c3:                 push cx
                                 mov cx,10
                                 mov ax,[si]
                                 mov dx,[si+2]
                                 call dtoc3             //向table中录入人均收入
                                 add si,4
                                 add bp,40
                                pop cx
                                 loop c3


----------------------------------------------------------------------------------

                                mov cx,21
                                mov dh,2
                                     mov dl,3

                                mov si,0
                c4:                push cx
                                mov cl,2
                                call show_str_table        //在屏幕上显示
                                pop cx
                                inc dh
                                add si,40
                                loop c4

                                mov ax,4c00h
                                int 21h


                           
主程序完
**********************************************************************************
**********************************************************************************
        
divdw:           push ax                  
                 push dx                         
                 push cx
                 push bx
                 push ax
                 mov bx,0
                 mov ax,dx
                 mov dx,0
                 div cx
                 mov bx,ax
                 pop ax
                 div cx
                 mov cx,dx
                 mov dx,bx
                 pop bx              
                 add sp,6               
                 ret                                
----------------------------------------------------------------------------------

show_str_table: 
                push si                              
                push dx
                push cx
                push ax
                push ds              
                push di                                                
                mov di,0
                                
                mov ax,0b800h
                mov ds,ax
                mov ax,0a0h
                mul dh
                mov di,ax                           
                mov dh,0
                add dl,dl
                add di,dx                           
                mov ch,0
                mov ax,cx
             fz:mov cl,es:[si]
                jcxz okay
                mov byte ptr ds:[di],cl             
                mov byte ptr ds:[di+1],al           
                inc si
                add di,2
                jmp short fz
                                
           okay:
                pop di
                pop ds                          
                pop ax
                pop cx                 
                pop dx
                pop si
                ret 
----------------------------------------------------------------------------------

insert_y:
                push ax
                push cx
                push di
                 
                mov di,0
                mov cx,2       
             
            x0: mov ax,[si]
                mov es:[bx+di],ax     
                add si,2
                add di,2
                         
                loop x0
                         
                pop di
                pop cx
                pop ax
                ret
----------------------------------------------------------------------------------

dtoc1:                               
                
                push ax
                push dx
                push cx

                push bx
                push si                        
                push di
                                
                mov di,0
                mov si,0
                                
                                
                mov bx,cx         
        qy1:     mov cx,bx             
                call divdw
                                
                push ax           
                push cx                           
                add ax,dx          
                mov cx,ax                   
                pop di
                pop ax
                add di,30h
                push di           
                inc si            
                jcxz num1
                jmp short qy1
                                
        num1:    mov cx,si
                mov di,0                                 
                            
         y1:        pop es:[bp+di+12]
                  inc di
                loop y1
                mov byte ptr es:[bp+di+12],20h                      
                        
                                
                pop di        
                pop si
                pop bx           
                 
                pop cx
                pop dx
                pop ax                  
                
                ret
----------------------------------------------------------------------------------                 

dtoc2:                               
                push ax
                push dx
                push cx
                push bx
                push si                        
                push di
                                
                mov di,0
                mov si,0
                                
                                
                mov bx,cx         
        qy2:     mov cx,bx             
                call divdw
                                
                push ax           
                push cx                           
                add ax,dx          
                mov cx,ax                   
                pop di
                pop ax
                add di,30h
                push di           
                inc si            
                jcxz num2
                jmp short qy2
                                
        num2:    mov cx,si
                mov di,0                                 
                            
         y2:        pop es:[bp+di+22]
                  inc di
                loop y2
                mov byte ptr es:[bp+di+22],20h            
                        
                                
                pop di        
                pop si
                pop bx           
                pop cx
                pop dx
                pop ax                                    
                ret
----------------------------------------------------------------------------------

dtoc3:                               
                push ax
                push dx
                push cx
                push bx
                push si                        
                push di
                                
                mov di,0
                mov si,0
                                
                                
                mov bx,cx          
        qy3:    mov cx,bx             
                call divdw
                                
                push ax            
                push cx                           
                add ax,dx          
                mov cx,ax                   
                pop di
                pop ax
                add di,30h
                push di            
                inc si             
                jcxz num3
                jmp short qy3
                                
        num3:   mov cx,si
                mov di,0                                 
                            
        y3:        pop es:[bp+di+32]
                inc di
                loop y3
                mov byte ptr es:[bp+di+32],20h       
                        
                                
                pop di        
                pop si
                pop bx           
                pop cx
                pop dx
                pop ax                                     
                ret
                                                   
----------------------------------------------------------------------------------           

code ends
end start
1152659530
[第1楼]   [ 回复时间:2023-08-08 02:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
敏感词原因导致不能发程序的思路到网上
1152659530
[第2楼]   [ 回复时间:2023-08-08 02:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
程序的结构有:初始化段、主程序、子程序循环控制及参数传入、子程序
1152659530
[第3楼]   [ 回复时间:2023-08-08 02:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
y3:        pop es:[bp+di+32]
                inc di
                loop y3
                mov byte ptr es:[bp+di+32],20h       字符‘ ’(20h)
1152659530
[第4楼]   [ 回复时间:2023-08-08 19:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
子程序:参数、返回
控制结构
寄存器冲突(入栈暂存再出栈)
1152659530
[第5楼]   [ 回复时间:2023-08-08 19:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
子程序中还可能调用其他子程序,子程序复用
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved