请编制程序,其功能是:内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,…,9。统计每个数中位为0的个数N0,N1,…,N9(均用一个字节表示),然后按序定义将N0至N9存入内存中,最后再用一个字节这10个数中为0的位的总数n(n=N0+N1+…+N9)。 例如:
z3 ^& k& q1 I. |7 {& d 内存中有 0000H,000FH,FFFFH…/ l( K' e/ `6 a5 y
结果为 10H,0CH,00H…最后为n' e- X9 G& i5 T' X2 ?$ v1 |
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。0 c* o2 u2 F7 R0 p% D
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
0 Q2 I7 N& T/ J! {- l 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。- ~: Z+ {5 ^6 j; ?+ I. {4 x
试题程序:" @6 ~* Q; `8 a. G N, D
EXTRN LOAD:FAR,SAVE:FAR
" \$ q2 ?& A# Y4 \6 d. L N EQU 10
+ J6 U* v# k$ S# Q: \( y+ m7 p STAC SEGMENT STACK
+ t8 ~% _! H! n2 O% M; [9 W$ y DB 128 DUP(?)
& I" \$ g2 r. I x" A STAC ENDS
0 J" T6 P; n2 p/ D- q! Y9 ` DATA SEGMENT1 x! w; [$ H! V
SOURCE DB N DUP(?) ;顺序存放10个字节数
, [. o6 A( F) ^) a& j RESULT DB N+1 DUP(0) ;存放结果
+ \+ J* I9 T6 z NAME0 DB 'INPUT1.DAT',00 N$ r8 m3 N$ d- M) b. z
NAME1 DB 'OUTPUT1.DAT',02 f8 U( U& O2 ^* b3 V
DATA ENDS
+ T& r6 B9 x' ^( w CODE SEGMENT
, O& B2 q9 r- V; P/ [5 r ASSUME CS:CODE,DS:DATA,SS:STAC9 p1 U$ j$ z* x( v6 j
START PROC FAR
# d% s [+ R7 I+ P2 h9 u PUSH DS
, U7 [& w" {8 b% R# a6 d: S XOR AX,AX5 W0 b4 u# z& u) s" G/ p! \
PUSH AX/ b$ }( N7 s/ z7 A% ~5 L
MOV AX,DATA
# p/ E+ Q! J0 s% n( w- T MOV DS,AX/ H" Q6 X: @8 |4 v1 C! d
LEA DX,SOURCE ;数据区起始地址
! s; ]) S1 p# n# b LEA SI,NAME0 ;原始数据文件名4 \$ h# H' L+ J' V4 Y
MOV CX,N*2 ;字节数
$ J, o9 W* c0 o8 h CALL LOAD ;从'INPUT1.DAT'中读取数据
. V7 o, x3 N7 v7 k& }4 [7 j) Z ;****BEGIN****
0 q1 S8 o9 m# H( b1 K MOV DI,OFFSET RESULT6 @% e! S0 K I& ^2 V. {+ S* Z0 p
MOV CL,N
4 P+ W" ^/ i8 C: F" y MOV BX,0$ s/ y* E; ]. q3 G! z0 \2 l& {
MOV DH,00 ?- i' E3 Y$ S- ?6 u: T v# o
PRO: MOV DL,0
4 [ U* E5 \6 o$ T MOV AX,SOURCE[BX]
K# J/ Z4 h7 U+ Z+ b3 u4 U MOV CH,_____________
, m2 O$ x3 N7 |8 }6 Q, [. N COUNT: _________________________
! K+ ~% t! n$ l0 M+ X ________ JUMP
2 ]6 S- S& w( h" y2 [ M: D INC DL
, C0 Z; @; ?4 t6 p" j JUMP: DEC CH A }' K: s( R5 ?6 j& E/ k; W+ a
JNZ ________________% c# k, I7 h. t4 u1 N
MOV [DI],DL- A( x/ X6 O7 T% j m: {% x, p
ADD DH,DL* g3 J5 `0 c; [5 `: D2 W3 ^
INC DI
: ?$ D* y* H u: O+ o ADD _________________( F n( n3 b( M/ \! r) Q5 z
DEC CL
z6 Z A; X0 x# y: z( q0 N JNZ PRO# \9 N/ j! y& S, x- X( y \+ C
MOV ________________
" \8 P$ R4 G! D1 r ;****END****" y3 @! f, E1 ?3 Y
LEA DX,RESULT ;结果数据区首址; g9 u9 T3 w, U: _) R
LEA SI,NAME1 ;结果文件名( `$ n" e& }& H) ~6 z
MOV CX,N ;结果字节数
- Z6 A. E% I' z2 \ d4 S" ` CALL SAVE ;保存结果到文件
! B- }6 J( m. \& g RET
. s, e& ^- A# |8 ` START ENDP# {* k/ d. B! e* {, k; }
CODE ENDS
- I6 q# ?( y1 I. m+ E& [9 s4 p END START |