北工大汇编——综合题(2)

题目要求

编写一个比赛得分程序。共有7 个评委,按百分制打分,计分
原则是去掉一个最高分和一个最低分,求平均值。要求:

  1. 评委的打分以十进制从键盘输入。
  2. 成绩以十进制给出,并保留 1位小数。
  3. 输入输出时屏幕上要有相应提示
    在这里插入图片描述

完整代码

DATAS SEGMENT
    ;此处输入数据段代码
    inputMsg db 'please input$'
    errMsg db 0ah, 0dh, 'please input 0-100$'
    finalMsg db 0ah, 0dh, 'the score is $'
    
    score DB 30H 
    	  DB 0 
   		  DB 30H DUP('$')
    
    realScore dw 0
    minScore dw 100
    maxScore dw 0
    count dw 0
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    mov ax, 0
    mov count, ax
    mov maxScore, ax
    mov ax, 100
    mov minScore, ax
    mov cx, 7
    
    input:
    	mov realScore, 0
    	mov dx, cx
    	add dx, '0'
    	mov ah, 02h
    	int 21h
    	
    	lea dx, inputMsg
    	mov ah, 09h
    	int 21h
    	
    	lea dx, score
    	mov ah, 0ah
    	int 21h
    	
    	MOV DX,0AH;回车换行
		MOV AH,02H
		INT 21H
		MOV DX,0DH
		MOV AH,02H
		INT 21H
		
		call checkInvalid
		
		loop input
		jmp output
		
	checkInvalid proc
		push cx
		mov al, score[1]
		cmp al, 3
		ja error
		
		mov si, 2
		mov cl, score[1]
		
		funcCheckInvalidLop:
			mov ax, 0
			mov al, score[si]
			sub al, '0'
			
			cmp al, 0
			jb error
			cmp al, 9
			ja error
			
			push ax
			
			mov ax, 10
			mul realScore
			mov realScore, ax
			
			pop ax
			
			add realScore, ax
			
			inc si
			loop funcCheckInvalidLop
			
		mov dx, 0
		mov ax, realScore
		cmp ax, 100
		ja error
		
		add count, ax
		
		cmp ax, minScore
		ja checkMax
		mov minScore, ax
		
		checkMax:
			cmp ax, maxScore
			jb funcCheckInvalidRet
			mov maxScore, ax
			
		funcCheckInvalidRet:
			pop cx
			ret
	
	checkInvalid endp
	
	
	
	output:
		lea dx, finalMsg
		mov ah, 09h
		int 21h
		
		mov dx, 0
		mov ax, count
    	sub ax, minScore
    	sub ax, maxScore
    	
    	mov bx, 5
    	div bx
    	;AX商,DX余数
    	
    	push dx
    	mov bx, 10
    	mov cl, 0
    	
    	funcOutputDivLop:
    		mov dx, 0
    		div bx
    		add dl, '0'
    		push dx
    		inc cl
    		cmp ax, 0
    		jne funcOutputDivLop
    		
    	funcOutputOutLop:
    		pop dx
    		mov ah, 02h
    		int 21h
    		
    		loop funcOutputOutLop
    		
    		mov dx, '.'
    		int 21h
    		
    		pop dx
    		sal dx, 1
    		add dx, '0'
    		int 21h
    		jmp exit
			
	error:
		lea dx, errMsg
    	mov ah, 09h
    	int 21h
    	
    exit:
    	
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值