请编制程序,其功能是:将10个无符号字节数据中高4位和低4位所表示的十六进制数分别转换为ASCII码,并按照先低后高位的顺序存放在指定的内存区中。 例如:5 b- n' g9 E- a7 ~5 N! [
内存中有 61H,4AH,5BH…
) \2 s6 h' X# T5 E5 R! Y8 D0 G 结果为 31H,36H,41H,34H,42H,35H…9 `; X: T' o% M# Q* V2 j/ N
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。; U2 f: C' U9 m2 A0 z7 n0 |7 }+ y
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
/ s W6 w1 y1 ?0 C4 a/ d6 W3 F* m+ t 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
( c+ h$ S3 y' o- U" i8 r 试题程序:; f7 O4 k9 r) F1 H
EXTRN LOAD:FAR,SAVE:FAR
5 B1 a9 Z: ^4 H# ?" }, W/ k* A N EQU 10
% ~! T6 Q/ G' C" a DSEG SEGMENT
+ C: W0 @% Q- p. E- \1 @9 d SOURCE DB N DUP(?)& N* C2 o. c4 P3 L2 ]& l1 V
RESULT DW 2*N DUP(0)
0 x$ v. T( s" j, D2 x) l3 e NAME0 DB 'INPUT1.DAT',0
% x4 }0 c" X3 @% K9 f+ C NAME1 DB 'OUTPUT1.DAT',01 m" t g v1 q9 m7 g; e1 E' r
DSEG ENDS
. X% B. S: l- ]' x& z" e1 S4 h: U3 k2 E0 C SSEG SEGMENT STACK
" V% U" J5 J; h3 [, M6 ]( k# b DB 256 DUP(?). F5 o' v7 t. x
SSEG ENDS. a5 G7 c$ z- H* G7 U' q1 c
CSEG SEGMENT- y$ k& F6 E" t, G) N
ASSUME CS:CSEG,SS:SSEG,DS:DSEG/ h7 N# S# @' M
START PROC FAR
& y8 b2 B$ Y+ G" i PUSH DS T4 A0 A G; i$ c7 b
XOR AX,AX6 x) H) `/ X" I2 l* {# E4 `% D8 ]1 ^5 b
PUSH AX
( x0 I4 }* ?; m1 k6 L( l MOV AX,DSEG; i) P" P6 z" V4 p P# t1 i5 U
MOV DS,AX' |6 v# n$ q# z6 r5 z
MOV ES,AX
% Z( _& g4 @- Z0 N! y& x. L LEA DX,SOURCE ;数据区起始地址
: h* }7 b( W( {. `6 r$ h LEA SI,NAME0 ;原始数据文件名
4 A; [' K$ w5 F% e) M g% Y, O# @ MOV CX,N ;字节数
5 t5 g) p7 E y& `) [( w5 K CALL LOAD ;从'INPUT1.DAT'中读取数据
/ Q, j, c3 \( v ;****BEGIN****
9 v$ }! g" y7 I t LEA SI,SOURCE% P3 E( Z4 s4 L1 M
LEA DI,RESULT: p) C% h. k! ?
MOV CX,N+ z5 W, c) b/ B2 Z9 A
CLD
' z, }" Q* R0 {, A4 ] NEXT: LODSB% E1 E* e+ G# g4 s6 {9 ]
MOV BL,AL
+ M# L+ e5 \3 F0 _4 P AND AL,_______________" n- e$ b& m# {2 p4 O3 F
CALL SR( J5 z8 v" F* Q j) _2 U4 c5 n
MOV AL,BL
p8 |0 i0 p4 W. W5 V: E- S PUSH CX
% i9 `# k) f4 g3 |2 Y: x7 C MOV CL,47 p* `6 {* w+ z& C) Q6 w
SHR AL,_______________
; n9 N4 D- Y+ c/ k7 f+ T ___________________________
8 E/ t. U8 g5 F CALL SR
/ x5 d, K/ p# J7 }5 z LOOP NEXT
' s1 k, b- m6 G' Z& k8 q6 [ JMP EXIT$ U$ ^7 Z2 v% C9 x; Y5 Q0 m# m" s7 @
SR PROC# R$ L: i( T0 W% Y- E; i2 K( \
CMP AL,0AH
! ^. F4 v" i+ i, n0 f JB NUM4 [) K* A6 y7 O
ADD AL,07H3 O n5 G. Z, K( Z# m* a( z" L5 ]+ z
NUM: ADD AL,_______________5 J- z5 a8 J, H, Z7 [: k' o" O
STOSB
3 q. l( |7 C ?0 k! X9 m RET
1 F5 m. M9 o1 p+ d; ~4 n SR ___________________________. d, W6 L* x8 `/ t% G W
;****END****
" G! F4 y/ u l LEA DX,RESULT ;结果数据区首址 L$ f8 _- b d" K: o2 v0 F
LEA SI,NAME1 ;结果文件名
$ i* u! O6 p& _4 e }6 e1 S MOV CX,2*N ;字节数1 X: h2 x/ |' s; Q/ a# B
CALL SAVE ;保存结果到文件
% ] D( `2 A0 s- R+ F6 D6 G RET
6 k$ L+ M w% ?. C9 x START ENDP
Q2 P2 I4 D) X7 W! y CSEG ENDS
: i& I o, W, q2 W5 f. ^: n0 S END START |