请编制程序,其功能是:内存中连续存放着20个十六位二进制无符号数序列,请将它们排成升序(从小到大)。 例如:) |. u8 H% \, Q0 I
内存中有 7001H,7004H,7002H…(假设后17个字均大与7004H)
5 {; [. O% ]3 D' q+ |3 T; b 结果为 7001H,7002H,7004H…(后跟17个字,按从小到大的顺序排列): ?9 b3 |8 q$ o9 Z8 p
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。" B( F; c3 Y2 `# W' L
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
! d/ a+ R3 D4 }; J% Z9 m 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。6 `7 O( ~! s3 Y9 z4 ?$ a
试题程序:
; I1 N) W4 I F7 \3 r! ~ K( h" Z EXTRN LOAD:FAR,SAVE:FAR
1 ], @$ @3 C$ \9 q% A! h N EQU 20
5 {0 B; U. u4 l$ D5 U$ J6 F9 _' w" P STAC SEGMENT STACK
, Q; T0 t; e# z3 [5 x: D0 V DB 128 DUP(?)5 O5 U* A& W) X3 y3 ?( E$ h4 ~
STAC ENDS
0 h7 M% |8 e/ d$ X5 y0 o1 ^6 e DATA SEGMENT
3 T& [# c4 B! m" `6 F" i2 c; s SOURCE DW N DUP(?)+ z" z- b9 k2 B) M" ~+ S
RESULT DW N DUP(0)# X. V' r3 P7 Z$ q0 P F
NAME0 DB 'INPUT1.DAT',0/ K: m C+ P! J9 S* X( n( S9 i. }
NAME1 DB 'OUTPUT1.DAT',0; K3 ?/ s5 L w4 Z6 s1 R( V
DATA ENDS% R& ^. @+ i+ ]+ L, ^7 ?
CODE SEGMENT- p7 C6 s Z* d! _4 h1 A
ASSUME CS:CODE,DS:DATA,SS:STAC
9 s ? }6 I' J z# H8 ? START PROC FAR+ A0 M, [! U4 ]7 @" I+ m
PUSH DS& J8 D- I! o( [
XOR AX,AX
: {+ F8 [! v! i$ h6 ?7 h PUSH AX7 V% Z! t5 @) v1 r
MOV AX,DATA+ B$ B/ p% c, C
MOV DS,AX
0 z' o- |7 t4 e8 H LEA DX,SOURCE ;数据区起始地址
5 w# I, G9 J" y* b5 P/ m LEA SI,NAME0 ;原始数据文件名
K1 {4 j7 n/ ^9 A, ~( C MOV CX,N*2 ;字数( o/ V6 c) m3 I9 ^. @5 X
CALL LOAD ;从'INPUT1.DAT'中读取数据' @ V* t$ y% E7 {0 J& w5 B
;****BEGIN****
8 L+ S, W0 f- r( y& p LEA SI,SOURCE
5 m) f" I7 H" ?7 R* j) P4 } LEA DI,RESULT& n7 Z9 ? M6 Y k; M
MOV CX,N
+ P0 V. y9 k7 j& C1 o NEXT0: MOV AX,[SI]- W2 v4 M; y f1 `+ E/ @
MOV [DI],AX1 |: o& u; O( f8 X1 v; H# D
ADD SI,_________
1 u' G9 j; [6 x) [& ^ _____________________ Y- S+ ^: I; e) s" j
LOOP ____________
$ _ A* J) `& |. [8 {2 }8 l CLD& U* E, L! z+ E* c" h
MOV BX,N-1& w t! O. l" P' c# S/ X
MAL1: LEA SI,RESULT' \/ v7 g; l) x8 y
MOV CX,_________
- ]* H$ C4 P( w NEXT: LOD______
) S( E/ n! A. p- C! W& x, e8 U CMP [SI],AX
- e3 ?) U4 x' q+ R) N JAE CONT
4 @ I' g, h7 T6 f1 Y3 o: y: |7 O XCHG [SI],__________
: Y) b! T( H8 K( z/ U) E MOV [SI-2],AX1 j' q* C7 b: x. g) z! j" _
CONT: LOOP _______________/ p5 ^! e$ a$ K0 c6 i# u
________________________
% [$ f% L7 h8 i2 M* Z3 w ________ MAL1
- x: o: ^1 S3 x9 W& |+ W ;****END****7 G c% M- O9 }1 k
LEA DX,RESULT ;结果数据区首址 o p' \1 x. K# v# d8 P& V. z6 T* \
LEA SI,NAME1 ;结果文件名4 K0 p8 Z, u6 p3 y0 v
MOV CX,N*2 ;结果字节数
, R2 `8 U1 t* x0 t& Z CALL SAVE ;保存结果到文件
. I0 R) y- e8 ^- Q RET; y% j" [' K g; {* ]
START ENDP
% Q9 Z: u8 z! t" _1 ? CODE ENDS
4 X% r3 {2 p. s END START |