北工大汇编——综合题(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
相关推荐
Jacen.L8 小时前
逆向工程开篇(连载中)
汇编
薛定谔的猫_C8T616 小时前
程序人生-Hello’s P2P
c语言·汇编·程序人生·shell·二进制·计算机系统·hello
God_archer16 小时前
程序人生-hello’s P2P
linux·c语言·汇编·程序人生
南玖yy1 天前
x86 汇编逻辑运算全解析:从【位操作】到实际应用(AND,OR,NOT,XOR,TEST)
开发语言·汇编·arm开发·后端·架构·策略模式
南玖yy1 天前
深入理解 x86 汇编中的重复前缀:REP、REPZ/REPE、REPNZ/REPNE(进阶详解版)
开发语言·网络·汇编·后端·算法·bochs
Jacen.L1 天前
四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型
汇编
网安INF2 天前
深入理解汇编语言中的顺序与分支结构
开发语言·汇编·编程
染指11103 天前
34.x64汇编写法(一)
汇编·x64汇编
廖致君4 天前
打打基础 | 从翻转链表到寄存器、汇编与内存
汇编·数据结构·链表
iCxhust4 天前
8088 单板机 汇编 NMI 中断程序示例 (脱离 DOS 环境)
c语言·开发语言·汇编·单片机·嵌入式硬件·mcu