请编制程序,其功能是:内存中连续存放着20个无符号字节数,求它们的和。和值按字的形式存放,此前先按序存放参加运算的20个字节。 例如:
4 _+ b* v+ H( ?+ Q3 b 内存中有: 01H,02H,03H…/ }/ D- M1 Y2 O. `! G6 }
结果为: 02H,02H,03H…(共20 个参加运算的字节),后跟一个字(为前面各20 个字节的和)。7 g. S2 \5 A' `! l! I
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
" p7 w# Z" Y7 V4 H9 a8 \ 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。% H3 P! z7 G f4 a5 c- n& C3 ~
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。6 ~; p& f2 t; n6 O9 s, H1 d
试题程序:, }# r- G! A) v9 d+ X1 l
EXTRN LOAD:FAR,SAVE:FAR
9 j% \4 n7 o) g4 _2 f. I& R u* g, p/ s N EQU 20% p* G% I0 }+ f+ R! k
STAC SEGMENT STACK
5 m! F- f& X- x: b, @1 @. }! b0 |; u DB 128 DUP(?), K; B2 r" J5 K4 P" {% ]
STAC ENDS$ p$ U, ]# ^+ i7 X1 [+ X
DATA SEGMENT
' s1 z1 A5 p4 {7 W. ^- W SOURCE DB N DUP(?)
: F7 y- R. I" G( R; t" K+ K RESULT DB N DUP(0)4 |& b; a1 z8 ~: R k
NAME0 DB 'INPUT1.DAT',0
9 L1 Z: |# v. _5 _% ] NAME1 DB 'OUTPUT1.DAT',0
1 ^. M5 P+ |% U8 l1 M+ \0 X DATA ENDS6 U9 O0 c2 @" s. s4 Q
CODE SEGMENT
: @! A- ]$ X6 E1 B, G ASSUME CS:CODE,DS:DATA,SS:STAC& U* R6 k0 r( t! o n+ Y$ g; {
START PROC FAR
M7 J7 Y9 ^% {8 T PUSH DS
% X5 J# y. b4 x XOR AX,AX
3 A) \8 d# f2 _% H( n3 E6 x1 o PUSH AX; l7 v' Q' G& |* ]2 c0 c! u
MOV AX,DATA
; @4 e2 }# A; J ~: v MOV DS,AX3 e+ A* Q4 M3 i6 k
LEA DX,SOURCE ;数据区起始地址" i6 Q* o# t! [9 q
LEA SI,NAME0 ;原始数据文件名7 B2 @3 m, y2 O* p2 q. i
MOV CX,N ;字节数
- Y9 c5 K# `" n+ ` CALL LOAD ;从'INPUT1.DAT'中读取数据; |' u) J/ h8 h; T W. Z3 r2 i
;****BEGIN****7 k0 e7 p$ a7 k7 q- p, C2 ~- ?+ `
LEA SI,SOURCE
6 @7 q. U, `7 u4 D LEA DI,RESULT
: Z% t; s& b. ]6 y; c8 Y" r MOV CX,N% Q. [. Z8 h' \% _2 Y/ N
MOV BX,0, f9 n, h+ ]8 ^ T3 L
NEXT: MOV AL,[SI]
! Z" z! C4 h& b" Y& { XOR BX,BX
, M. `/ R! O# I' g0 F$ @' J* Z( D __________________________
6 O6 t9 d5 f+ P; r. L2 d1 ? __________________________
; |$ o, j' L* Z0 f* D9 ?. W MOV [DI],____________+ J2 A) C. N7 s
__________________________
8 Z: I- d# t* @6 ?" v __________________________
* w( ^. e; g+ Q% V+ O9 } LOOP NEXT
. B5 t$ C5 Q- p1 g O2 [8 [/ m MOV [DI],____________5 f8 S2 U' ]# z
;****END****, r; w1 v5 j2 ^. D3 O7 n
LEA DX,RESULT ;结果数据区首址
2 e" M. f. v2 j2 h7 B9 j LEA SI,NAME1 ;结果文件名/ q4 @! i. d6 P
MOV CX,N+2 ;字节数, D0 ~+ u, Q& R4 F
CALL SAVE ;保存结果到文件
( y# i+ I4 O$ E5 c; a9 D) X RET: m1 P# c& K A0 O9 k4 l
START ENDP" B0 n5 n0 Z7 ^- W9 d
CODE ENDS% ^4 _/ n. {/ x$ z9 r0 o
END START |