请编制程序,其功能是:将连续20个字节的十六进制数顺序转换成40个ASCII字符(字母用大写)。转换的顺序是先高四位,后低四位。. N" i6 p9 N4 K( {! N$ C9 Q, ^* P' a
例如: 原始数据是 AFH,14H…$ i3 ]; w; M! i5 }% z* m& b
转换后应是 41H,46H,31H,34H…
# d1 }4 ~, m0 u, L* D* ` 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
" R% t: E3 f( l; _: y8 w 请在BEGIN和END之间补充一段源程序,完成要求的功能。
7 K; f+ ^0 f+ N. O/ n8 @ 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。: A v" d# Y& x* O, v& F
试题程序:$ @, i8 e+ v7 `; C5 U
EXTRN LOAD:FAR,SAVE:FAR, i- g5 Z& E0 G, u0 F. g
N EQU 20- |- ^( _; f g7 H
DSEG SEGMENT
9 v2 k) @/ k* \. N: ~ SOURCE DB N DUP(?)
- ?9 A: x: ^( H, [ RESULT DB 2*N DUP(0)
! B! z8 N' A1 _2 A, o$ b0 q NAME0 DB 'INPUT1.DAT',0- L) ~/ E- t; S9 g9 R
NAME1 DB 'OUTPUT1.DAT',0
& @+ d1 X1 a# j0 Q2 j0 ~# F( z9 D DSEG ENDS
1 i4 q" q3 J: P: d b5 r SSEG SEGMENT STACK
Y& S) i4 K% L+ G8 O5 Z DB 256 DUP(?)/ g: x0 A/ O/ ^! w7 X7 X* |7 t
SSEG ENDS
+ n0 U: E5 Z! x* v CSEG SEGMENT
. c) D/ }5 i! B ASSUME CS:CSEG,DS:DSEG,SS:SSEG
3 u4 U8 n8 u3 T- y3 { START PROC FAR
! U3 R* z% Q+ x/ e& b1 Q, i PUSH DS
) P9 B" l& l4 s7 ~5 S) h G; M XOR AX,AX
1 O, _( B# ^/ [& _2 N' R PUSH AX
) _$ h! y3 ^3 j! b% W- k( P MOV AX,DSEG
) N* ~$ X# b3 }7 m8 C: Y MOV DS,AX) M! `4 H$ z, q8 e3 C2 k
LEA DX,SOURCE ;数据区起始地址
% O+ ]+ {( O6 \% H" P LEA SI,NAME0 ;原始数据文件名/ D e' `* q$ }4 y4 F
MOV CX,N ;字节数
+ n2 x, }! q2 N$ _- P3 g% ^ CALL LOAD ;从'INPUT1.DAT'中读取数据
6 T0 j7 ~) [3 |! s J ;****BEGIN****3 q$ f# q' H: k: T. N1 |
LEA SI,SOURCE& X6 k* {0 n+ e5 [ z3 Z1 p
LEA DI,RESULT3 O- p' t F K1 v5 S3 c
MOV CX,N
D6 I7 a' K4 Y; u% X/ \+ c$ |4 { LOOP2: MOV BL,2
. U- M. @+ e5 }6 C; y MOV AL,[SI]8 p& X$ @( C1 h$ U9 J+ _- T$ D- n
MOV AH,AL
6 t+ p5 u7 l2 L4 C6 O" z PUSH CX
. R) O( D9 f/ _- s; c K6 W MOV CL,42 R, u# Q0 S. M1 u9 J
SHR AL,CL( }- n1 H) Z/ @: f8 }+ N
POP CX
. w$ |8 P' h) g; p' \4 h8 ~ EXCH: CMP AL,9, _1 ]; s$ V: ?
JNA CHAR1 P% _0 ^: M4 F& w, P1 V
ADD AL,07H
5 H4 N" c: W( I F# H# Q x9 ~4 Y CHAR: ADD AL,30H5 P- `& C: C: \7 J
MOV [DI],AL* \7 S6 ~4 K/ `- |; Y
INC DI, l7 a8 o# ]. v3 B
DEC BL* Y6 {$ k2 y. |' [7 D
JZ LOOP1
$ K6 H2 I' C. v* a. }8 l1 w AND AH,0FH
/ G/ t1 q# H( [ T MOV AL,AH+ `5 D1 ^+ h# G4 `; n
JMP EXCH1 v, E/ q/ ]2 y& K, m4 g' K8 B) }+ O
LOOP1: INC SI
2 @( M* q- c5 X# q. V LOOP LOOP2) ^; P o8 x# [+ Y7 E
;****END****
+ \4 v0 Y0 a/ O, p' `( } LEA DX,RESULT ;结果数据区首址
$ j0 I/ W9 T8 z6 S* m( I8 r LEA SI,NAME1 ;结果文件名4 m* x( a! B% A( O0 B
MOV CX,N*2 ;字节数( Q4 S* I8 C+ ^( z
CALL SAVE ;保存结果到文件
8 J+ M% u& Y, [ RET
/ [: w: E! R& d# i, ^: r START ENDP
) y2 K4 R3 P. L8 Q3 x Y; _# Q* X CSEG ENDS
5 B; h o. {9 w; G( z$ c END START |