;* 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着10个用
/ C9 |) p. A3 _+ s) K- t;* ASCII码表示的十进制个位数,将它们转换成相应的二进制无符号
9 f; N9 P3 q; J0 T' e" x;* 字节N0, N1,…, N9, 并统计N0, N1,…, N9中大于等于5的十进制
9 l! a: m* k6 C$ e$ j+ p: q8 g;* 数的个数n。转换结果按原序存放,之后存放n(n用字节表示)。
( i) x6 b h" F" g z. K;* 例如:
9 L2 L" |1 K! u& q
;* 内存中有 30H('0'),39H('9'),31H('1'), …
, B( N1 ^ w6 n% }- T;* 结果为 00H,09H,01H,…,(后跟n,n为N0,N1,…, N9中大于
, v+ z9 t# w! i;* 等于5的十进制数的个数)
9 `& z' _& q# U) z;* 部分程序已给出,其中原始数据由过程LOAD从INPUT1.DAT文
9 Q9 ]- t I; a2 y1 l
;* 件中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始
( E7 _/ b$ @; u/ ~4 }, v; t
;* 存放, 由过程SAVE保存到文件OUTPUT1.DAT中。
* x" a4 D; a. }( m
;* 填空BEGIN和END之间已给出的源程序使其完整 (空白已用横
$ v/ Z1 A9 A) T;* 线标出,每行空白一般只需一条指令,但采用功能相当的多条指
; L2 \# i1 c( @4 b;* 令亦可), 或删除BEGIN和END之间原有的代码并自行编程来完成
( `9 D/ \8 t1 p9 b0 R' o6 @/ z/ G;* 要求的功能。
! x ~% e" @6 {4 S% B5 i7 J
;* 对程序必须进行汇编, 并与IO.OBJ链接产生PROG1.EXE执行
* g# B# P+ T5 [0 q* c" s
;* 文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。
9 p# X Y4 G4 e- o4 I/ G6 V; I7 C/ r
;* 调试中若发现整个程序中存在错误之处,请加以修改。
6 s) T3 j# [7 }5 A9 y EXTRN LOAD:FAR,SAVE:FAR
5 y0 H E. S4 c. R! h( R
N EQU 10
i5 |9 a+ v& o; ?3 I
STAC SEGMENT STACK
/ \& S2 y1 V1 k6 r DB 128 DUP (?)
9 i" n* ]8 l* B$ b" l" O* ?) Y k
STAC ENDS
. W% e% b: c9 R5 g/ E: ~# R HDATA SEGMENT
( g p# B, H' e% S* FSOURCE DB N DUP(?)
- b3 z# o- C' j) VRESULT DB N+1 DUP(0)
& z3 D+ _; T% \7 l" u. X) u
NAME0 DB 'INPUT1.DAT',0
& e& _( m5 t _0 f# j2 Q( l2 \2 I4 `NAME1 DB 'OUTPUT1.DAT',0
/ P6 T' E9 b2 R: Q, N9 N8 p. RDATA ENDS
" f' Y% l J: y6 M& T1 S( i) a
CODE SEGMENT
; i6 c) ]5 Q! S
ASSUME CS:CODE,DS

ATA,SS:STAC
; n6 M: V& w4 i! R1 h$ E8 x
START PROC FAR
9 {0 @* m- [+ O: N& S5 k
PUSH DS
: ^. O: [( t; r7 l4 T+ a
XOR AX,AX
0 j4 c9 e, d6 u( N1 L PUSH AX
+ T" x) k) o# E. b# z2 c MOV AX,DATA
: d6 `2 @% R1 \' l! T3 L9 n MOV DS,AX
" i& `2 B+ L) C. k7 o& E3 I, @
LEA DX,SOURCE ; 数据区起始地址
+ L8 \$ w! T8 k2 s- L: s" Q
LEA SI,NAME0 ; 原始数据文件名
# t3 J! W2 a5 x8 b6 Q7 e
MOV CX,N ; 字节数
8 b6 B& r" G9 ^" G1 M. d CALL LOAD ; 从'INPUT1.DAT'中读取数据
$ j1 e, i, p' F; b% R) _4 o5 z; **** BEGIN ****
7 q5 }9 Q* {$ x) ^! ~4 v MOV DI,OFFSET RESULT
6 {, o5 p# [( ]# X v MOV BX,0
+ q9 p# @( }3 Q1 X MOV CX,N
& ^1 P$ s1 A3 O- a: K 7 p7 X& W8 E3 x- t. w" n
MOV DL,__
- i0 U o. X B0 QPRO: MOV AL,[BX]
8 j: S3 N8 b O$ h3 ^- U7 M4 w , r9 D0 P* `' o) F8 E$ c2 v
SUB AL,___
7 {* M ]3 @8 ` CMP AL,05
8 U/ U/ l) p3 V. ^6 _6 k
7 Z) J+ l) J' T9 h) ? __ JUMP ; 小于5
) Z2 _% m9 T9 W
INC __ ; 大于等于5
9 P+ o9 P/ S% ~3 R; }JUMP: MOV [DI],AL
+ e0 o, V/ U5 z# J
INC BX
; d0 j$ t6 ?4 M7 M+ t" L8 ^% b2 M INC DI
* p1 G7 M' u' ]6 m7 o DEC CX
1 m: B2 f. }4 W9 |2 t
JNZ PRO
9 r' U$ Q& t% \8 ^# z
! m* M6 \# \- C. l* W/ S _______________
, I2 b* o' l/ F3 E, L0 C: S% N. l x8 A
; **** END ****
6 k% K/ |$ @8 ]! I" [6 z
LEA DX,RESULT ; 结果数据区首址
: Z6 z r, {; B2 g LEA SI,NAME1 ; 结果文件名
! H. E3 ~7 [+ \ MOV CX,N+1 ; 结果字节数
& J' c, R. A9 m9 S8 R/ i CALL SAVE ; 保存结果到文件
" s+ W, a) [7 b0 t9 @% E RET
* e; _ L) {' B4 A
START ENDP
0 [0 O5 L; U5 L' H f ^5 P9 p1 U. J
CODE ENDS
8 k, Q3 K1 R( a% L4 h/ LEND START
, {. e# G- c, W* a, E
, g$ N% u3 M6 I) s/ G. _9 m0 ~' D6 N" _! Z
7 t# z1 K, j! \- @" ?3 ]
. b: ~% M2 {3 g$ I3 r5 _. ^& S. k+ y1 \4 r
5 _, A1 c# ?/ G: D6 s% {" M8 E怎么改啊~~~~~~~~~~~~~~~