北工大汇编——综合题(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
相关推荐
执迷不悟8235 天前
ARM--汇编指令
汇编·arm开发
Dlrb12116 天前
ARM指令集---汇编指令集的学习与应用:C程序与汇编的相互调用,处理器工作模式的改变等
汇编·arm开发·arm··arm指令集·汇编指令
学逆向的8 天前
汇编——函数
开发语言·汇编·网络安全
学逆向的8 天前
汇编——修改EIP的值
开发语言·汇编·网络安全
学逆向的12 天前
汇编——数据存储模式
开发语言·汇编·网络安全
学逆向的13 天前
汇编——内存
开发语言·汇编·算法·网络安全
学逆向的13 天前
汇编——位运算
开发语言·汇编·算法·网络安全
hai31524754313 天前
九章编译法----空间几何统一编译法
网络·汇编·人工智能·线性代数
想你依然心痛15 天前
自定义RTOS内核:从零实现上下文切换与任务调度——汇编、PendSV
java·开发语言·汇编·pendsv
hai31524754315 天前
九章空间几何对照直译法:通用芯片 / 定制专用芯片 编译适配规则
linux·汇编·bash