请编制程序,其功能是:将十进制数据的ASCII码转换为BCD码,并按照组合(压缩)格式存放在内存区中。该ASCII字符串以00H作为结束标志,若被转换的ASCII码为奇数个,则把地址最低的ASCII码按照非组合(非压缩)BCD码格式转换。 例如:
; S1 P/ |8 c1 Y, B7 x" o! c2 l } 内存中有 31H,32H,33H,34H,35H
_1 Y" r, i5 c% K, o 结果为 000H,0302H,0504H! d6 k1 O1 ~/ D0 Z2 A" k
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。( b+ c, z( J4 v7 i1 c. D8 z
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
; j5 d( T8 ~. p: M- ~0 t! _ 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。% I$ s1 i- e \5 j- ?
试题程序:) y" `: n3 h6 v' u
EXTRN LOAD:FAR,SAVE:FAR
5 a! }/ j& C' H" R: ~ N EQU 20
/ J3 G' ]8 l- F+ I7 b) b DSEG SEGMENT: G" h# `& W4 N' f/ ?
SOURCE DB N DUP(?)
% J+ m# [9 @7 v' g! U4 E RESULT DB N/2 DUP(0) H: O, R' `; c! f# X
NAME0 DB 'INPUT1.DAT',05 f4 S; h" u$ y
NAME1 DB 'OUTPUT1.DAT',0
3 W4 `( s7 Y$ m8 C* `0 d* e/ c* Q DSEG ENDS5 u$ d7 [7 |7 b: N1 h
SSEG SEGMENT STACK
: f/ q% A7 D5 n DB 256 DUP(?)
" h9 L* f6 D6 i0 L5 Z SSEG ENDS6 @" u- r3 x6 w1 y3 i, D' X0 `
CODE SEGMENT* Q- s _. V( o9 G% H* Q6 U# J. \
ASSUME CS:CSEG, SS:SSEG, DS:DSEG
8 H6 u5 c" G" h! b, }; W START PROC FAR
) J* K }1 D* N1 ^ PUSH DS
* U+ L+ v! t3 O& w2 i* c2 N XOR AX,AX$ j( N6 K9 a. O1 T( a! p) Z7 P/ q
PUSH AX
2 t G, d, O; S0 H MOV AX,DSEG; y7 k/ k. i8 ]+ j) ? A
MOV DS,AX
: I% \2 h! I0 m. y MOV ES,AX ;置附加段寄存器" [$ Q- V1 M/ ^! b" }8 h3 P
LEA DX,SOURCE ;数据区起始地址
! w; D. `( \ C L8 k( q; y! J LEA SI,NAME0 ;原始数据文件名
( Z2 L! w, v* e' }, R" C MOV CX,N ;字节数( |' W y& y" P% [' ~4 Y
CALL LOAD ;从'INPUT1.DAT'中读取数据6 {5 q6 c% A L# J* p' t
;****BEGIN****
; C G- J7 D) W6 U9 [* I3 q MOV CX,0% D6 I6 U6 x0 I0 r- V4 s
LEA BX,SOURCE, c6 I- d7 s9 Y/ o- J$ d9 `, B! {2 M
NEXT: MOV AL,[BX]
% U: B) b0 M6 K; x6 H CMP AL,0 |# j" D: U/ U0 M( z6 h1 _
JZ GOON
& i4 O" A$ u/ H- x: d: l INC CX5 j) W7 U7 d- w
INC BX6 c0 l+ ]( x- ?/ A% p( `/ M
JMP NEXT
2 Q. R S. c0 L$ i9 c! P GOON: LEA SI,SOURCE
$ |2 B" |/ ^: o1 N+ e6 w2 ] LEA DI,RESULT/ \7 i5 A. c8 A, U9 l8 U
ROR CX,1 ;是偶数吗?! W4 ]3 }5 Q& ]: |3 a m5 @$ P& N
JNC EVN ;是) _) s5 v i$ I' M) w- r
ROL CX,1 ;否1 o Z6 R* x$ z( X
LODSB1 v! V8 X' L, |* N' ?0 F$ D3 M
AND __________,0FH6 l( w2 i. q1 \3 Q9 w
STOSB
8 F" Q1 S1 y6 @' i DEC CX/ V2 {: w% J2 W# ^# w8 e3 b
ROR CX,1
6 T5 T5 J& ^" T6 ]4 L4 y7 z/ o) x9 \ EVN: LODSB9 @ G) H! r D
AND __________,0FH( F+ V/ s7 V; h" q! x% ^6 B; I9 W
MOV BL,AL/ T/ w0 F9 g* F, h4 J
LODSB
9 |0 h6 L/ C6 M; X PUSH CX) C w* x4 H; J0 ]# [
MOV CL,___________________6 Y8 E" L# _6 Q. u
SAL AL,___________________ X& Z6 Y: B3 P6 ^8 ~- Q$ d
POP CX: w+ Y M; J1 M1 }- }) b( g: A% ~- I7 z
________ AL,BL4 A9 D2 Y2 v- J' ?- U* e
STOSB, d& h }0 G+ f! p( h( }7 l7 `
LOOP EVN4 J6 S4 G7 ~* F4 d8 c( f
;****END****
* f R% J( r" b/ z6 z' b4 Y LEA DX,RESULT ;结果数据区首址
. f' ? H1 x( ^ LEA SI,NAME1 ;结果文件名
" U: d/ X) b. @6 d4 r) Z MOV CX,N/2 ;字节数
$ j2 L8 |# W6 M6 N; ~9 j CALL SAVE ;保存结果到文件
/ l5 s5 x6 w( @! B" l/ e* g( c! s" e RET0 _& i' Q: ?" x' E! D
START ENDP
* T1 |6 S. C! N9 A CODE ENDS/ x @ j) l6 ?8 k H3 |, K8 S
END START |