请编制程序,其功能是:内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,…,9。统计每个数中位为0的个数N0,N1,…,N9(均用一个字节表示),然后按序定义将N0至N9存入内存中,最后再用一个字节这10个数中为0的位的总数n(n=N0+N1+…+N9)。 例如:
- `" z4 z: A1 F3 `2 v3 H4 k 内存中有 0000H,000FH,FFFFH…$ g% d. Y: h3 M' M% i o3 T
结果为 10H,0CH,00H…最后为n) a/ e* A2 O% z
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。$ G3 u8 K) |( o" {. J9 n
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。5 r" |; U' o. _
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
6 r7 Q0 L7 r+ y0 Y 试题程序:
. Z( P+ p0 ]3 j. z& {3 F. F EXTRN LOAD:FAR,SAVE:FAR
/ g- o/ r( ]: y( Q% p N EQU 109 M$ `# ?9 {0 e8 B- |/ L. Q) g
STAC SEGMENT STACK0 s- |$ o8 M7 G+ P/ f6 Y
DB 128 DUP(?): ]: x" ^0 f' D, E- w% \- z- S* }
STAC ENDS- l& v- s, `6 h& d8 r
DATA SEGMENT
" z( ?4 L/ ]3 D* q9 ` SOURCE DB N DUP(?) ;顺序存放10个字节数
5 g$ s% X! l$ x+ d7 ` RESULT DB N+1 DUP(0) ;存放结果* E& p1 f d, f9 j6 w$ X, D
NAME0 DB 'INPUT1.DAT',0( g9 S6 ~* f9 b4 s( K
NAME1 DB 'OUTPUT1.DAT',0. Y+ y9 R& h2 Y
DATA ENDS
* {& c" g* R6 t l CODE SEGMENT
8 a% K8 L8 n9 X3 u( \. v. w C6 j ASSUME CS:CODE,DS:DATA,SS:STAC
4 d, X2 q( Q, \- C* Q. H; W8 z START PROC FAR
) w: L- T3 |7 v PUSH DS
' N) j+ X8 D, w/ q! v XOR AX,AX
$ O7 @3 Y' n0 m, E+ H9 ? PUSH AX/ B. Z3 X. S6 _& f" U! \$ {
MOV AX,DATA" h/ x: d$ z$ M0 ~$ v. e& p- d
MOV DS,AX w2 f/ O7 e8 n, b& s, v9 D
LEA DX,SOURCE ;数据区起始地址
3 b. S& \2 z0 a- F LEA SI,NAME0 ;原始数据文件名
- D* ?% v) C( {' \# I MOV CX,N*2 ;字节数4 I' d' u+ G- i& f4 q d
CALL LOAD ;从'INPUT1.DAT'中读取数据2 m- @5 x9 T. e
;****BEGIN****; i6 H7 g7 J% \
MOV DI,OFFSET RESULT" F/ P7 [- E( O+ g0 Z% `) K0 n
MOV CL,N
$ {" E) U8 a" |( A& K# R MOV BX,04 a% o& s$ P( G
MOV DH,0
1 r. z! s0 d' x; Q PRO: MOV DL,0" T" P1 z% N# D \
MOV AX,SOURCE[BX]# ~4 ^: F% n% m4 Q
MOV CH,_____________
; T6 V/ T3 l7 n COUNT: _________________________
1 t. w' H0 A# ?" n+ k [ ________ JUMP
( R% ]0 l# M- c. ]8 J4 O3 V7 o INC DL3 z) z; ?/ }+ e3 X$ \
JUMP: DEC CH! M6 c+ E% b( l3 Q
JNZ ________________" q: l* l! e+ b
MOV [DI],DL$ T' C7 F7 B* g' k) q }" @9 p
ADD DH,DL0 s. q6 I6 a {
INC DI
+ a. k, }' C0 p; `* O8 K ADD _________________0 } X* Q* j9 r. W5 N& E$ ?6 y
DEC CL; `4 h2 X |3 L3 t
JNZ PRO
2 ? t) A, m- h2 H, W3 k3 @ MOV ________________5 E6 \8 t5 D- C9 f' J1 Y% y
;****END****
" n- Q: X) G$ a$ I; j3 u LEA DX,RESULT ;结果数据区首址
. ^7 a8 D! E1 F' G# ]" e LEA SI,NAME1 ;结果文件名
0 J; l$ Q8 g( G( |( J1 g MOV CX,N ;结果字节数
1 N& L/ k; W! z' ~6 z l CALL SAVE ;保存结果到文件
3 D. m- q! E- m0 I" e& b. W k RET
9 W* U) `# ^& M: Q6 U9 U1 b* i START ENDP. D* j5 k& i3 d: m4 q4 f
CODE ENDS$ }5 R% X- ^# `
END START |