请编制程序,其功能是:内存中连续存放着10个用ASCII码表示的十进制个位数,将它们转换成相应的二进制无符号字节N0,N1,…,N9,并统计N0,N1…,N9中大于等于5的十进制数的个数n。转换结果按原序存放,之后存放n(n用字节表示)。
. d6 a( Q% J7 b2 _2 o5 W, v; t4 } 例如:$ m. \% n& J/ \6 Z0 d7 I% O4 G
内存中有 30H('0'),39H('9'),31H('1')…
( ]' y% _, q+ j" [) e 结果为 00H,09H,01H…(后跟n,n为N0,N1,…,N9中大于等于5的十进制数的个数)3 h8 {" I3 R2 R0 s# E
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。* S1 U$ g( E3 \& E5 C
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
( R( {1 }& Q5 F% w 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。8 u7 i* C4 m/ n2 ^& j! b
试题程序:0 j; {" E' c. f: G" c' A0 q
EXTRN LOAD:FAR,SAVE:FAR
( N$ P. l+ Y! X5 q- V' J! g N EQU 10 c6 s9 c8 J$ {9 k6 G
STAC SEGMENT STACK
/ A( [% s$ ^0 G. M. ~9 E. K DB 128 DUP(?). Q9 X" M( k: q& [# j' @
STAC ENDS) p1 U7 Y0 B- k! h
DATA SEGMENT- J% |$ n# Y9 T, f4 ^
SOURCE DB N DUP(?)
3 e* C8 ]' f5 Q RESULT DB N+1 DUP(0)& i; O: S5 H" X2 b# T+ X
NAME0 DB 'INPUT1.DAT',0
3 L: z2 y7 T. s9 C% n# U+ G NAME1 DB 'OUTPUT1.DAT',0
& L) Z- q U5 T, R k. R DATA ENDS
9 h$ C* Y* _$ n5 ^6 R0 V9 D CODE SEGMENT
. Q) V* p$ I1 A! Z ASSUME CS:CODE,DS:DATA,SS:STAC! S# P; A( I+ h0 d
START PROC FAR
/ G! c4 l+ Z( n3 c, X' O: T; d PUSH DS+ H% d- m I0 w3 W3 s$ q: ?
XOR AX,AX
3 J2 U/ q7 a( U" L: n. h PUSH AX/ [- X0 U2 u+ W, {+ \5 r
MOV AX,DATA( v" E" O1 _0 o6 }; r1 i, w) ?
MOV DS,AX" z1 ?; v; N6 Y6 f4 K( K5 m: P/ X
LEA DX,SOURCE ;数据区起始地址* A5 J. @$ h: G: c. R% I! k# n r
LEA SI,NAME0 ;原始数据文件名
6 d5 F& | s: N* J: U# {' t* } MOV CX,N ;字节数
% a/ y7 `- e1 n8 g! a3 B; l CALL LOAD ;从'INPUT1.DAT'中读取数据
, b; v0 J7 @5 L j+ @ h ;****BEGIN****5 e2 N) b. Z$ g
MOV DI,OFFSET RESULT
% q5 R% b8 a8 u& \+ @' p MOV BX,0' B0 I& r% b+ T1 O, h, S
MOV CX,N
/ e8 ]7 U4 [. L MOV DL,_______________
6 j6 A# z. z0 e, b# D7 @) _ PRO: MOV AL,[BX]5 l6 H- p, S# a( \2 u; r! z
SUB AL,_______________$ X B' O" N z" k; @* l
CMP AL,05 S5 m/ Z! _+ e0 G
________ JUMP ;小于5
2 b" K! h( f0 i6 B* n- v: M INC __________________ ;大于等于52 y; X7 J7 H, W( u" k5 ], T) f& U
JUMP: MOV [DI],AL9 ^2 B3 t* P/ z5 v
INC BX. g2 y1 v$ ^5 l, W; x& P1 }
INC DI: f9 h5 i2 l4 z. F8 ?7 ^/ X2 q, t
DEC CX. v: ?3 @6 J# p
JNZ PRO L) y2 b/ _9 f% R
___________________________
( y" ~: ]/ y( E% N7 ], d ;****END****
2 j6 P: ~, A5 i6 u; ^ LEA DX,RESULT ;结果数据区首址
" j+ ?% o# c1 h9 N @: ? ? LEA SI,NAME1 ;结果文件名
/ n2 j& O( K% x5 s; E MOV CX,N+1 ;字节数: ~7 ^) C* e/ z+ t; B
CALL SAVE ;保存结果到文件
$ j' H: b0 S5 S- f RET3 l% k. a* F& r! M6 ?/ x
START ENDP
2 T {- g# I9 D2 {% \3 N CODE ENDS
# u2 @( Z9 U5 |; ?5 Y( c END START |