请编制程序,其功能是:内存中连续存放着10个无序8位有符号二进制数,此十个数中正数和负数各为五个,现按就近原则将该10个数排列成负数和正数相同的序列(第一个数为负数)。 例如:
# m( Y4 s( e5 n# B 内存中有 81H,88H,A3H,03H,47H,E2H,76H,D8H,13H,50H
! v6 V6 S/ Y; J* Q) `' E 结果为 81H,03H,88H,47H,A3H,76H,E2H,13H,D8H,50H. I$ n k: G8 v& a4 j
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。9 x0 R" G4 {0 A9 R' N
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。/ }9 X+ b# ?7 P' C% G. N
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
# |3 v- D: v" y2 r 试题程序:+ ^" L5 r) Q# o6 W
EXTRN LOAD:FAR,SAVE:FAR
6 V" A+ g1 P; L \ N EQU 10# d& F$ m2 A7 s5 l* }6 G
STAC SEGMENT STACK
0 Z6 V+ F: _# @9 I1 E. d* i/ t DB 128 DUP(?)" f0 c/ C$ B3 P1 h B
STAC ENDS
5 Q& `5 ^& W$ l4 f+ r1 B* P# ? DATA SEGMENT9 R' V9 W- A8 c* ?( g
SOURCE DB N DUP(?) ;顺序存放10个字节数
& X. y/ X" C$ m/ K. S7 l RESULT DB N DUP(0) ;存放结果
6 _9 O" ~6 u- V7 A; U% [ z NAME0 DB 'INPUT1.DAT',0
& [6 K% S4 n; t: [1 I. p4 j NAME1 DB 'OUTPUT1.DAT',0
# U8 t3 G7 m; n6 F- f* q DATA ENDS6 L+ ^4 d% {, X2 f. S
CODE SEGMENT
0 l$ S: C4 U' P+ c0 M ASSUME CS:CODE,DS:DATA,SS:STAC
( B" i/ V9 X( A* c+ g: H START PROC FAR1 i9 }. Q( o8 [+ q3 |9 w9 f }
PUSH DS
. n3 Z0 [& @) D' L/ w. J XOR AX,AX
. {7 Y: g4 T: w, q PUSH AX
( f2 Y8 y& U- T0 v( T( Y: ? MOV AX,DATA: E& D, A! }6 P [* m; h* Z
MOV DS,AX
/ O9 E) n# r4 M w LEA DX,SOURCE ;数据区起始地址
2 q5 z& w) \9 Y. y! J& n1 s LEA SI,NAME0 ;原始数据文件名1 T. r+ ?4 v: E7 a. R+ r
MOV CX,N ;字节数
* S: P* E$ ?3 Z% y/ Q CALL LOAD ;从'INPUT1.DAT'中读取数据! g9 J4 _( f" t; g
;****BEGIN****: ], k- y. ~9 |5 _
LEA DI,RESULT
# @9 {4 a6 S3 V; S MOV BL,___________2 @, T: h# |7 C m
MOV CX,10
* c/ H5 r4 V1 Z AGN0: MOV DX,CX; M9 k0 E0 o7 O% }* H1 e
LEA SI,SOURCE
3 @/ R, }: O9 P( A* F8 a; X AGN1: MOV AL,[SI]) N- w& d$ d" |" R( j* |
DEC DX
+ W( l; r, D e/ F- \) w- o5 B8 P4 P PUSH AX
# h6 e0 X9 u5 N h! \; p) G- _ AND AL,80H
0 S2 S7 y# K/ u CMP _________,________
4 g- Y! ]: p. F2 l JE STORE1
8 c: I: U9 Y" E2 P) J. v POP AX
5 D8 C+ ~# L' j1 ?2 M2 C, [ INC SI
; x' ]* u! u# A# a4 x9 p# g4 d' ?. O JMP AGN1$ U3 M; N9 _( t4 _' B/ G, q
STORE1: POP AX0 ~" i7 G% k4 t$ _2 ]. _ O
MOV [DI],AL
9 H* f) H! K2 R. U. Q- I INC DI# m8 U# q `3 K' f
ADD ________,80H
' I6 T( G! R& X# H) j5 @ ARRY: CMP DX,0* ]4 u5 H! T/ e' ^
JZ NEXT! ~2 V& {* M" t9 h* Q3 F0 }
INC SI, P4 K! x5 W: B2 }$ F4 Z$ j
MOV AL,[SI]8 R8 M' \/ s% f' F3 F x
________ SI1 B) L: E- P0 ]* W! a* W) c
MOV [SI],AL9 m6 l- s* @) c9 V! m% c
INC SI
$ s3 J$ R( P1 k' {0 f; \2 Z0 c9 r; J DEC DX
5 M( K1 _4 Z" \( [+ ] JMP ARRY
2 G" N5 J m. E& j NEXT: LOOP AGN0; l9 K; D: Q. e M
;****END****
4 M1 x+ E) s' R. [# k LEA DX,RESULT ;结果数据区首址
/ `( o7 B4 [' F LEA SI,NAME1 ;结果文件名
2 R1 Q/ ~9 ^; u( o MOV CX,N ;结果字节数& S. _0 L3 t5 D) J) z1 k
CALL SAVE ;保存结果到文件* Y7 _5 N9 C( Z* w, R6 I, @9 n
RET5 T6 v. V! {+ k5 B
START ENDP
0 |0 T9 k: d: \; c$ `8 F$ E' | CODE ENDS
! } d! t' Y, f) J! J END START |