请编制程序,其功能是:内存中连续存放着10个无符号8位二进制数,现将此十个数转换成10个8位格雷码表示的数,结果存入内存。其转换方法为格雷码的最高位g7与二进制数的最高位d7相同,格雷码的其余七位gk(k=6,…0)分别为二进制数的位dk+1(k=6,…,0)与位dk(k=6,…,0)异或的结果。* \# O4 _- t* L$ i9 K
例如:
3 {6 M8 t, h" z* Z/ i- p& Y: e 内存中有 00H,02H,32H,45H,08H,19H,67H,03H,90H,85H* F C0 S5 X. u2 \/ d
结果为 00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H4 d9 O0 Y! M/ h5 k+ r
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。# }- u' x: \" U. M: P% ~$ C
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。2 Y3 A- e' j- x7 t8 {+ u
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
: {( \( R/ H) l5 f; o8 V# u 试题程序:0 {. }. D) m5 J) O. q
EXTRN LOAD:FAR,SAVE:FAR; O, b! K3 p: }, o% [' x& I
N EQU 10
- Q, p8 b* d1 [' N1 Y* M STAC SEGMENT STACK; `; B; S2 G3 k7 \& y) c" s
DB 128 DUP(?)
1 Z) s8 p: \; ?& |, s/ x+ M STAC ENDS" ^! K$ P0 Y) m' F/ l3 R
DATA SEGMENT
, L6 K5 Q# `# y SOURCE DB N DUP(?) ;顺序存放10个字节数
9 u! l+ ]$ Q# f! Y5 X/ } RESULT DB N+1 DUP(0) ;存放结果
; @1 p2 w5 H/ h' v6 u' Q+ I' X9 k7 o4 X NAME0 DB 'INPUT1.DAT',00 a" x$ E4 @1 l' I+ ^. @+ u$ l8 ?
NAME1 DB 'OUTPUT1.DAT',0; z8 E$ @" c3 l3 \) E+ H
DATA ENDS
% p# C; f- _6 Y8 \6 c. { CODE SEGMENT
* r( R. t' v! N* r& e ASSUME CS:CODE,DS:DATA,SS:STAC
0 k8 q" {- r1 u- f START PROC FAR( F, t. e I. X! Z o
PUSH DS
6 L4 @& ~ `/ C4 S* s XOR AX,AX
$ v% ^; F7 ^5 G PUSH AX
5 W' M/ q# p, w MOV AX,DATA
& J1 R) o4 ~4 |# f: P6 l MOV DS,AX
( E+ M9 K" o0 ^) z/ v LEA DX,SOURCE ;数据区起始地址
0 l! C n: O2 W' x$ Q LEA SI,NAME0 ;原始数据文件名
9 _7 [5 @( b- W MOV CX,N*2 ;字节数' u/ B# N( y. W! c
CALL LOAD ;从'INPUT1.DAT'中读取数据2 g. U" F* X- Y7 b% {$ j: h
;****BEGIN***** w E+ L1 u* c* u- l" d/ A2 J
LEA SI,SOURCE
2 n0 ^7 B' u0 Q) P LEA DI,RESULT
" r* _: W m/ P# Q! f6 q! Z E MOV CX,10
$ a* ~0 v4 y( W8 { AGN0: MOV AL,[SI]
3 k) l4 t: ?7 ^2 w6 s ______________________
" n6 ~5 u2 d& n+ K. B MOV CX,8: J* E$ w6 M6 ]# e! h
MOV BX,0
1 N5 b- q0 Z5 r$ } AGN1: MOV AH,04 K. @2 e" I {! V$ P
________ BL,1
- ^( p6 ^" d2 b; U/ v1 a ROL AL,1
1 \6 ~; ^- U6 ` _________________________: j- y: C; C; K0 o4 A% B3 h2 d8 z
CMP AH,BH6 L4 D- P6 D: e3 `1 t7 ^6 `/ h
________ SET_ONE
& X: \- Q D1 D8 ~ JMP NEXT
5 f6 n4 p* N0 _) L z- ~3 @% o# C" u SET_ONE:OR BL,01H& {( u( g3 ^& G) n' O& Y' V7 b0 [
NEXT: MOV _________,AH( O5 n8 M' g- e! w* r
LOOP AGN13 b+ Q" C, T9 o b$ T( p
_________________________
4 y4 n0 v! c# u+ z# O3 s MOV [DI],BL
5 ]8 J: c" u) T4 D. Y0 K1 D INC SI* t* u# \5 M! T+ X8 |- @
INC DI! \" l* R( \9 [1 W, e
LOOP AGN0
6 C/ K! ~; ?/ V- n% U* k2 H- { \ ;****END****
% F2 G# X% h) X0 n" C LEA DX,RESULT ;结果数据区首址
4 g7 [( C: h/ K( t LEA SI,NAME1 ;结果文件名# C' d. Q8 k/ A7 ]) Z0 T
MOV CX,N ;结果字节数) e3 T& G! \/ j" I
CALL SAVE ;保存结果到文件- [4 C: _/ C" ]1 g% ^; F- z- C% H+ K s0 _
RET U/ a7 W7 b6 y
START ENDP
2 n# w( E H( j: w" {7 {: h# U CODE ENDS8 i }0 q! s" ?+ C' T; p/ J
END START |