⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.asm

📁 用汇编语言实现的程序: 每名学生需要如下描述:班级、学号、姓名、期末成绩、期中成绩、实验成绩、平时成绩。成绩可以有小数
💻 ASM
📖 第 1 页 / 共 2 页
字号:
             mov ax,bx
            
             mov cl,10                     
             div cl 

;----------------------------------------------------------------------------
             
                                            ;将结果转化为ASCII码存储
             or ah,30h                       ;小数部分
             
             mov resultes[di+2],ah              
                  
             aam     
           ;-----------------------------------------------------------------

           ;统计60以下、60-70、70-80、80-90、90-100分段内的人数
             cmp ah,6
             jl  x1
             cmp ah,7
             jl  x2
             cmp ah,8
             jl  x3
             cmp ah,9
             jl x4
             inc n[4]
             jmp rt
             
             x1: inc n
                 jmp rt
             x2: inc n[1]
                 jmp rt
             x3: inc n[2]
                 jmp rt
             x4:inc n[3]
             
            ;-------------------------------------------------
       rt:           
             or al,30h                         ;转换为ASCII码
             or ah,30h
           
             mov resultes[di],ah                    ;十位
             mov resultes[di+1],al                   ;个位
             
 ;==============================================================================  
 		   				pop bx       
              pop dx
              pop cx
              pop si
              pop ax     
						  ret
compute       endp
;**************************************************************************
sort          proc
              push bx
              push dx
              push cx
              push ax
              push si
              push di
              
              mov cx,0
              mov cl,snumber2          ;学生数赋值给cx计数用
              dec cx          
     loop1:                            ;将每个学生单元看成一个元素进行冒泡排序loop1,loop2
              mov dx,cx
              mov di,0
              mov si,0
              
                 loop2: 
                        mov bx,si
                        
                            loop3:                      ;loop3,loop4实现两个学生的比较并交换大小
                                 mov al,student[bx+2]                   
                                 cmp al,student[bx+22]
                                 jg swap           ;交换其后的所有字符,直至所比较的两个学生完成交换
                                 jl xxxx           ;小于的时候,比较下一个学生
                                 inc bx     ;al与student[bx+2]相等,继续比较下一个字符  
                                 jmp loop3
                                             
                                        swap:
                                             mov al,resultes[di]         ;交换成绩
                                             xchg al,resultes[di+3]
                                             mov resultes[di],al
                                             
                                             mov al,resultes[di+1]
                                             xchg al,resultes[di+4]
                                             mov resultes[di+1],al
                                             
                                             mov al,resultes[di+2]
                                             xchg al,resultes[di+5]
                                             mov resultes[di+2],al     
                                             
                                       loop4:                             ;交换姓名
                             				         mov al,student[bx+2]
                              			         xchg al,student[bx+22]
                              			         mov student[bx+2],al
                              			         inc bx
                              			         cmp al,'$'
                              			         jnz  loop4

             	  xxxx:   add si,20
             	          add di,3
             	          loop loop2				  				
             	
              mov cx,dx
              loop  loop1
              

              pop di
              pop si
              pop ax
              pop cx
              pop dx
              pop bx
							ret
sort          endp
;*****************************************************************************
display       proc
							push ax
							push dx
							
							lea dx,stars        ;显示一行星号
							mov ah,9
							int 21h
;---------------------------------------------------------------------------
	
							 lea dx,show_result  ;显示输出结果提示字符
							 mov ah,9
							 int 21h
							
;--------------------------------------------------------------------


                mov si,0
                mov di,0
                mov cx,0
                
                mov cl,snumber2                     ;snumber2中存的是学生总数
                
      output:                                ;循环输出,直至输出所有学生姓名及成绩
 
;--------------------------------------------------------------------------							
							
							lea dx,student[si]      ;显示学生姓名
              add dx,2            ;姓名的首地址 
              mov ah,9            
              int 21h
              
              lea dx,maohao        ;显示一个冒号
              mov ah,9             
              int 21h
 ;-------------------------
			        mov dl,resultes[di]         ;显示学生平均成绩(十位)
			        mov ah,2
			        int 21h
			        mov dl,resultes[di+1]         ;显示学生平均成绩(个位)
			        mov ah,2
			        int 21h
			        mov dl,'.'              ;打印小数点
			        mov ah,2
			        int 21h
			        mov dl,resultes[di+2]        ;显示学生平均成绩(小数位)
			        mov ah,2
			        int 21h			        
;-------------------------------------------------------------------


              mov     ah,02h               ;每打印出一个学生姓名及成绩就回车换行一次   
              mov     dl,0dh   
              int     21h   
              mov     dl,0ah   
              int     21h 
  ;-------------------------------------------            
              
              add si,20                      ;改变指针,指向下一个学生    
              add di,3
              loop output
;---------------------------------------------------------------------

             ;输出60以下、60-70、70-80、80-90、90-100分段内的人数
             
             lea dx,fenshuduan
             mov ah,9
             int 21h
             
              mov si,0
              mov cx,5
        dddd:    
              mov al,n[si]
              aam 
              or ah,30h
              or al,30h
              
              mov bh,ah
              mov bl,al
              
              lea dx,space
              mov ah,9
              int 21h
              
              cmp bh,30h                ;假如分数段的人数为一位数,不打印十位的0
              je  dybl                 ;否则打印出两位数
              mov ah,2
              mov dl,bh
              int 21h
              
           dybl:   
              mov ah,2
              mov dl,bl
              int 21h
        
              inc si
              loop dddd
             
;-----------------------------------------------------------------------
		        
						  lea dx,stars        ;显示一行星号
							mov ah,9
							int 21h			        
 			        
 			        pop dx
 			        pop ax
							ret
display       endp
;****************************************************************************	
main    endp
;-------------------------------------------------------------------------     
code    ends
;*************************************************************************
        end    start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -