请编制程序,其功能是:内存中连续存放着10个无符号8位格雷码表示的数,现将此十个数转换成十个8位二进制数,结果存入内存,其转换方法为二进制数的最高位D7与格雷码的最高位G7相同,二进制数的其余七位DK(k=6,…,0)分别为格雷码的位GK(k=6,…,0)与二进制数的位DK+1(k=6,…,0)异或的结果。
# e( [. P/ G9 C. c7 Z2 C 例如:
7 s8 g# j6 i/ g 内存中有 00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H
9 L4 |9 {" h/ H 结果为 00H,02H,32H,45H,08H,19H,67H,03H,90H,85H
5 _, j' r3 Z; w* O4 l 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
, t- m c3 Q0 D* l 填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。2 d0 e+ i9 d6 E$ i: `
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。/ p9 m ]. u6 N- G' I
试题程序:
, N4 N5 O( ?3 S5 d8 T" L EXTRN LOAD:FAR,SAVE:FAR) J8 c6 W& C3 c* y7 s5 _) a; v
N EQU 109 ~& h1 o4 Y! g% l
STAC SEGMENT STACK
" x- g! Q2 N/ J4 `; d8 y5 d DB 128 DUP(?)! d" V' c$ M; m; o
STAC ENDS4 a: F, E6 g1 o( W, e
DATA SEGMENT
1 b' M a. w+ b/ C SOURCE DB N DUP(?) ;顺序存放10个字节数
V1 i# t" j" w. I" G/ W; E RESULT DB N DUP(0) ;存放结果" J6 U" o/ q i) Y8 c4 I' R
NAME0 DB 'INPUT1.DAT',0
* T! y" q" ^6 J Z. L1 J NAME1 DB 'OUTPUT1.DAT',0
# k: [1 J8 C- L' ]% ? DATA ENDS# V# C' n* N: d5 X) P2 S: Z
CODE SEGMENT
0 A5 _+ {& U% F3 ~7 d- s ASSUME CS:CODE,DS:DATA,SS:STAC% k' y2 S0 ?" C( \" C0 {
START PROC FAR
# ~9 r8 b( m+ k2 H' D2 N& b/ r PUSH DS
5 N& _: `9 U& K. y- K) _% ?9 b XOR AX,AX
% w& `) B3 m0 X6 j, r PUSH AX3 j" N( R' m$ Q, N; u T
MOV AX,DATA1 o3 A. B$ H/ f3 a! Q* t9 ~
MOV DS,AX5 s( w6 F" V8 }
LEA DX,SOURCE ;数据区起始地址/ j3 k) `% E) Q5 X
LEA SI,NAME0 ;原始数据文件名0 `5 m4 u* A" `3 V4 v9 o# F+ C
MOV CX,N ;字节数* x2 n1 ~9 k1 E* p) B
CALL LOAD ;从'INPUT1.DAT'中读取数据
( C1 n( D; r8 @5 i* ]8 A9 W* }! B ;****BEGIN****
' L- y3 q; z3 G& ^- A2 V0 A LEA SI,SOURCE, m5 E) r" z9 _2 K" \9 P1 Q5 ?
LEA DI,RESULT1 Q) A$ b5 ^/ ~1 v( [# L8 v' F
MOV CX,10
% M5 @7 e- T+ `; y- R9 x5 @ e AGN0: MOV AL,[SI]- S! j; Z" M: ~2 q! [0 x
________________
' p0 T0 r+ U* e MOV CX,88 u1 w6 R; s; ^+ ~ u3 U* g0 [
MOV BX,08 ~- A4 a$ k# `
AGN1: MOV AH,01 u# C% l- P9 b6 u& u5 N* @
SHL BL,1
! V8 h3 \! c. L! I# ^8 R ____ AL,1
* u' f. |' y# ~ RCL AH,1
8 T! n5 H2 R; K CMP AH,____
- v. J" O* { f# r ________________
5 J" O+ o1 k; r0 ^7 v L$ j/ `' l7 ] JMP NEXT! c& u7 V0 l, o
SET_ONE:OR BL,01H
9 I: j& c: K7 L NEXT: MOV ____,BL& ?% b4 Y; R! P a. m, v
________________
4 J5 c4 R- m) q6 ? LOOP AGN11 X! m2 Z' e1 P- f5 Q& g& E( c
________________0 ?. [- n! ~' ~0 j6 a. w
MOV [DI],BL
, O+ o; _: I! z9 F INC SI+ d+ Q, g4 c! L5 ^
INC DI
! x' a+ U# ~ R- Z: C" e8 C LOOP AGN0
! p* v/ q7 y& X3 a3 |; d2 { ;****END****
& s. }4 |: N: g LEA DX,RESULT ;结果数据区首址4 v0 W+ \! [, y: I
LEA SI,NAME1 ;结果文件名
$ K9 W- u7 ?; G# [1 B: ? MOV CX,N ;结果字节数% c- ^" o! ~4 X$ r
CALL SAVE ;保存结果到文件6 `" i9 f: L- r' K$ L, _1 L9 B
RET
% I! ~, ` u L! B3 o2 N0 A% A' B' E START ENDP% q0 m) f }$ ]( t1 N
CODE ENDS" m7 z8 U( j4 F$ A2 ~+ b/ n" z
END START |