请编制程序,其功能是:内存中连续存放着20个十六位二进制无符号数序列,请将它们排成升序(从小到大)。 例如:
. q1 O( s; ? _ 内存中有 7001H,7004H,7002H…(假设后17个字均大与7004H)
/ A# X* l+ f+ j4 H) o 结果为 7001H,7002H,7004H…(后跟17个字,按从小到大的顺序排列) R" L- L8 w& k! [0 x$ X7 ~
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
1 c, h; |- o. g# Q 填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。4 `$ ]# m* C: v* c9 n$ x k, x) d2 j
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
0 Y# }3 z5 x' Y4 g) X: e 试题程序:+ s6 N2 l# v# l$ a1 ^- o+ i/ P
EXTRN LOAD:FAR,SAVE:FAR, Y* N# A/ ~/ W$ n; [1 \
N EQU 20
* Z3 K: f' F0 g3 \/ U5 y1 h& ~ STAC SEGMENT STACK5 J7 [4 Z) y! J8 U6 u
DB 128 DUP(?)9 o2 a$ J# e- ]% S
STAC ENDS
4 k8 e8 Q$ D) L; d: [- Y5 Y DATA SEGMENT0 O1 x4 a$ d9 [, \: o
SOURCE DW N DUP(?)
8 E; A3 ?' h W! z% I' @; o' F RESULT DW N DUP(0)
2 ^/ W0 l- t) ^" { NAME0 DB 'INPUT1.DAT',0" m) S% J' g1 B
NAME1 DB 'OUTPUT1.DAT',0# x+ ~% G2 t9 R P
DATA ENDS' b! ~( j7 a9 }2 a% m/ L
CODE SEGMENT
1 E; S% P3 B5 v: n8 \1 ?, x: |- e ASSUME CS:CODE,DS:DATA,SS:STAC
2 D8 v' i7 V, c# [6 k. M1 F/ _' K* h START PROC FAR
( r7 q0 }5 L* b+ A! O PUSH DS
2 E6 G$ L1 n: T) q2 l: A XOR AX,AX5 Q* n7 ]. e7 n
PUSH AX
, V9 F( b! O% k, |: X4 I MOV AX,DATA) T! Z( F9 I) i/ h1 p- A# m/ P
MOV DS,AX% Y' S- D4 g" p1 G- l" n
LEA DX,SOURCE ;数据区起始地址
" Z% C2 e# m- s& G% T& ~ LEA SI,NAME0 ;原始数据文件名
' V0 E: ^3 S2 y* g+ C3 m z' E) d MOV CX,N*2 ;字数 _. z, y6 z" T) N7 Q( d. A
CALL LOAD ;从'INPUT1.DAT'中读取数据
* b, J: ^9 N& a3 k1 P ;****BEGIN****
+ ]- @4 w# \% x# T( J LEA SI,SOURCE
1 y0 e' S! B8 p4 p; Q LEA DI,RESULT& n( j( w. v/ Z F
MOV CX,N
& x( m5 }( H" g, F8 l NEXT0: MOV AX,[SI]& D r( p5 m( p2 B
MOV [DI],AX5 i5 }4 s) @: O8 l$ h
ADD SI,_________
4 E% v% b0 d8 f% V( T1 G _____________________
2 U; B; e! A- s$ D2 J) C% [9 s/ V LOOP ____________$ I/ U9 A% D; y$ q! Y2 ]# T# Q' f
CLD5 s- {# X2 V+ u+ [: l
MOV BX,N-1
0 E. d& B3 Q f" ~% p MAL1: LEA SI,RESULT
+ S3 ^; K7 s3 B, `& N: V MOV CX,_________
. u0 P# C, @1 B$ s, v NEXT: LOD______
8 o4 g, K* [) ]8 T9 e7 u' K$ W CMP [SI],AX
. j/ k7 P ~3 |$ ^ JAE CONT
& Y+ \% _$ _8 t2 H1 h" B2 q XCHG [SI],__________
. i8 I8 X% d5 ^9 q MOV [SI-2],AX0 _" M) m! ?* ^# p( f6 R
CONT: LOOP _______________ y; C8 @2 L4 _ G: C x2 b9 g
________________________
+ R! v5 D7 Z8 o ________ MAL14 s+ F8 q5 P* H1 K5 U3 F
;****END****
9 M# z0 J7 o5 `. X: `2 n LEA DX,RESULT ;结果数据区首址
$ e l5 Z6 z( Y# k8 ^' y LEA SI,NAME1 ;结果文件名
% ~1 z* v0 m8 s1 j' h4 ]6 u MOV CX,N*2 ;结果字节数
% H0 J' B9 r/ |3 A CALL SAVE ;保存结果到文件/ r$ Z- v9 d2 ] N1 u8 `+ n3 Q
RET* A m" O; z6 m
START ENDP6 ~6 }; y7 ]0 R
CODE ENDS% H. Q4 c+ m/ ]; w l
END START |