请编制程序,其功能是:内存中连续存放着10个用ASCII码表示的十进制个位数,将它们转换成相应的二进制字节数N0,N1,…,N9,然后按序将N0至N9存入内存中,最后存放它们的和n(n=N0+N1+…+N9)。N用压缩型(组合型)BCD码表示。* ], |/ x# Z2 G+ V
例如:
# Z! X/ Z5 _! R 内存中有 30H('0'),39H('9'),31H('1')…; k% p2 F8 _8 r5 n' ?
结果为 00H,09H,01H…(后跟n)
^6 r* K8 s. H9 }; Z 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
# x9 F- c7 \ X" Z: o 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。! A8 t% ~, m6 h. G7 l; f/ z& m
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
+ v/ ?5 H+ ?$ h! _ 试题程序:
5 f( {' P. M' V% K9 B( o; a3 t EXTRN LOAD:FAR,SAVE:FAR9 [/ I# t2 K, t( ]( U% n
N EQU 10# l9 Y7 z) I, r) m2 E6 R
STAC SEGMENT STACK5 Q5 G! V8 V8 c- L: \: i! v
DB 128 DUP(?)
5 L! V" g2 l$ i( m& }# D! \1 [4 i STAC ENDS
) e4 f' N4 V1 z% l! ^/ J! b# X: B } DATA SEGMENT
% k9 j- s6 j" a2 S. }- \% m1 Z SOURCE DB N DUP(?)
; C# p- W3 {1 p' g RESULT DB N+1 DUP(0)1 O+ r. p i( @6 a) S
NAME0 DB 'INPUT1.DAT',04 N! \7 i' P# u1 s9 W+ j/ }
NAME1 DB 'OUTPUT1.DAT',0. T0 {; z* n3 l
DATA ENDS/ y% x* R) Y# o& S
CODE SEGMENT2 v$ H# q% J/ u8 H/ ^
ASSUME CS:CODE,DS:DATA,SS:STAC. D j. }) O' B0 \
START PROC FAR; j+ \4 c: S$ X& F: j7 O0 t
PUSH DS) n% p; {" j N
XOR AX,AX0 F; q# a# Q/ ]9 E' A
PUSH AX
/ Q' u. t1 F0 i) P @ MOV AX,DATA2 o* g* [& ~2 O( h s
MOV DS,AX% q3 B9 a$ W. Y( [
LEA DX,SOURCE ;数据区起始地址8 l) {( |. o L/ p% j1 X
LEA SI,NAME0 ;原始数据文件名9 @- o5 Y+ @4 L( {
MOV CX,N ;字节数# J2 c5 U5 R' p6 i
CALL LOAD ;从'INPUT1.DAT'中读取数据$ u7 R% p5 l! X
;****BEGIN****
4 x7 `5 m. U; Y, x+ K8 W MOV DI,OFFSET RESULT9 T: Q3 b5 c9 [+ f6 {
MOV BX,0
+ `- ^8 V5 n _ MOV CX,N
5 R; y8 w% C* U. B" A MOV DL,_______________
* Z$ S7 m3 u4 ]$ z8 u% m PRO: MOV AL,SOURCE[BX]
- w1 J2 i% F, |* W8 V0 S$ c* p ________ AL,30H
; R s( }) W9 ? l. [4 r- H. ] MOV [DI],AL
2 |" K$ w! ?% H% _5 D$ A ___________________________
! {- T7 n' L9 C ADD AL,DL& V5 ?: U6 t' T" \5 w
___________________________9 O+ i4 g7 j, H, c- U
MOV DL.AL
' l7 N: S& y8 i INC BX
* K- j2 z% R! G1 d/ m( `% R) ?' f3 T ___________________________
% [, v4 y0 I) J. X3 l JNZ PRO0 }9 A- W7 ]4 j L1 M/ j$ R
___________________________
. b0 i8 L6 c3 |( k$ p) C3 U! E( Z6 { ;****END****9 j6 l( ^8 F6 Y0 K5 ~; y7 `
LEA DX,RESULT ;结果数据区首址7 M4 |) @2 w% L0 L3 m
LEA SI,NAME1 ;结果文件名
5 B1 B4 P) x1 H1 d% i0 b& V MOV CX,N+1 ;字节数
A8 A3 V0 W; E! S% b' {+ p CALL SAVE ;保存结果到文件0 m; ^, ^" v- Y& P- {5 r
RET7 [: g! q/ M, V8 a" d; m- L7 Y7 @5 L: p
START ENDP$ P3 P& H! `7 l9 N$ n: n' E2 _
CODE ENDS
, D, ]5 X i0 b* ?3 u4 y END START |