8086汇编程序题模块化设计

采用模块化程序设计方法编写出以下各题的源程序并上机调试运行,显示(或打印)出结果。
编写一计算比赛成绩子模块,要求完成以下功能。
① 7名评委,每个评委给分范围为.0~10分(整数);
② 7名评委给分中,去掉一个最高分和一个最低分,剩余5名评委中的平均分即为参加者的得分(精确到小数点后1位);
③将分数在光标位置处显示出来。’

;实验五:七个评委打分问题
;让用户输入7个0~10之间的数(若某个数为1位数,再前面补0),
;去掉最高分和最低分后,取平均分后(输出保留一位小数)。

DSEG SEGMENT
disp1 db 'Please Input 7 12 digit numbers between 0010',0ah,0dh
db '(1-digit number with one 0(zero:30h) as prefix):',0ah,0dh,'$' ;10 02 03 10 09 10 08
in_buf db 21
db ?
db 21 dup(?)
data db 7 dup(?)

result db ' . ',0ah,0dh,'$'
DSEG ENDS

这里有设计思路以及代码,需要pdf的私信。

#include<stdio.h>
int main()
{
int a[7];
int i=0,j=0;
float max,min,sum=0;
printf("Input:\n");
for(i=0;i<7;i++) scanf("%d",&a[i]);
max=a[0];
min=a[0];
for(i=0;i<7;i++)
{
if(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
}
printf("%f\n",max);
for(i=0;i<7;i++)
sum=sum+a[i];
sum=(sum-max-min)/(7-2);
printf("%f",sum);
}


data segment
N DB 7 DUP(0)
MAX DB 0
MIN DB 10
M1 DB 0dh,0ah,'Input:  $'
M2 DB 0DH,0AH, 'The final score is: $'

data ends
code segmentassume cs:code, ds:data
main proc far
begin:
push ds
mov ax,0
push ax

MOV AX,DATAMOV DS,AX
mov ah,9
mov dx,offset m1
int 21h

MOV BX,OFFSET N
MOV CX,7  ;输入7个数
NEXT:
MOV AH,7
INT 21H
CMP AL,'0'
JB NEXT
CMP AL,'9'
JA NEXT
CMP AL,'1'
JE BE_1
MOV DL,AL
MOV AH,2
INT 21H
SUB AL,30H
MOV [BX],AL
CALL MAX_MIN

JMP L1

BE_1:   ;判断是1还是10
MOV AH,2
MOV DL,'1'
INT 21H
MOV AH,7
INT 21H
CMP AL,'0'
JE BE10
MOV AL,1
MOV [BX],AL
CALL MAX_MIN

JMP L1
BE10:
MOV AH,2
MOV DL,'0'
INT 21H
MOV AL,10
MOV [BX],AL
CALL MAX_MIN

L1:
INC BX
MOV AH,2 ;两数之间加一个空格显示
MOV DL,' '
INT 21H

LOOP NEXT
MOV AH,09
MOV DX,OFFSET M2
INT 21H

MOV CX,7
MOV AX,0
MOV BX,OFFSET N
SUM:
ADD AL,[BX]
INC BX
LOOP SUM ;求总和
SUB AL,MAX
SUB AL,MIN
MOV BL,5
DIV BL
CMP AL,10
JE ALL10 ;全为满分

PUSH AX  ;处理小数
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
MOV AH,2
MOV DL,'.'
INT 21H

POP AX
MOV AL,AH
MOV BL,10
MUL BL
MOV BL,5
DIV BL
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H

JMP R_MAIN
ALL10:
MOV AH,2
MOV DL,'1'
INT 21H
MOV DL,'0'
INT 21H

R_MAIN:
ret
main endp
;================
MAX_MIN PROC NEAR ;输入数据的同时找出最大和最小值
CMP AL,MAX
JB P1
MOV MAX,AL
P1:
CMP AL,MIN
JA R
MOV MIN,AL
R:
RET
MAX_MIN ENDP
;===================

code ends
end begin

这个思路是很好办的,具体的话还是结合你不会的点进行提问哦