请编制程序,其功能是:从0行0列开始,依次取出N阶矩阵中对角线上的元素(字节型)并计算累加和(字型),然后将其存放在指定的内存区中。 例如:
7 a9 c- n- S7 I' q2 [1 A0 e# C 内存中有 1,1,1(第一行),2,2,2(第二行),3,3,3(第三行)) g% H6 m y8 b0 l& X/ W: D% e& G5 ~
结果为 01H,02H,03H,06H,00H
' e; r" ~7 F, b2 D1 I; O9 z 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
" g6 |* A4 m' S7 J- \6 i9 l" H 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。6 u0 C! y2 C" O4 }
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。1 n# _! }2 _' N \( t
试题程序:
6 |* E/ D! F Y Y! [ EXTRN LOAD:FAR,SAVE:FAR; b) K+ B6 I4 g3 O2 a
N EQU 10
! Q& Q8 j3 D: W+ } DSEG SEGMENT- Z e& \7 a- J% G+ h3 T5 q6 D& B L a" t
SOURCE DB N*10 DUP(?)
/ S3 S& Z9 \% U6 y; x+ J# i RESULT DB (N+2) DUP(0)! Y7 b. c9 j8 x" r
NAME0 DB 'INPUT1.DAT',0$ Z4 M6 r* j6 z0 n$ C, ]; P4 B1 X, n
NAME1 DB 'OUTPUT1.DAT',04 n0 I* X: {" F3 z" Z/ c
DSEG ENDS8 f% a2 t+ n2 y' d+ G
SSEG SEGMENT STACK
6 ^1 f( J- b$ q* n4 c0 t DB 256 DUP(?)
# S3 ]. v# U$ K" z SSEG ENDS
" S' a, E3 h, ~/ |1 ] CSEG SEGMENT
; _. R- M( A4 D ASSUME CS:CSEG,SS:SSEG,DS:DSEG,ES:DSEG1 l9 V( s/ D l7 T$ v5 [
START PROC FAR9 `) \( r9 Q0 W) |( g
PUSH DS
! P. G2 W& W6 {& u6 Q2 U/ Q XOR AX,AX% O- j1 O# [6 Q& w2 W) L% F
PUSH AX8 q& q; Z# d% }. O8 Q+ M0 v# S1 l
MOV AX,DSEG ?7 w! \& I2 e$ @! P5 V
MOV DS,AX- Y R- v- y6 |
MOV ES,AX
& ]& A* r0 v+ i# S4 c LEA DX,SOURCE ;数据区起始地址' u2 y# N& _5 @
LEA SI,NAME0 ;原始数据文件名
2 t; X* n' \5 ^ MOV CX,N*10 ;字节数1 k5 Z" _6 N6 Q0 p7 L1 \7 a' q
CALL LOAD ;从'INPUT1.DAT'中读取数据' h8 {- B" S8 T2 F0 C5 y
;****BEGIN****
& l4 l2 M. L8 k4 X/ f/ g LEA DI,RESULT
' x+ }0 N8 N' l5 P MOV CX,0# m' o0 s2 K5 f% e- N
MOV DH,0 ;行
6 u& m, e7 R4 D7 \ MOV DL,0 ;列% q8 F# P4 V3 A B! B- W
NEXT: MOV AL,N* l0 R$ E4 S8 T" ~' }7 H; M) B [
MUL ___________________* }: E5 n4 r9 z9 O" s
MOV BX,AX% Q$ t7 Q5 V2 C- x2 D
MOV AL,DL0 |3 C# z& ?; M$ p4 t9 ` U
____________________________& g8 }6 o# n w6 ^ {% E* G
MOV SI,AX ;列号送SI9 ^8 \6 j. U) v$ X/ q& I0 c
MOV AL,________[BX+SI]+ X! t a2 i3 S5 n! m
MOV [DI],AL
7 g0 s1 r$ Q( \& O* `/ P' u. ^ ADD CL,AL# g6 ]0 G( M2 M- f* z' w4 v; {1 H
____________________________( e2 }/ l7 B! T" x1 `
INC DI( s7 Q! x5 d! H) x) o
INC DH( E- ^% d( y" I4 F# G7 X K" p
INC DL
{+ q- ~3 x! a) n7 t- n CMP DL,________________+ N% Z9 M8 u5 N. w' W* ?
JNE NEXT
4 y m$ _* r' U$ U MOV [DI],CX
" Z' P- E6 Y- N" j5 b( g ;****END****( e5 _( Y# b% P+ k" Z
LEA DX,RESULT ;结果数据区首址
* E0 E* U0 a( N. |5 E LEA SI,NAME1 ;结果文件名
, P( T* {2 m( R" @ MOV CX,N+2 ;字节数) ?. q* u: W& r7 u) y6 q6 ~7 b% C( D
CALL SAVE ;保存结果到文件
9 E+ [& M1 O1 S2 m' k RET
( _/ `/ ? O( L% ]7 Q3 V/ d START ENDP' _, ]) d5 L8 D% |: q; J% P! t
CSEG ENDS5 n8 v( \- m9 B/ g, m' E3 s) v
END START |