请编制程序,其功能是:统计30个学生成绩中得在100~90、89~80、79~70、69~60区间以及低于60分的人数,并计算30个学生的平均成绩(取整数),结果依次存入指定的内存区域。 例如:
/ X {" t0 {( o# y1 `& ~ 内存中有10个分数 5EH,50H,64H,52H,55H,48H,3AH,4AH,40H,42H
- f3 f0 f, ^, l+ T! j9 d) \. m 结果为 02H,03H,02H,02H,01H,4DH(平均成绩)
" a& O5 W" M; g% A 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
% ^5 P0 \+ k) A1 N 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。4 m1 L2 | g, g3 l% F" k7 ?2 ~- c
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
+ J" N3 p# f" R' |( r8 ] 试题程序:( m* v* v2 C! B
EXTRN LOAD:FAR,SAVE:FAR
' w- U3 p R. \' m; ? N EQU 302 x" L8 U# ?7 `8 w% W
L EQU 5/ v( J' ]: S3 x
DSEG SEGMENT
: Z0 ?% E' s; b1 ^, R SOURCE DB N DUP(?)& B. \( v) c, e$ g
RESULT DB N+1 DUP(0)7 [' b. O- Z# Y8 ?
NAME0 DB 'INPUT1.DAT',01 r7 N6 y; }; @
NAME1 DB 'OUTPUT1.DAT',0
$ H" Q& q; w/ r; n3 T) v" ~ DSEG ENDS
0 j3 \% t! Z5 O2 D4 T& D8 B ~4 h SSEG SEGMENT STACK: `' r n0 @$ D* i9 ^) \0 C. e( b5 t
DB 128 DUP(?)
% ]# z9 C3 ~& l% U& \9 P4 }: {0 m SSEG ENDS8 E5 }4 @, |9 }) x+ D' x K3 x
CSEG SEGMENT
6 Q9 A4 T0 v5 R. @. Z2 ? ASSUME CS:CSEG,SS:SSEG,DS:DSEG8 K. s, p" e2 S7 i0 b2 \8 ], [
START PROC FAR
) K; A; D, ~! |- h; h' }$ B! A PUSH DS F$ r9 C& t8 w/ P
XOR AX,AX
- ~. c# j! ~1 t# P7 T5 s* i PUSH AX1 G, C( o! D) m7 |. s' T0 {
MOV AX,DSEG3 B- m; @2 a+ x: R: s0 c; t
MOV DS,AX, G- y: ?; @4 \
MOV ES,AX ;置附加段寄存器
( q4 l* s. m( Y( \ LEA DX,SOURCE ;数据区起始地址
- _/ R. n, q: F6 o# {# l* x LEA SI,NAME0 ;原始数据文件名
* t" w7 W Y' m5 C1 K0 g MOV CX,N ;字节数
/ P! q- }9 o, c# e0 k p: x3 z CALL LOAD ;从'INPUT1.DAT'中读取数据
: F. _, ~2 r/ |- H/ W0 d ;****BEGIN****7 I/ V! R2 z4 w; k, L, t7 l! z
LEA SI,SOURCE
+ Z0 d* E6 s' ~/ `. c) V LEA DI,RESULT: M8 H* V# H( w7 P; ?3 a' U
XOR BX,BX" l- x- G* W1 @/ o* Z: e
________________________
# Q, k/ c2 l% T" d0 O6 _, x. H) } MOV CX,N
) b# U( t5 S- a8 a# x+ ~; s% L GOON: LODSB) n+ _ e- f1 J
________________________
0 c- k$ S8 E" p ADD BX,AX
3 D6 ~$ r& Y$ `7 k8 O8 q ________________________3 ?# q! T5 [' U
JAE A1
* u. \; M4 ^/ N) ~) }/ q CMP AL,80& l0 b. V/ \! ?3 Z3 B
JAE A2
7 L M2 g, [0 o5 @, @ CMP AL,70
7 ?1 K0 ?) u" F JAE A3; E% D* Y+ P8 Q4 [' n/ B! ?/ [
CMP AL,608 o/ D7 ^+ A, s; Q. V9 R
JAE A4
3 ?) v5 J3 P1 m8 y5 ]8 @8 c INC ________________
; B8 S/ R1 I) h2 A1 C+ B _________________________
* x. \, a! ^ f& R+ V8 J! G6 j2 H6 k A4: INC BYTE PTR [DI+3]
8 Y0 C8 `/ w# T& m; a7 T5 N1 O JMP NEXT
0 `) R4 v* J. ^. [! M6 C1 w2 ~ ~+ U A3: INC BYTE PTR [DI+2]
& X5 |7 P' P, }( s9 g u- k- f JMP NEXT
0 t0 S d8 U0 A) a A2: INC BYTE PTR [DI+1], N6 N; H- N, H5 Y/ o7 j' Q
JMP NEXT1 D: q7 J# }- F
A1: INC BYTE PTR [DI]5 x; C4 o/ e9 j, G2 @- {
NEXT: LOOP GOON
: b& `+ U" q% U) @, b# N4 _; q MOV AX,_____________- o" G: v8 `. h* V' H( D' a
MOV DL,_____________, ?( S0 Q r- U! |4 D7 l
DIV DL
- [2 }7 m: ~& P$ H8 u9 n! Y MOV [DI+5],AL
0 Z% `- m) @0 R8 u ;****END****
7 _% C% L- e5 q# Q5 X; w1 \ LEA DX,RESULT ;结果数据区首址" d. j+ a6 z# V/ `4 h
LEA SI,NAME1 ;结果文件名0 ^; P$ d+ |! W& f' L: f
MOV CX,L+1 ;字节数
* C, G2 }3 ^+ d3 a( E9 f. [ CALL SAVE ;保存结果到文件- N7 s( q4 j1 {8 W
RET
6 V/ F5 i) ^" s) d( \2 O+ V START ENDP. n1 s7 U6 y1 h- }4 M0 Z0 Q
CSEG ENDS
/ t [" J# X* X END START |