请编制程序,其功能是:一故障报警系统连续集20个字节数据存于SOURCE开始的内存区域,如果数据字节中有二进制位0(0代表有故障),则记录该数据字节中0的个数,并按数据字节在前,0的个数在后的顺序存放到RESULT开始的内存区域。
) l- ^$ G/ _1 |$ w% \% b( o 例如:
; }/ V# F+ B$ ^) b1 t 内存中有: FEH,90H,FFH,DDH…: h9 _+ N6 w" V; M
结果为: FEH,01H,90H,06H,FFH,00H,DDH,02H…' b$ U5 J7 D w; H
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
Y7 o6 {+ s6 ^4 [/ Q6 ~( F; Q# y4 X 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
$ v. K! {6 Z7 z8 R9 V! F 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
3 c; ?) U9 o( Q3 p z4 n, x 试题程序:/ @8 `: o5 Z( O( d1 O! ]0 ~
EXTRN LOAD:FAR,SAVE:FAR
0 z# o) n0 Y1 [ N EQU 208 t5 `( }) d# x
ESC_CODE EQU 27
5 ^( B& [, }. k( G8 B/ p STAC SEGMENT STACK
6 A2 y, \6 S& Z' r/ h. t DB 128 DUP(?)
! p, y5 r, d+ r7 x0 R# p STAC ENDS
2 `7 \5 F+ N4 `% q' }+ I' s DATA SEGMENT, e2 D3 l& l0 k2 a. ?+ \
SOURCE DB N DUP(?)7 X+ J& M$ [9 H* g2 {
RESULT DB N*2 DUP(0)
* h3 A5 s* j4 L ? NAME0 DB 'INPUT1.DAT',0
# Z5 b: u# H% T; \7 H, @ NAME1 DB 'OUTPUT1.DAT',0
9 R5 L( C( }& y/ j DATA ENDS) d! a& p! l: @5 V9 u3 T
CODE SEGMENT Y6 M( c6 m0 c! ?" w4 o6 i
ASSUME CS:CODE,DS:DATA,SS:STAC
$ X( V7 ]1 ]0 P6 N START PROC FAR, g. K; E! e+ L4 A2 i$ E" c# u
PUSH DS( T5 N! v' l' m1 q
XOR AX,AX
. R! @5 Z/ X4 E6 s. x1 T PUSH AX' Z; S- ^/ H2 D/ t
MOV AX,DATA# o4 ]1 c9 f: C1 m- k- E% W" x
MOV DS,AX
1 m, n! f5 t! N5 o9 { MOV ES,AX ;置附加段寄存器3 D5 l5 Q8 j5 f9 Y4 [1 X, ~
LEA DX,SOURCE ;数据区起始地址7 k/ v* F6 f3 b+ [6 N& a
LEA SI,NAME0 ;原始数据文件名
6 t5 K c# F+ A$ A9 I) [; I6 Y9 F MOV CX,N ;字节数
$ X7 p3 ]8 f1 u# A; W' P+ Q CALL LOAD ;从'INPUT1.DAT'中读取数据
; [: p' W4 C3 b* ]2 m/ j- r ;****BEGIN****% i" ]9 v2 P& b3 W- {9 Q
LEA SI,SOURCE
" L& q1 I8 a x+ @7 r" d2 W MOV DI,OFFSET RESULT6 \9 Y/ }( _( C( h" G
CLD
2 _# q% e, z4 ? MOV DL,N* P/ N9 g1 q `, k, W$ f1 P
LP1: ___________________________ ;字节数计数器DL
/ g# S- ]" ?5 m' m$ p9 [. N MOV [DI],AL
6 c( w5 |3 g0 { MOV CX,_______________; @$ P9 r5 c5 |2 F8 l, S
MOV DH,0
6 G! ~0 Y! X- I: ~3 E( ?( E2 W LP2: ________ AL,1 f' E7 b% W3 B; o2 m7 G% d4 M
JC __________________2 N: u% o; Y, L
INC DH
) _+ ?) \; ~# w# }( M3 L LP3: ________ LP28 Z4 y9 z5 U0 g) @0 \! w8 j; K
INC DI
$ T5 |: ~/ }: k& a2 m MOV [DI],_____________# W/ s6 \0 L. d, h
___________________________
* u8 P" o) q2 R3 r, R6 ?7 B; D ___________________________8 |0 Q! o- @' u J& q
JNZ __________________% l# d9 F6 {6 H2 P
;****END**** @% L- c* D. R6 L2 N; d: c
LEA DX,RESULT ;结果数据区首址
9 ~" ?6 E" t w( h, e9 d% M- ^* o LEA SI,NAME1 ;结果文件名/ r1 i5 D1 R% E( ^- B7 O8 [
MOV CX,N*2 ;字节数
/ @% ^! [0 U% ^1 g9 [* g! A2 y' j& N CALL SAVE ;保存结果到文件8 F: W& ~6 M% M' l% W' ~' {
RET* B, D" f$ F' n' n" I
START ENDP5 p& D& W; {9 b- w M
CODE ENDS
4 r+ R: X E3 W3 i, T( }( t/ d. b' @ END START |