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

📄 huibian1.asm

📁 用汇编语言实现的程序: 每名学生需要如下描述:班级、学号、姓名、期末成绩、期中成绩、实验成绩、平时成绩。成绩可以有小数
💻 ASM
字号:
;*************************************************************************
data    segment
				name_tip      db   'Please input the student name:$'
				gradetip      db   0dh,0ah,'Please input the grades:$'
				show_result   db   0dh,0ah,'Name    :    ChengJi',0dh,0ah,0dh,0ah,'$'
				stars         db   0dh,0ah,'************************************','$'
				maohao        db   '     :     $'
				student       db   100,0,100 dup(?)     ;学生姓名
				buffer1       db   40 dup(0)          ;为学生成绩分配空间(ASCII表示)
				buffer2       db   20 dup(0)          ;学生成绩(十进制表示)
				resultes      db   100 dup(0)          ;存储每个学生平均分
data    ends
;**************************************************************************
code    segment
;-----------------------------------------------------------
main    proc     far
 				assume cs:code,ds:data
start: 
 				mov ax,data          ;数据段初始化
 				mov ds,ax
		  
    	  lea dx,name_tip      ;请求输入学生姓名
 				mov ah,09     
 			  int 21h             
 			  
 			  call store_name       														;存储学生姓名

 			  lea dx,gradetip       ;请求输入学生成绩
 			  mov ah,09
 			  int 21h
 			  
 			  call store_grade       														;存储学生成绩
 			    
				call compute           ;计算平均分	  
				call display           ;显示结果
  
        mov ah,1           ;任意键结束
        int 21h
 				mov ax,4c00h       ;返回DOS
 				int 21h 
;**************************************************************************	
;					以下为子程序部分
;**************************************************************************
;	 				以下为子程序部分
;****************************************************************************		
store_name    proc
              push dx
              push ax
              push bx
       
							lea dx,student                 ;读取学生姓名
      				mov ah,0ah                    
 				      int 21h
 				      
              mov bl,student+1              ;存放实际的个数
              and bx,0fh                       ;bx高四位清零
              mov student[bx+2],'$'          ;在最后加上'$'
              
              pop bx
              pop ax
              pop dx
							ret
store_name    endp
;*****************************************************************************
store_grade   proc
							push ax
							push si
							
							mov si,0
     input:  
 				      mov ah,01
 							int 21h            ;输入字符
							cmp al,0dh         ;判断是否输入回车
							je  return         ;输入结束
							cmp al,' '         ;判断是否输入空格
							je  input					 ;跳过空格
  						and al,0fh         ;转换成非压缩的BCD码
 							mov buffer1[si],al 
 							inc si             ;输入未结束,则继续输入
 							jmp input
   										
	  return:	  
	            mov buffer1[si],'$'   ;将原来的回车换成结束符
	            
	           	pop si
	           	pop ax
	            ret  
store_grade   endp
;****************************************************************************
compute       proc                               ;计算平均成绩主程序
              push ax
              push si
              push cx
              push dx 
              push bx                                ;bx用做临时存储数据用
                   
              mov si,0
              mov ax,0
              mov dx,0
              mov bx,0       
           
;-----------------------------------------------------------------
    
              mov cx,4                         ;循环实现BCD码转换为二进制数
     next1:                                     
              mov ah,buffer1[si]
              mov al,buffer1[si+1]   
              aad
              mov buffer2[si],al 
              inc si
              loop next1                        
 ;------------------------------------------     
            ;期末成绩×0.6+期中成绩×0.2+实验成绩*0.1+平时成绩*0.1
               
             mov si,0                       ;计算平均成绩,结果用十进制表示
            
             mov al,6
             mul buffer2[si]
                       
             add bx,ax
            
             mov al,2
             mul buffer2[si+1]
            
             add bx,ax
            
             mov al,1
             mul buffer2[si+2]
            
             add bx,ax
            
             mov al,1
             mul buffer2[si+3]
            
             add bx,ax
            
             mov ax,bx
            
             mov cl,10                     
             div cl 
;-----------------------------------------------------------------
                                           ;将结果转化为ASCII码存储
             or ah,30h                       ;小数部分
             mov resultes+2,ah              
                  
             aam     
             
             or al,30h                         ;转换为ASCII码
             or ah,30h
            
             mov resultes,ah                    ;十位
             mov resultes+1,al                   ;个位

            
 ;==============================================================================  
 							pop bx       
              pop dx
              pop cx
              pop si
              pop ax     
						  ret
compute       endp
;**************************************************************************
sort          proc

							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
							
							lea dx,student      ;显示学生姓名
              add dx,2            ;姓名的首地址 
              mov ah,9            
              int 21h
              
              lea dx,maohao        ;显示一个冒号
              mov ah,9             
              int 21h
 ;-------------------------
			        mov dl,resultes         ;显示学生平均成绩(十位)
			        mov ah,2
			        int 21h
			        mov dl,resultes+1         ;显示学生平均成绩(个位)
			        mov ah,2
			        int 21h
			        mov dl,'.'              ;打印小数点
			        mov ah,2
			        int 21h
			        mov dl,resultes+2        ;显示学生平均成绩(小数位)
			        mov ah,2
			        int 21h			        
;-------------------------------------------------------------------
		        
						  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 + -