请编制程序,其功能是:以SOURCE开始的内存区域存放着N个字节的有符号数。现找出最大的数,结果存放到RESULT指示的单元,其后存放原N个数逻辑取反后的值。 内存中有 09H,7EH,89H,F3H,17H,…,67H(N个数据)1 e$ B, L' M! F8 L& g" }/ {' A
结果为 7EH(最大数),F6H,81H,76H,0CH,E8H,…,98H(原来N个数的逻辑反)$ i! v# S0 e( U! K, E
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
$ l- W. ]& h. M9 Q 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。! c1 d0 b7 M3 Z: }: \
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
3 r! {" J7 d/ c3 Z; b- a6 b' ?" H 试题程序:3 C' f- o/ H5 c8 x; t& P* _. a! g
EXTRN LOAD:FAR,SAVE:FAR
& o7 [+ h1 ~. L8 e! N$ X N EQU 194 _: `5 z6 N3 b8 h g* C) U7 {
STAC SEGMENT STACK( r2 d ^9 t X+ C/ o1 N4 C' o# Q
DB 128 DUP(?)- u& C# w. Q& W# r$ M5 C0 @
STAC ENDS
I. _% [- D0 v+ ~ DATA SEGMENT
% S5 k1 i/ M$ ^+ ~8 }% g, u. P" ? SOURCE DB N DUP(?)
`, Z2 y t, o( z. _, T' v' c RESULT DB N+1 DUP(0); U; r4 N# O7 q. V' `' c; n- y& w* r
NAME0 DB 'INPUT1.DAT',05 {, @7 K) L9 O* ]3 S
NAME1 DB 'OUTPUT1.DAT',0 ^9 F# v) }/ S: x1 m
DATA ENDS
7 i: o' b7 V' h: E- y- |6 n' | CODE SEGMENT7 _. o+ D; O( c$ Y, t k, Z6 K
ASSUME CS:CODE,DS:DATA,SS:STAC1 O! t$ [1 e Z8 Z7 ?
START PROC FAR* d( T" a% ~( `6 s1 ~; v
PUSH DS) H0 G: A0 J6 g% l* X6 D- k% D% d
XOR AX,AX$ d+ y1 \/ i1 V+ c9 m
PUSH AX+ c% x* ~. L+ N# S1 j( p
MOV AX,DATA
b% L: x( b# Q7 S. M, a MOV DS,AX
# Q7 ?1 E+ X) u& D- z9 ]* G MOV ES,AX ;置附加段寄存器
2 B- C6 s- s5 P' F" m b LEA DX,SOURCE ;数据区起始地址
; t" D5 c+ k2 X* U: z0 o$ f LEA SI,NAME0 ;原始数据文件名2 _) _8 m7 p6 P; T
MOV CX,N ;字节数
* w: N% z( v# R7 K, n" q; e5 q" c CALL LOAD ;从'INPUT1.DAT'中读取数据+ N1 y8 w; Q/ r7 w* I
;****BEGIN****
9 v6 R3 h; ]! {7 Y1 U ________ SI,SOURCE1 l/ _3 q. ?+ l2 _5 L
MOV BX,OFFSET SOURCE
; q+ e" F3 B; A; ~# u$ R) } LEA DI,RESULT
& |- Q, k5 O- {9 V& r. H MAXD1: MOV CX,N
8 |0 d8 Y, b- P" k- t MOV DX,CX8 S2 L ]7 D' t/ S: z" f; I
MOV AL,_______________
! v t* B" F; a MAXD2: INC BX
- t0 J3 y2 _9 {& e u ________ AL,[BX]
" ` l4 ^4 q7 [ ___________________________
2 _7 P8 B4 N! {2 d MOV AL,[BX]
0 e Q2 t# \ M; b# D MAXD3: DEC DX* Y# @6 I$ W. B# t$ R
JNZ __________________
@& w- H) y8 R MOV [DI],AL
p2 y: m1 f9 G INC DI
6 t! u8 w& M, w2 N8 M CLD, o! J d% u- a% f
MREP: LODSB M0 H) p- a, o: K
NOT AL
1 r0 s7 g1 G, u2 ] ____________________________( v# G7 {# B% D4 X- S
LOOP MREP) G. T C# _$ X. D2 Q; i
;****END****5 Q5 B% ^: n5 @( r3 S& F* E! W
LEA DX,RESULT ;结果数据区首址
9 c8 z: W1 n6 f3 @5 _ u LEA SI,NAME1 ;结果文件名% g. s0 `) V8 C3 O4 H# H9 I
MOV CX,N+1 ;字节数
' Z$ u# E; A- s6 V* x: E CALL SAVE ;保存结果到文件: i' q6 }+ {" D) N- x
RET/ s. b2 I6 S6 l3 J% T
START ENDP2 {! t/ A: G( F* |9 j" n* d& T
CODE ENDS- F6 }, G. u, C0 B q" E
END START |