请编制程序,其功能是:以SOURCE开始的内存区域存放着若干字节的数据,以'#'作为数据的结束标志。将其中的空格滤除,对每个非空格数据的最高位清0后依次存放到RESULT指示的区域,其后存放一个空格符(20H),然后存放原来的空格个数,最后仍以'#'结束。
! p/ O8 f% R* ?9 {1 n6 J 内存中有 45H,20H,87H,20H,A5H,32H,20H,20H,20H,23H
3 N. }( l7 v% F, K9 @, x 结果为 45H,07H,25H,32H,20H,05H,23H
3 f3 D9 r5 \, u$ o 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
% J r# w7 [, p" z& a1 }+ f 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。' ]$ ~1 Z) U9 W7 i
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
$ N' g8 O9 J6 {! O# u( G+ d# |3 \8 G 试题程序:
+ v& D9 J; K! P7 e EXTRN LOAD:FAR,SAVE:FAR
! u/ R& O/ @' g9 v8 `6 n, X N EQU 20
3 J2 i7 Q3 [/ d ESC_CODE EQU 278 \) W% v/ [' Y7 s: }
STAC SEGMENT STACK
4 F3 D0 \, E: m" T5 l% G* b8 j DB 128 DUP(?)
, z: [$ V: F6 S5 P j1 m6 c) _1 w; }( j z STAC ENDS
! ^8 M; s9 g$ h DATA SEGMENT0 @: U, v- w6 @
SOURCE DB N DUP(?)
3 `. Q$ c: Y* l& x RESULT DB N DUP(0)
+ |8 n1 H( w( S W9 t1 E NAME0 DB 'INPUT1.DAT',0. e3 h: r7 Q6 L/ F8 l, {" Y7 n
NAME1 DB 'OUTPUT1.DAT',0
) d6 ^: ?; i3 A" ~5 c DATA ENDS4 A3 h! S8 L( \4 H4 J, c7 d- `. N4 a @
CODE SEGMENT
3 j7 @6 i5 e. u* o ASSUME CS:CODE,DS:DATA,SS:STAC
8 U( I5 B J1 {; U, R: H7 J6 h START PROC FAR
' J( J- M5 F9 q8 o PUSH DS, \) K, M* n$ q$ p" l @" v
XOR AX,AX
* a9 }; f$ h8 z6 o( f PUSH AX" ^5 q, i0 v* R6 @/ n) u! `
MOV AX,DATA5 @( y i: p0 h- E. `! M# I- ?* T
MOV DS,AX
7 D1 y+ g/ G" K* {) b MOV ES,AX ;置附加段寄存器
& b2 B3 ], C, o* G& |' P LEA DX,SOURCE ;数据区起始地址
. M3 k8 T; Q; W# k' }/ v$ I9 o% H LEA SI,NAME0 ;原始数据文件名
; x6 a6 [! k' R MOV CX,N ;字节数
& A# }, H8 l2 v/ V CALL LOAD ;从'INPUT1.DAT'中读取数据
4 H/ G! Y2 B8 ? ;****BEGIN****: N, E9 ]7 `+ i- u" \
LEA SI,SOURCE
9 Z+ {' z2 E3 n; s& S- ?$ l/ v MOV DI,OFFSET RESULT5 ~/ } e/ B! d! ~9 R# \$ ?. |' Y/ q
XOR BL,BL
m3 k) J2 O! W) f; K AGN1: MOV AL,[SI]
# e% C, O c# T0 R8 c$ o. V5 K INC SI
1 o F) u/ J# P; t( G6 D8 n CMP AL,' '. I) H1 b+ ~7 V% o6 x
JE __________________+ w# x& ~4 W8 a( g8 T) D, p$ `
JMP AGN2
$ I5 l; d4 `4 k8 N9 J: _2 h6 [ AGN11: INC BL% V3 H9 v- h; N3 V
JMP AGN1
0 x' ?7 n( s2 {+ i0 e AGN2: CMP AL,_______________) A! ^$ U' c n. o7 P
JE DONE2 Q! D( W C2 c" h
AND AL,7FH3 o3 |* H: X7 X$ u2 C; U) B
MOV [DI],AL
3 n# ^7 @) B- V$ E6 k# p3 y ___________________________
4 o, b$ X* i- p ___________________________, f* Y5 g! H' \+ v
DONE: MOV AL,_______________
; k: O) s4 h2 o6 Q: R MOV [DI],AL
1 d0 p* V9 P+ P7 B, k& X# X P4 J INC DI
4 B X( X, z( ]! n! q' X MOV [DI],BL
' ` Z' F' `# P3 t8 D INC DI
! R; ]3 S! B8 G0 v y MOV AL,'#'1 r% V( l" b) i( X D k/ L
MOV ____________,AL0 V. M& M3 x0 Q6 [
;****END****
/ i+ u, Y9 Z) \0 M$ F- T$ Y LEA DX,RESULT ;结果数据区首址" |, _4 |9 u/ v) O9 y8 T9 O5 V% z
LEA SI,NAME1 ;结果文件名, N; l/ b6 l. n3 z6 V1 W( W2 f* B
MOV CX,N ;字节数
1 @# Z: f0 [% t CALL SAVE ;保存结果到文件' [( m. p1 B; t. C
RET
2 U7 i! r; J( J: `6 i3 Q5 j START ENDP9 q% b, u% n* z! ^
CODE ENDS
9 @0 \; J5 U5 v4 F" f( [2 j END START |