请编制程序,其功能是:计算10个有符号字节数据的绝对值之和(字型),并找出绝对值最大的数及其所在的偏移地址,最后将它们依次存入指定的内存中,结果以FFH结束。 例如:/ `9 K+ `, N! v2 {7 |2 h$ v
内存中有 10H,01H,27H,00H,FEH,80H,00H,03H,FFH,01H$ A! a; ]+ k4 z1 @
结果为 BFH,00H,80H,05H,00H,FFH- t: c" E* Q3 R) p, z w# t8 i
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
6 s" `# F+ M e 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。( f- W9 T& h. b, Q8 p- J
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。& ]2 x, K% L9 j4 h" o+ K8 i
试题程序:/ i' C( |3 X" I
EXTRN LOAD:FAR,SAVE:FAR
/ c R: A E/ B* P, A5 N3 z2 g0 v0 f N EQU 10
; ]# Y9 }5 i% @6 p& ~ DSEG SEGMENT( q. O R8 K$ D# O7 V/ y
SOURCE DB N DUP(?)
. a3 a" c8 w4 C. g RESULT DB 6 DUP(0)
0 H7 `0 \' ?# a0 x- \$ M' a MAX DB ?- d! ~# t: `4 ?
NAME0 DB 'INPUT1.DAT',0
! h# |6 ^9 o# e9 Q, e, l NAME1 DB 'OUTPUT1.DAT',0
2 a, R1 x8 U8 { DSEG ENDS0 f& @& Q( x3 }0 @, g
SSEG SEGMENT STACK2 m) B* X$ _ W& |2 ~/ Z
DB 256 DUP(?)+ X: S4 C3 _' d
SSEG ENDS
6 G' K, C( f) E) v9 T& h; L CSEG SEGMENT
# k8 j+ _' Z6 t6 j ASSUME CS:CSEG,SS:SSEG,DS:DSEG
. E$ q# H' c8 {' ] Z: E7 c0 a START PROC FAR$ R5 a) J9 a3 {; F/ C% C
PUSH DS2 w: r4 z. h% \; y1 _, l/ D- Z
XOR AX,AX
8 Q9 H6 u* \( | PUSH AX
' D/ `" s g9 m# m: P MOV AX,DSEG! q4 R" E. L1 Z3 P2 O$ U
MOV DS,AX" ^% ?; [$ I1 v! O4 G, g! E) T$ c
MOV ES,AX ;置附加段寄存器
0 |: l9 M1 Z/ Z" @ LEA DX,SOURCE ;数据区起始地址4 i" F( J6 l& {! [8 V+ M+ y7 M
LEA SI,NAME0 ;原始数据文件名# Q. d9 G U) C. t3 E
MOV CX,N ;字节数
# J4 j& Y1 V2 D; Q' j4 @ L CALL LOAD ;从'INPUT1.DAT'中读取数据- j* ^, s4 y7 ]& o7 n
;****BEGIN****
' @/ c5 X$ m2 A! V8 a$ H/ { LEA SI,SOURCE$ ]" t- _. U) G, I# w! M/ H+ H' c
LEA DI,RESULT
0 z/ j# S8 d/ L5 G MOV DX,SI, U9 D. m2 ^+ z
MOV CX.N-1
* ~0 v; W0 i k, ~6 ^1 g: P2 w MOV AL,[SI]
6 G( b! M9 z# W! y) M: m ADD AL,0
3 p3 A/ K* O$ ?. V$ {2 v0 q# ]9 A JNS P1
/ E! l) G. a8 W/ A# M _____________________
- V! d0 \/ _8 { P1: MOV MAX,AL
! [% R6 G$ a% y/ s" V ADD [DI],AL6 {" ]- C8 @1 n* k4 u/ l4 c
___________________________! ?2 n' ?; L& o9 Y! K; F4 \
GOON: INC SI/ ^8 ~' @1 o$ i! `% P0 H
MOV AL,[SI]
( X/ n% A# j# {; I ADD AL,06 O' B2 T9 d& p- f
JNS P2
" x( U! v* D! X5 {0 S% g9 r8 f NEG AL9 e2 G- o0 c# y) ?- c) [! t
P2: ADD [DI],AL
" G2 u! A) u0 P5 c" _ W. F' [ ___________________________
3 O" w: J% b$ G5 G CMP MAX,AL' Y8 E& T+ y7 E/ z+ ?
JAE __________________8 T( I* n$ {7 }9 t: k
MOV MAX,AL
- i+ ]. V; }! G+ u( l6 }6 ~! ` MOV DX,SI
. ~, R% H8 Q) j* c+ K# F NEXT: LOOP GOON
" o% M8 v! a( h4 \ ADD DI,2, Q' c s* e% X* I5 F
MOV AL,MAX# D0 ]4 d- Z! ~: i
MOV [DI],AL# u; ]( v P* J% K e/ N
INC DI) @/ ?) ^ }% d# z0 }3 p7 J
MOV [DI],DX
+ ~$ z- q! y0 [4 M& [" [ ADD DI,2! V' ~9 \! Y! J' V% t. o
MOV BYTE PTR [DI],___________5 ^4 z, Y+ K( @( g
;****END****/ Y% N' Q+ T' n, y2 A
LEA DX,RESULT ;结果数据区首址" \/ T x+ D6 x
LEA SI,NAME1 ;结果文件名
3 e, [! I; J/ p2 }: Z MOV CX,6 ;字节数
( d: t2 X# P) ^2 ] N) t$ Z CALL SAVE ;保存结果到文件
7 \5 v5 a! r, q4 | RET
1 Z/ S0 U! C& R7 K1 j# N START ENDP
/ w( v8 E+ F4 T0 q8 \8 K4 s! `4 L CSEG ENDS$ \0 _3 D- ]6 ~# D. n
END START |