请编制程序,其功能是:内存中连续存放着10个字节数,需对它们进行加密,其方法为:如某个数(两位十六进制数X1X2表示)的高位十六进制数X1大于或等于低位十六进制数X2,则低位十六进制数X2用X1-X2代替;如某个数的高位十六进制数X1小于低位十六进制数X2,则高位十六进制数X1用X2-X1代替。将加密后的结果存入内存。 例如:
, e3 y" G4 G( ] P- |$ `9 B( a" @ 内存中有 41H,46H…$ m9 Z% q; @+ O2 H4 W, X
结果 43H,26H…
' `0 x. K% W+ a' f* D+ J( m8 W 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。2 c2 F ~) Z+ H% f
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。& A6 v9 C) U, E6 M' v
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
6 W, C4 |7 v4 D( f' A% ? N: G/ p/ A 试题程序:2 ~8 p& d1 Q) {# F* q# C
EXTRN LOAD:FAR,SAVE:FAR
* r% I* b8 w% t. i% S0 d N EQU 10
+ a8 G3 }# K. z' U) Q STAC SEGMENT STACK
2 p/ S" f' m( h* j: D DB 128 DUP(?)
. f& ^2 P8 |5 p0 e; V STAC ENDS
7 D1 p& U, O4 } w* F DATA SEGMENT/ F* w! l. W# f& G$ A
SOURCE DB N DUP(?) ;顺序存放十个字节数) a8 S# u' @' @5 L) s! e
RESULT DB N DUP(0) ;存放结果1 t7 L3 |9 q6 ~
NAME0 DB 'INPUT1.DAT',0
* c4 \; }. [0 ~3 H4 ^- v4 g$ i. L NAME1 DB 'OUTPUT1.DAT',0! ~3 J8 c% V; d$ A- z, X
DATA ENDS9 U7 Z! V. e2 M4 T' x( j# D' K
CODE SEGMENT2 T, s0 O% M @6 H! t0 j' `# f& {
ASSUME CS:CODE,DS:DATA,SS:STAC9 P& w; w w& l# T# x% N$ ?( W, p5 Y
START PROC FAR# Y5 b# v* r! b
PUSH DS$ Q" e6 W9 w: E4 `# r
XOR AX,AX
% o @! Q! V9 A3 w8 r3 L PUSH AX
% v. {! Q2 t8 E/ k G" d MOV AX,DATA$ \$ r. O* x, T- v$ d
MOV DS,AX
: X: v; e. V6 w/ z LEA DX,SOURCE ;数据区起始地址
L; H- `1 R! X/ t LEA SI,NAME0 ;原始数据文件名' X+ r: Q3 E8 |& F4 g
MOV CX,N ;字节数7 S, L. w' V N7 z
CALL LOAD ;从'INPUT1.DAT'中读取数据7 [# G. g+ }1 M, M( _) R0 @
;****BEGIN***** h$ a3 x. q$ ]9 x1 c9 ]" F
LEA DI,RESULT
8 A$ o" E8 c9 V LEA SI,SOURCE
, P9 `8 W- l2 p MOV CX,N
! c! s1 ]9 E) o# v! T! j AGN1: MOV AL,[SI]
! l( N! K8 o6 e+ [4 n MOV AH,AL7 h" T: q( {0 `5 l5 G+ Q, `
AND AL,0FH
% j' e0 ~2 W# C) }3 Z AND AH,0F0H
6 Z3 E" X+ j* t) e( o9 {% o B7 _$ \ MOV DX,4
8 P& f9 G% ~8 K( O* [ AGN2: SHR AH,18 I6 c( X6 @3 i- j1 B0 Q
___________________________$ A2 I9 w4 r4 P- J9 N* Y
JNZ AGN2
6 h- Z- Z! D% w" `: f CMP AH,AL k5 u3 _* _! ?( _; d* r# N8 l9 d
___________________________
2 J' b) M' L/ f" E MOV BL,AL
7 I, `* V/ ~% I: X6 a5 D SUB BL,AH6 Q' q* M0 G' w$ L$ m
MOV AH,BL
6 J* X( I6 D, ^ JMP STORE1
! d8 J4 \* l: [& q: m0 { G1: MOV BH,AH9 n/ j/ p3 f5 U* [& r
SUB BH,AL7 `6 t0 x3 c# O6 w7 }! w6 ^1 V
MOV ___________,BH5 `8 ?# l& B( o3 V/ e
STORE1: MOV DX,4
# A0 P1 n6 o, Y R% e* S3 a* ~# \ AGN3: ________ AH,1
+ F# H* w4 h: L- e& J DEC DX1 a3 r' [$ K' }# l ]$ ~( V2 ?
JNZ AGN3; M8 I- f, ^) F8 V
________ AH,AL
. x/ ?" J; q" ] MOV [DI],AH
7 M6 g, S, W/ q0 W- \ INC DI& ^4 f# Q; ?' }
INC SI5 r. H( U: r3 K1 B8 L
LOOP AGN1
: I- d) O/ s4 G6 z' j5 e" K/ g ;****END****. k+ C y2 V; @; q1 Q
LEA DX,RESULT ;结果数据区首址
) X5 L6 t' q' G( S9 c LEA SI,NAME1 ;结果文件名& G9 _! U0 \3 d! {; e: f9 Q
MOV CX,N ;字节数
$ @3 N; C- T! g CALL SAVE ;保存结果到文件
3 N4 P. x: X, [* X+ J$ S3 Y/ } RET
% B% |; l" Q5 {, u0 A+ Z START ENDP$ M( R; P5 F" C6 w- e" w. L
CODE ENDS7 l4 P: g3 R" x; b9 B
END START |