请编制程序,其功能是:内存中连续存放着9个ASCII字符(8位二进制数表示,最高位为零),把它们转换成串行通讯中偶校验码,并计算9个偶校验码的累加码(累加值的低8位二进制数),将九个偶校验码按原序存入内存,累加码存放在此序最后。 例如:
5 X! C p) h E: A9 H$ t( f( K 内存中有: 37H,38H,39H…
: _- {; h' [8 V, l$ T3 g( v2 | 结果为 : B7H,B8H,39H…累加码
3 w! ~( o! ~% O 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。$ P" s$ X* F m; F
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
- w! \- l8 ~% a' E2 n) T% w% E 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。/ B* m" r7 \2 L* b5 ?8 t# i4 J, @
试题程序:
; `3 h% u* V5 ^3 z0 G EXTRN LOAD:FAR,SAVE:FAR
8 k* f+ d( p8 }: e+ J* J4 c8 v N EQU 10
@* e- _- X& u) a1 |$ _* t8 n STAC SEGMENT STACK
# J" c$ [. f2 V2 ~7 s DB 128 DUP(?)
( ?( n$ t" g! b2 ~1 }% `, | STAC ENDS
1 p2 }; |) |2 M/ O, M DATA SEGMENT
1 ]# f0 _. D1 D9 D+ X( G SOURCE DB 9 DUP(?) ;顺序存放9个ASCII字符
, q P) x: @4 z$ B/ p RESULT DB N DUP(0) ;存放结果- @$ C: U& n1 Q: b% o
NAME0 DB 'INPUT1.DAT',0/ P4 [) Q( C- _ F$ x
NAME1 DB 'OUTPUT1.DAT',0" E) m, U* u) v- k4 f8 z
DATA ENDS& Q: c1 d- N# Y! D4 o
CODE SEGMENT8 d7 B, I4 R3 A- V$ ?: B
ASSUME CS:CODE,DS:DATA,SS:STAC. Y7 q. v0 P8 n; Y2 f8 A
START PROC FAR: L: f% a4 L! `/ ]! q
PUSH DS/ \1 k8 Q1 x5 J7 v
XOR AX,AX' u1 r) r, J' p
PUSH AX" \/ b/ i: r5 \5 N9 `& i( [
MOV AX,DATA
1 `5 u' Q5 e6 B# [7 T# N7 H" H$ A MOV DS,AX0 N# H3 A1 b+ f" B
LEA DX,SOURCE ;数据区起始地址7 z. {6 {0 _" g, k; O% z
LEA SI,NAME0 ;原始数据文件名: w$ l3 y; H- L0 o! u. K
MOV CX,N-1 ;字节数
, B, r8 `$ D( K" `) p CALL LOAD ;从'INPUT1.DAT'中读取数据: A& l1 }% m# B8 f9 N
;****BEGIN****) G. d4 j* ^* r, W6 @
MOV SI,OFFSET SOURCE0 E) M1 C( G7 a: m
MOV DI,OFFSET RESULT4 j8 D" Y4 Q" T+ g* Z' B6 ]
MOV DX,N-11 | Q2 K" D! K" B
MOV AL,0& w& j" a5 S7 |) j6 \3 Y8 ~5 _
LP0: MOV BL,[SI]
" p/ M, W- W0 D. ] MOV CX,8! |/ C( P* a; m$ }) W) |5 o7 M
________ AX
5 ~, V" d Z# y& h MOV AL,0
& u% O$ d ~5 ~' ~ LP1: ________ BL,1
' U# E" k/ [ U% b/ {4 i+ n! J ________ AL,0
$ t8 j$ G$ a3 s+ N LOOP LP1
" v* O1 X1 @: C- k7 s" j; V AND AL,01H
; Z" D* i: |; ]% a% h% s ROR AL,1
% w( g$ g& S1 c OR _________,_________
- l! r$ B; O* a4 I1 N3 t MOV [DI],BL
$ \- A+ L$ Z3 h$ U& d ________ AX, O0 u2 Q0 i8 y; K
ADD AL,BL/ z% w8 t ?& E# ^
INC DI; ^5 a/ X u3 M6 y/ |
INC SI
2 H8 ~1 B' B7 h+ t DEC ____________________: ?, L9 y/ s& o6 d; O) I# i
JNZ LP0! r8 g' Z( }; P3 a* s; b+ u! @ e
_____________________________
' P1 c' c2 W8 X1 u ;****END****
" i# }" {: F$ S! S5 X LEA DX,RESULT ;结果数据区首址9 |" V' j1 \ r* {" j. F
LEA SI,NAME1 ;结果文件名
0 m" c5 {6 U5 B MOV CX,N ;字节数: [4 i) n, J7 F. e6 w4 @' ?0 L# b
CALL SAVE ;保存结果到文件# Y/ f+ z6 T/ J9 P2 W( R* M0 a
RET1 y1 ]6 z4 ], E
START ENDP" W m& r3 q4 N4 P
CODE ENDS# B6 G1 L! l! N0 C" W' U
END START |