请编制程序,其功能是:内存中连续存放着5个用压缩型(组合型)BCD码表示的十进制数,请将它们分别转换成ASCII字符,高位的BCD码转换后放在较高的地址单元。 例如:
R5 e9 Z# M3 X$ } 内存中有 21H,43H…(共十个字节)
9 l9 t3 W# {# w7 ` S/ J$ C 结果为 31H('1'),32H('2'),33H('3'),34('4')…(共20个字节)
0 V8 R; o' T! y% p, \7 g 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
- {# t k& _8 X$ k& H 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
$ R0 M4 I% q$ d/ I6 t: C 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。* {- _$ O$ x4 p: G/ J
试题程序:
0 v* A. E0 i6 @6 ~; I3 _ EXTRN LOAD:FAR,SAVE:FAR
, Y( Y8 w# R$ x+ M: a0 G. H N EQU 5; D' S: G, E8 A6 S s/ C
STAC SEGMENT STACK7 U- l" z1 P2 c$ ]- P
DB 128 DUP(?)
5 r5 w1 \% S) O STAC ENDS
6 d* \1 i% {+ S; P; V) t5 R DATA SEGMENT" |' [1 w7 f8 e- I- Q9 w$ g+ c
SOURCE DB N DUP(?)' C3 L% o3 H2 j2 {
RESULT DB N*2 DUP(0)1 ~7 K( l3 W+ Z9 ?* a
NAME0 DB 'INPUT1.DAT',0
$ |9 _% s! N V4 s( O/ Y NAME1 DB 'OUTPUT1.DAT',0$ ?) b+ n( k$ u) f0 x
DATA ENDS
! t& b6 f) y/ c3 B CODE SEGMENT/ y, X9 Z( e5 q, Q$ k% k+ K
ASSUME CS:CODE,DS:DATA,SS:STAC0 V0 s5 o: S, C2 J( @5 t* t
START PROC FAR% f/ {' F) L" g# p3 y
PUSH DS
- @7 }& U% w2 S, j v: \( { t4 | XOR AX,AX( w1 [- i- E5 v3 f) @
PUSH AX" m$ C/ |( G! @7 T
MOV AX,DATA
% k4 ~0 `; _& o' u MOV DS,AX8 u ?" u3 Q1 [2 H- X
LEA DX,SOURCE ;数据区起始地址
% ?6 Z- I5 W8 K% E LEA SI,NAME0 ;原始数据文件名
* w2 R1 q" V: R" d7 F5 m7 x/ b MOV CX,N ;字节数
: d' F8 b" X" k1 w. F) ]8 u CALL LOAD ;从'INPUT1.DAT'中读取数据
; y: ] R8 z7 R0 i+ n* h ;****BEGIN****/ B1 Q0 n4 V, G/ J
LEA SI,SOURCE
& y6 X0 j- w2 |- M LEA DI,RESULT
3 Q0 r) h, u L% ] MOV CX,N
8 N* I* t4 B/ z) N CLD
* V" }) `+ s& }9 D6 |& d/ b% o NEXT: LODS_____4 d4 K. X! z. i* }$ S
MOV BL,AL1 a. [, x7 c5 } j
AND AL,_______________2 c" K* E; h/ Z i/ f6 N# B
OR AL,30H
% `3 @ h3 M! w J- h/ ~0 L t# I STOS_____2 M) U6 i, L$ x+ v1 W4 ?
MOV AL,_______________* ~' E" Q ]4 Q, C
PUSH __________________
. k7 l4 n3 D6 ?+ W MOV CL,_______________5 p0 a+ X1 b+ F1 }% e: N
SAR AL,CL! X& s( T- J: W. _ F* q
POP __________________
9 O( U% G4 J+ b4 p; V OR AL,30H2 a$ y6 j- ?) |* X" g5 `
STOS_____% S( {+ L( H( y |. l
LOOP NEXT/ [: J; X, d8 q2 ]. N
;****END****
3 `4 L9 u6 w# m3 A- k# W1 E LEA DX,RESULT ;结果数据区首址* e3 M4 \% R0 v
LEA SI,NAME1 ;结果文件名* y0 p& K6 R/ c5 A' a( [+ a
MOV CX,N*2 ;字节数
$ W0 L' B( ]/ B6 B$ R CALL SAVE ;保存结果到文件. R$ X9 M7 _/ Q& o: z/ m. |+ }
RET' ~ L0 z1 S7 B6 X$ u
START ENDP
. m" t: j+ W6 q$ a, @& r5 n0 \9 a' { CODE ENDS7 @/ E3 t/ n+ L2 k) d
END START |