请编制程序,其功能是:设内存中有一个由20个八位无符号数组成的数组A(下标从1开始),试求出一个新数组B使/ U# B, J* \6 U0 I, A2 A! Z1 a0 {
B(I)=A(I) I=1,206 Y4 b3 ~) ]- T" ~# s+ n; [
B(I)=(A(I-1)+2*A(I)+A(I+1))/4 I=2~19
& n S6 d. y. o$ t0 Y 结果仍以八位无符号数存放。为了得到尽可能高的精度,要求最后做除法运算。
* w3 r ]2 z" c. R0 v1 [ 例如: A为 39H,C6H,D8H,94H…+ }2 e, l. Q7 n1 o
B为 39H,A7H,C2H…, y1 X& H* \; V
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。* u% J- {6 i A6 G6 N
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
9 g2 w& F+ u+ D" _ 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。+ y. R$ b' ^, U$ J$ l5 R' Q
试题程序:8 s0 Y' Q0 n& M9 { f
EXTRN LOAD:FAR,SAVE:FAR9 H/ j& c. T# C- c
N EQU 20
* d, G1 {) Z. \$ o5 L+ R$ A: H+ _$ q STAC SEGMENT STACK
' V% M0 Q, q2 o1 D& M! r" E DB 128 DUP(?) a. E$ F6 J" {: v: ^
STAC ENDS& J; F7 V3 F& x8 R8 C% v; A
DATA SEGMENT- l( |5 N, [& c
A DB N DUP(?)
9 H V5 h. }# _5 o) s/ t- l7 N B DB N DUP(0)& c" M( j$ Z; v I
NAME0 DB 'INPUT1.DAT',0& W+ R# a/ u# C1 M" ^; R7 V6 ?
NAME1 DB 'OUTPUT1.DAT',07 I' Y8 U8 o* S% |/ {/ C! m( l
DATA ENDS
8 u& w+ t7 s6 v; n. d- m CODE SEGMENT$ Y* x# D) P5 A' c. Y7 X2 x
ASSUME CS:CODE,DS:DATA,SS:STAC2 ~1 t' h. a6 l& g' B
START PROC FAR
0 f* h+ q/ k4 ~0 E( A PUSH DS
! X! j. L8 j# g; s; I: P$ z( r XOR AX,AX
4 K' w0 V$ {2 M4 g4 E PUSH AX
% n( t+ ]+ O( @$ { G# l MOV AX,DATA& g( C# |. |- l1 W
MOV DS,AX
8 r, D2 o/ e$ }- F& \) M3 ~ LEA DX,A ;数据区起始地址
* L) K1 u' V# C& H) j h LEA SI,NAME0 ;原始数据文件名
- Z$ V5 h2 q) J& u2 @ MOV CX,N ;字节数/ e" B: g( G: I7 ?5 _! C
CALL LOAD ;从'INPUT1.DAT'中读取数据
4 P( q7 A8 a( |9 f- R3 ] ;****BEGIN****
0 n7 V- B- S* c* j LEA SI,A, x* I, k. R; Q8 B
LEA DI,B
6 h: P4 S, A6 u( ]+ r+ v4 Y2 r MOV AL,[SI] ;B[1]=A[1]
; O- ~! a% j; s+ I! y! W7 J# a MOV [DI],AL" h: _9 p( u5 ^ \1 G
________________________ ;B[N]=A[N]
9 V! ^7 P8 t4 }# C3 \8 a9 f# L _________________________3 ?8 H( Q, [, a, N
INC SI9 g/ x' W" M+ A. x: G
INC DI
# T5 k8 O, w# N8 b: k3 O MOV CX,_____________; u) K. c& ~# [) M
L0: XOR AX,AX
4 h9 O" o( `( s# @ P. ] XOR BX,BX
1 r4 R( v: E3 O6 o' V7 N+ X XOR DX,DX. t$ g9 h, [$ Q7 x/ g ^" g
MOV AL,_____________
& d- L6 @/ v( l; v7 i MOV BL,_____________1 [( i# r$ I+ r& M
MOV DL,_____________
; \; J+ @ c/ x( D2 h; ?' }1 i7 d1 W" ?6 P ________ AX,1
/ M+ N/ e t N! K* X. A ADD AX,BX
; }- F; k' }) I7 ~$ }! a5 M ADD AX,DX
6 P* A8 O8 u1 f9 M1 W SHR AX,19 t0 z; N# f4 P9 ]+ p I. q
SHR AX,1
" H& d9 m6 {& y9 b w9 R6 ^2 t MOV [DI],AL+ t1 a4 R7 i$ D. ] D
INC SI8 {1 a0 R8 t6 x% m$ ?
INC DI
! e+ T/ v& p0 n1 e LOOP L0
3 }4 ?! @& g2 A% V ;****END****: n2 o& f: L* c; g7 y2 D! G
LEA DX,B ;结果数据区首址, @1 u( g& C$ |
LEA SI,NAME1 ;结果文件名! \0 k, q- K( L* I7 ]' n' ~- m) U
MOV CX,N ;结果字节数
- }- L8 K& P2 t6 ? CALL SAVE ;保存结果到文件
7 x6 x3 E& u, u RET; Z1 l+ e. r" Y* _: x- w" `
START ENDP! ^, r2 v7 S# `) e8 c4 r. C6 W
CODE ENDS2 \/ {" w9 h& W! P( y1 {! F, Q
END START |