请编制程序,其功能是:内存中连续存放着20个无符号8位二进制数,每个数为摇号机一次摇出的两个号码的压缩BCD码表示。现统计此20次摇号中号码0,1,2,…9出现的次数,将结果存入内存。 例如:
. n% X, q6 L; n 内存中有 00H,02H,32H,45H,08H,19H,67H,51H,90H,85H,3 a9 k# p6 [) h0 C
62H,44H,73H,57H,39H,81H,36H,92H,21H,05H
0 Q$ r7 V* \9 [ | 结果为 06H,04H,05H,04H,03H,05H,03H,03H,03H,04H
8 b7 P# N; c- l5 J, |/ G0 N* K( ? 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。% B+ q/ O: A" C; H0 `
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。9 E( |0 o2 J2 d( E
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
. v0 Z8 m5 x: e( M. O 试题程序:
% c1 W$ c' ^+ b' d EXTRN LOAD:FAR,SAVE:FAR5 A0 g# U8 Z4 A, X1 {" I- r
N EQU 20
2 p N4 x& C5 I$ b STAC SEGMENT STACK
) o. {' O$ Q! ~- @ DB 128 DUP(?)
% \7 w8 B2 \; ~* L/ u STAC ENDS
, S9 T: H$ g+ e DATA SEGMENT D* L3 P, _3 }! }1 Z! t
SOURCE DB N DUP(?) ;顺序存放10个字节数9 r4 p D5 D- H& P4 U. k' M/ ^( Z
RESULT DB (N/2) DUP(0) ;存放结果( K/ X1 _( `9 u: s2 e
NAME0 DB 'INPUT1.DAT',0* I: D7 E: j& B) {" i6 v9 L8 e
NAME1 DB 'OUTPUT1.DAT',0
5 u* A* f; J8 G7 |$ C! M- \: R: J DATA ENDS
, H& ]7 o. d9 q6 U) r0 ^" B+ ^ CODE SEGMENT
6 z) V& ]. c+ F& u3 H7 L3 R ASSUME CS:CODE,DS:DATA,SS:STAC) s/ l* l9 X+ {6 ?8 X7 I! S( r7 `) g
START PROC FAR$ [; r- }; X/ r+ D" A; e
PUSH DS
n5 D6 a2 a# S* x& T XOR AX,AX
+ @7 [* m5 k2 a' `6 @; }$ y0 M' _5 _) [ PUSH AX& C' u' G5 ]) B Z; I, x2 B
MOV AX,DATA' J7 g. Q) B$ O& F B: H3 b
MOV DS,AX3 l: S) }9 r( }1 L0 c
LEA DX,SOURCE ;数据区起始地址5 R4 I1 s" m; L6 ~1 W3 _
LEA SI,NAME0 ;原始数据文件名2 [. {' O! E% T) L8 X# R
MOV CX,N*2 ;字节数
! _4 T! G' b+ @; B6 ?# v5 k CALL LOAD ;从'INPUT1.DAT'中读取数据
, L# G, W+ g( M* V, J4 k6 U! b ;****BEGIN****0 e! {$ k+ S4 f: m
LEA SI,SOURCE
4 _8 q% m/ _6 C8 Q) k9 S MOV CX,20& q1 s! W* C, d! f
MOV BX,0& ?! h. P* g. ]" o3 k
MOV AH,0
1 J! y" J0 T' _, V5 \6 f8 g- a AGN0: MOV AH,[SI]4 N" X4 d( \! Z
___________________________4 _$ m2 [9 A) R6 u9 U# k$ T
AND AL,0FH
- L! T: x i7 e' T& @' M ___________________________
( \, p2 r: S9 x2 B ~2 g* q PUSH CX
: @1 ~+ n: n# c9 ]1 v MOV CX,48 ^7 t* M5 B0 n
AGN1: ________ AH,1
2 Z/ Z. l; e4 J LOOP AGN1
+ M2 q8 ]+ l# s3 M% r; _ POP CX; H7 m) ]6 U, B3 o! u
MOV BL,AH
' t Q& _ T1 m: X) P4 @ ___________________________6 R: i9 h( ~* \) g: p4 |5 R; C) V
MOV BL,AL9 [# d/ P/ P+ g0 D
___________________________
# B1 ?) O, K2 v* M" A INC SI
, P3 O. K* j( }- j NEXT: LOOP AGN0( ~6 O, V4 |) [7 Y" k
;****END****
3 C5 v2 W ?0 i5 w7 F LEA DX,RESULT ;结果数据区首址
) @6 q; G- r. k LEA SI,NAME1 ;结果文件名
$ x6 D8 ~, ]% b. D- y# h6 o- G MOV CX,N*2 ;字节数5 m6 R# e" b- W5 `) p: J, p
CALL SAVE ;保存结果到文件; @9 ^2 r' L: t
RET! b) Z5 w8 e) }! c& q/ ~- v1 ]
START ENDP
8 ]& `% F4 g7 i) g5 f5 U CODE ENDS4 m. W( L7 b9 B. _" h" d
END START |