请编制程序,其功能是:以SOURCE开始的内存区域存放着多个字节的数据,其中有压缩BCD码和其他数据。现按下列编码规则进行编码:在第每个压缩BCD码前面加两个字节前缀代码BEH和CCH,并在其后加两个字后缀代码DDH和EDH;如果不是压缩BCD码,则该数据前后均加两个代码0DH和0EH。编码后的数据存放到RESULT指示的内存区域。 例如:
: b( z! o, f+ S* a 内存中有 12H,D9H,86H,54H…% K/ T7 s) z$ J1 c+ Z# H
结果为 BEH,CCH,12H,DDH,EDH,0EH,D9H,0DH,0EH,BEH,
- F1 i" {5 A B4 Z6 P6 I, E CCH,86H,DDH,EDH,BEH,CCH,86H,DDH,EDH…# K5 Q# h: Q" ~! E+ [* X+ n# W
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。4 a1 h0 ^: G% y' F C) }. P
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
. x; v3 z, q, }; C) e) o 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。! v! `2 {, O" J: b
试题程序:
5 ]7 V2 x6 c% j* }. ` EXTRN LOAD:FAR,SAVE:FAR1 _0 _3 n1 l7 ]/ q* ~
N EQU 104 `' m" l8 T6 @3 O, u1 C2 F$ B3 {
STAC SEGMENT STACK
# ?6 h: R* n' k5 [6 u4 _ DB 128 DUP(?)
, S8 c/ _+ [7 n( n7 @+ ~ STAC ENDS
. ~9 Q0 X# }& V% T, i5 o DATA SEGMENT
/ ^# ^2 @3 D, w: w7 S SOURCE DB N DUP(?)- ~9 N, G- E2 Q& h1 M) t
RESULT DB 5*N DUP(0)
( C. q7 J+ [9 j/ _* } NAME0 DB 'INPUT1.DAT',05 ~6 W$ t0 A2 D
NAME1 DB 'OUTPUT1.DAT',0: N2 v" k; X6 C; ^6 ^2 W& Z
DATA ENDS
9 N* l& ?% H6 _) j) f" E CODE SEGMENT( P3 U6 Q/ {: ]' a+ R. @
ASSUME CS:CODE,DS:DATA,SS:STAC
$ b& ]( R, x& j START PROC FAR2 E- T0 U% L, Q2 n/ I
PUSH DS4 i- S* C+ e/ s7 @
XOR AX,AX" C2 p" l6 b7 W
PUSH AX' i! d7 g1 X) }# j9 x( p! n
MOV AX,DATA N4 n7 M8 I, t3 t# A
MOV DS,AX
; \( h( k$ {, Z( y- @ MOV ES,AX ;置附加段寄存器
! v `0 l; Q3 |3 `7 Q LEA DX,SOURCE ;数据区起始地址# D! s! }* _* j+ z; l1 d7 g$ c# ^
LEA SI,NAME0 ;原始数据文件名
7 T/ P: O: e" ], i MOV CX,N ;字节数
) _+ @# j- @& s5 J CALL LOAD ;从'INPUT1.DAT'中读取数据
$ ^% P$ [+ e6 i# ~) @& k ;****BEGIN****
; W ^( I6 z" ] N* o8 F LEA SI,SOURCE
3 R0 Q0 {( s) m) } MOV DI,OFFSET PDATA ;PDATA为正数数组存放缓冲区首址4 t+ G9 I; k3 x0 e
MOV CX,N
: p9 l- p2 j' {7 s1 ] X! W4 p% g CLP1: MOV AL,[SI]
8 O$ I8 {* U) ?! e; K MOV BL,AL6 W7 l. k3 N- {) _5 G) N+ }
MOV AH,AL
+ D! v+ q4 T' j4 ^0 J7 |3 N ________________________8 ]0 B; l5 B# |' H: Z* [) _
AND AL,0F0H( V" x$ N6 C! ~% l7 j( S- V
_________________________' s e5 U, |% [5 r. J' T* `0 [
MOV CL,4
/ \# {7 V, i* V& `* {- ^9 R _________________________$ n8 ~+ D3 l+ E$ K+ f' }# J i
POP CX. }8 N. K) M1 t
CMP ________________
4 ]* J. z# Q' h5 h* O' [" d" h JA CLP2 F3 f8 M2 ]! M" X1 ?5 A J
CMP AH,9# y- }7 d5 v- Y4 I7 P' Q8 E
JA CLP2
8 X4 F9 }- W! H" X! @" L MOV ________________& h# n$ ?. u0 C; |4 Q* Q$ d
INC DI
0 w' U% d9 b5 G. l MOV BYTE PTR[DI],0CCH
; Q: Z' \ Q$ V( {1 ` | INC DI" P7 ?! P" T; _& i7 y
MOV BYTE PTR[DI],BL
+ l' h! Z" B6 G- J9 K INC DI/ Q0 H1 g* f! f1 _+ {) R4 L
MOV BYTE PTR[DI],0DDH
. b' O3 a% I: @$ t! \ INC DI
0 h1 S) K m+ W9 b MOV BYTE PTR[DI],0EDH8 I9 n, g2 I! h
JMP CLP3: y$ H$ O2 k' G" r2 v
CLP2: MOV BYTE PTR[DI],0DH5 u9 b- k3 Q0 G1 U6 e! }- s
INC DI, d0 `0 L& C& F
MOV BYTE PTR[DI],0EH) g" P" T1 e# N9 a7 N
INC DI
2 y6 l" E* J; y9 i) Q6 q. h3 g MOV BYTE PTR[DI],BL
; N) M$ p8 k6 e* S, k6 ?, a! j INC DI; l$ f& p; K1 G1 H' I, @
MOV BYTE PTR[DI],0DH
" P, B- G E b$ G& n INC DI( E* [9 U5 \" m8 {
MOV BYTE PTR[DI],0EH1 [" b0 ]" O) D5 U! n6 R! p
CLP3: INC SI
* u) f( d. I5 L INC DI
/ F# {5 M& \: I, p _________________________
+ u1 y: I: x( N& U; H2 c ;****END****" C0 [" S/ I0 @: a6 x5 K5 U' k
LEA DX,RESULT ;结果数据区首址
; w, t% Y+ h' `5 P LEA SI,NAME1 ;结果文件名
0 }* `8 ^* D2 U6 K5 Z MOV CX,N+2 ;字节数* `# \2 E+ n( n! g9 d# T/ t
CALL SAVE ;保存结果到文件
! ]% S- l% Z: p+ z5 N, ?6 h4 K RET$ H0 g9 \1 t; o' P* w9 z9 n8 o
START ENDP" S8 P6 b! S& _- i' a
CODE ENDS
- n# n& n! @3 r; N$ Z END START |