;* 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着10个用
- @: d8 P! x8 o3 _
;* ASCII码表示的十进制个位数,将它们转换成相应的二进制无符号
1 @; v* K t7 o X" B1 y( d! W2 R: k;* 字节N0, N1,…, N9, 并统计N0, N1,…, N9中大于等于5的十进制
/ P- v; ?. i5 l2 ^, w1 h
;* 数的个数n。转换结果按原序存放,之后存放n(n用字节表示)。
6 t+ L% e) F* E6 I2 v* F$ |& N8 i
;* 例如:
" d0 O t% G6 `: c0 Q% `
;* 内存中有 30H('0'),39H('9'),31H('1'), …
# G! `* K; B% [! m' y8 {
;* 结果为 00H,09H,01H,…,(后跟n,n为N0,N1,…, N9中大于
; P. w% i1 z2 U c1 G;* 等于5的十进制数的个数)
/ Y; H8 B$ K* X& L' o
;* 部分程序已给出,其中原始数据由过程LOAD从INPUT1.DAT文
" _$ P6 q) {$ R* O) f
;* 件中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始
' q1 J _% Y& y/ R6 b;* 存放, 由过程SAVE保存到文件OUTPUT1.DAT中。
: ]/ B" b1 Z; D1 ^ O
;* 填空BEGIN和END之间已给出的源程序使其完整 (空白已用横
& W) x$ k( |$ Y& u, M' p;* 线标出,每行空白一般只需一条指令,但采用功能相当的多条指
( P& d1 F* H6 y& Z/ N8 }
;* 令亦可), 或删除BEGIN和END之间原有的代码并自行编程来完成
1 r+ Z b) K2 q5 P0 R;* 要求的功能。
3 g, A, Q9 x9 a$ H/ J& J9 }
;* 对程序必须进行汇编, 并与IO.OBJ链接产生PROG1.EXE执行
# Y5 n6 p n m;* 文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。
6 g1 B# n) O( _# o( B0 \+ Q( ]1 U;* 调试中若发现整个程序中存在错误之处,请加以修改。
) e2 a: d1 n; {2 z
EXTRN LOAD:FAR,SAVE:FAR
) i/ U: b* t% Y& X1 x8 C% M6 L8 j0 h9 p
N EQU 10
) w% Q" Y! T0 |/ k6 H
STAC SEGMENT STACK
9 |8 ]! u; y$ W: X1 S" T. O% M
DB 128 DUP (?)
0 ^ }% ]3 _) N$ k0 mSTAC ENDS
7 `5 W7 A! z2 c$ j6 c+ v) S0 R! o$ P6 m
DATA SEGMENT
3 ` l$ _$ _4 _2 WSOURCE DB N DUP(?)
2 R4 o3 g% A: x) Y% w
RESULT DB N+1 DUP(0)
+ z1 I4 `, L& h1 ^& ~2 }- n/ q5 H* |NAME0 DB 'INPUT1.DAT',0
7 G* N1 D# {* ?* E+ g; P9 e! H) E
NAME1 DB 'OUTPUT1.DAT',0
$ n5 q* a+ y3 k% p0 M' p' Z1 H
DATA ENDS
+ }; f, w. ~9 `1 n6 H+ h0 x. XCODE SEGMENT
8 l# }& I# u: M' H' m. }& L3 D
ASSUME CS:CODE,DS

ATA,SS:STAC
( z: F' U, u1 f7 u" H8 T' f
START PROC FAR
+ h0 }' X! `, Y S# |3 k4 w$ W
PUSH DS
1 S+ B; Y* h7 e XOR AX,AX
6 X: ?# p8 p) u* ?) q) M5 f6 s
PUSH AX
0 H! S# Y) {! O' i4 a
MOV AX,DATA
" B- I, s- c$ g4 t' V4 F! O) z0 B. }* i
MOV DS,AX
, T# K- s7 d* t+ q LEA DX,SOURCE ; 数据区起始地址
, [7 {, N1 x8 H) E+ ~, r% |
LEA SI,NAME0 ; 原始数据文件名
$ {# X9 S$ @8 C" l/ S MOV CX,N ; 字节数
# T+ j9 N! F8 U0 n8 ]2 k* p CALL LOAD ; 从'INPUT1.DAT'中读取数据
8 S$ X. ]2 K+ w, A; Y5 p8 n; N; **** BEGIN ****
) ?) U4 m6 ?7 h% N6 y2 { MOV DI,OFFSET RESULT
, Y! i$ ~7 D. K1 @/ ^
MOV BX,0
6 K* J& m3 N5 o2 i- U MOV CX,N
- m1 L; T9 P( M; G6 y
5 v; y* [$ B" a g; d) N+ M3 e MOV DL,__
+ T* I* e( a2 u% w# x% U' QPRO: MOV AL,[BX]
" W) @- g J9 n, b% r9 }
' u4 Y. U$ y" B, f* Q Y& M SUB AL,___
3 d9 ^" z, e0 H4 L& S; h4 r CMP AL,05
4 j. G2 v- s- E& L) O! L8 C2 R
' D* U$ \, v' T- S __ JUMP ; 小于5
' S9 Q6 E; ^: N; B/ [
INC __ ; 大于等于5
# G2 Y. N1 q7 R+ E7 d7 u2 E, lJUMP: MOV [DI],AL
4 j8 J `6 F5 l& E% p4 h9 z; ]
INC BX
7 M' V5 w+ E/ v- q+ \8 L
INC DI
) l1 S3 g) Z2 C$ a! l( L2 F DEC CX
" ~7 T) J) c4 G* j1 d2 g) I
JNZ PRO
; ^6 {- c. o- F1 ~0 _4 @ , \* s' ^# Z/ ^ I6 Y2 y- m. E
_______________
+ z. r9 e* D& J% E& i7 O
; **** END ****
' c& f2 M) [0 m, V3 |6 Z5 P/ _ LEA DX,RESULT ; 结果数据区首址
( w4 {# {- _4 w! j LEA SI,NAME1 ; 结果文件名
, L) h& K2 D- D+ ?2 J5 {: E
MOV CX,N+1 ; 结果字节数
+ m, U" `" h. I CALL SAVE ; 保存结果到文件
- V1 \( R. G& f. x, e, d
RET
7 {" Y8 K/ g5 R
START ENDP
" P( q% m5 A$ [2 O5 i8 X; W
CODE ENDS
! ?( g1 t6 l- e: [END START
* F( {" G; R* h4 ~" p/ c* ]" P0 h( G: E+ `5 P5 u
$ D3 T6 d& p4 |$ K
- I- H# Y2 A9 s' _! Z y ?" M9 P. P8 A! A1 T
7 s! L, e2 V! @+ S5 }
3 `' ^( F4 s2 d* B* l9 C怎么改啊~~~~~~~~~~~~~~~