请编制程序,其功能是:以SOURCE开始的内存区域存放着20个字节的信息,其中有ASCII字符和汉字机内码。若一个字节中最高位为0,则表示ASCII字符,若连续两个字节的每个字节最高位均为1,则为汉字机内码(表示一个汉字)。将ASCII字符个数存入RESULT指示的单元,表示汉字的个数存入下一个单元,其后存放原来20个字节的信息。
% B5 c+ Q9 B9 t, l 例如:
# J/ O7 G' k. K9 b' _6 h. Q 内存中有 30H,38H,89H,A9H,E0H,97H,61H,4AH3 i" X v7 t8 A- Q) H; A: g9 H
结果为 04H,02H,30H,38H,89H,A9H,E0H,97H,61H,4AH
" a% x# I& @0 E& O* ?# {: q 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。- B" D/ F* z0 f0 ~
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
/ d7 |0 J$ ]: Y5 l4 _8 j @2 O 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。4 A0 Z' h& s( [' i; U8 r0 S+ A
试题程序:0 \- ?5 V6 k/ C: H2 f
EXTRN LOAD:FAR,SAVE:FAR. B" j( X5 v, m4 o9 |' i7 E! F
N EQU 20
% g! l0 w- `$ D" R$ m7 h+ f8 S, } ESC_CODE EQU 273 ^# H# v0 j- a5 Z+ G' j" I+ C( u
STAC SEGMENT STACK z% w: T+ V z! _' Z4 D# ~
DB 128 DUP(?)
3 z# l/ |# q$ n# S6 B# I STAC ENDS! P$ X+ Y2 T7 K8 Z
DATA SEGMENT/ |& B; {8 B2 o% f! i4 I0 T% A
SOURCE DB N DUP(?)) r% a8 \ X. c, v/ o6 e0 x
RESULT DB N+2 DUP(0)0 J' J6 f j. i6 Y! M# \+ v3 r
NAME0 DB 'INPUT1.DAT',03 U9 B' S* I/ B& g% ]
NAME1 DB 'OUTPUT1.DAT',0$ l: f2 d( w: M( P
DATA ENDS% C7 M( s* F, m2 g
CODE SEGMENT
) `% H( u* F1 U, e9 c% d; c7 ~ ASSUME CS:CODE,DS:DATA,SS:STAC
5 F& I* B m+ t, V7 K+ j, V START PROC FAR
7 F$ M+ X# t9 j5 s% X PUSH DS V" ~5 G* n( C) g
XOR AX,AX
/ ^% u( Q& J, M1 N0 `8 b/ T PUSH AX$ j. q1 V- g* m
MOV AX,DATA
3 a% p$ z9 a( I$ I! J9 U MOV DS,AX
2 y% w2 j. N0 |& V MOV ES,AX ;置附加段寄存器
+ ^" y6 i9 G& [" x7 d) \) p. | LEA DX,SOURCE ;数据区起始地址
8 v/ C/ b% z6 z. [7 q: c. f LEA SI,NAME0 ;原始数据文件名 r# J ?1 Z4 z: s
MOV CX,N ;字节数$ q A5 f& I/ f7 x8 [5 ]# _* O9 ?5 c
CALL LOAD ;从'INPUT1.DAT'中读取数据& D9 p) _! ? `" ~( C+ `( | ?
;****BEGIN****
, k6 f0 v8 A% Z: n8 P LEA SI,SOURCE; p6 A+ ~* @) g Z; e: a9 j
MOV DI,OFFSET RESULT+2
" Q4 P4 a: F: M0 X; { [6 \ MOV CX,N
" W- f5 [1 c. F9 b$ k9 L MOV DX,0 ;ASCII字符个数在DL中,汉字个数在DH中
# v- k$ m* D, e/ f& k. h3 r LPST: MOV AL,[SI]* Z( x4 v+ p, u, A1 Y
MOV [DI],AL
/ E* N) H% m. D- l- G ________ AL,80H
# ]( t7 }- l6 w% a% F& f JZ LASCII
: Z. d% A# A+ D4 T; l INC SI
' o8 |8 O, Q" C ____________________________1 C k* @0 d/ L8 H
DEC CX
- _9 W' z U2 q6 D; F& m9 }# @- A+ ? JZ _____________________1 a# Z8 s& l! u* a, w% K3 z# ?, b5 v
MOV AL,[SI]
5 G3 A, o* D) i% i5 R1 n2 ~3 y MOV [DI],AL4 h0 e U4 e4 k( V' N- d
TEST AL,80H" Q6 t5 W- K+ M9 T
JZ _____________________. Q% I) I$ c8 }' s+ @+ K* h
INC DH
) f( W8 S6 E# f5 w! O% D, R- a3 b0 j JMP LPCOM11 o% R: b @. Y9 Z7 K
LASCII: _____________________________
+ x0 R$ g! f5 L9 d/ C+ y LPCOM1: INC SI+ a9 h2 P# }$ v, m) ?- u0 g& J
INC DI' Z$ H/ j) E9 G b1 U2 @1 [9 }
LOOP LPST5 s u) h' ]0 O g
REST11: LEA DI,RESULT
+ A) N; [, B5 @! ~3 s MOV _________,DL6 ^. X. A) f( j" k' t
INC DI
( S; ]8 b( s) P; c. z" I MOV [DI],______________; m' e* o1 [4 k
;****END****
8 A I, Z) W( v) G/ a LEA DX,RESULT ;结果数据区首址
! s& s" ?6 b1 M7 W+ Y LEA SI,NAME1 ;结果文件名
9 @. q; T) I% h5 V& I( t$ [# _0 l MOV CX,N+2 ;字节数
6 ~( g! I6 M- X* r5 i7 W3 `+ \ CALL SAVE ;保存结果到文件
& [. i* Z7 ?; S! r1 l/ n2 {, G RET$ C+ A5 G, {) {2 o& w
START ENDP
* [. ~; k, u4 `! f CODE ENDS
% S5 c, ~( L# [8 o- m; u* }- N END START |