请编制程序,其功能是:对内存中存放的六组带符号16位二进制数(每组由三个数组成,均不为零)进行处理。处理方法为:当每组中负数多于正数时,将组内负数变成正数(但绝对值不变,下同),组内正数不变。反之,将组内正数变成负数,组内负数不变。变换好的数按原序存放在内存中。 例如:* X3 R, z; ^( J v4 b1 H/ Y
内存中有 0003H,0001H,0002H,0003H,0004H,FFFFH,FFFEH,FFFDH,0001H,FFFEH,FFFDH,FFFFH…(共六组18个数)& y' s9 i/ g! e7 E- G& x
结果为 FFFDH,FFFFH,FFEH,FFFDH,FFFCH,FFFFH,0002H,0003H,0001H,0002H,0003,0001H…(共18个数)
4 Q- H6 ?. Z( n4 a# ?' C P 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。0 x Q2 |& A. m% e6 Y {+ C. P% ~; J
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
4 {( A. d1 o2 R$ }+ i5 ^( \ 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
7 |. Z- q4 i4 H2 z# m& G b 试题程序:0 U7 h1 x; W3 X/ M
EXTRN LOAD:FAR,SAVE:FAR
) @6 ]. M4 z) o: F T: m) ?; W N EQU 187 {* P! ?3 c/ M1 a2 A* O) y
STAC SEGMENT STACK3 t) W& ?5 O: D7 U. S9 ^9 e
DB 128 DUP(?)
1 m( }# @6 F9 U! p' ? STAC ENDS
" f5 G8 L0 B$ z: [( F8 G( W DATA SEGMENT2 j% J' |' W2 ?' m& g# p
SOURCE DW N DUP(?)
H) I/ L: R3 \& k, m6 s b' K RESULT DW N DUP(0)+ K) D6 D2 G: f- X
NAME0 DB 'INPUT1.DAT',01 y5 I6 F% e5 D
NAME1 DB 'OUTPUT1.DAT',0
?$ Q K4 e/ ~2 a+ Y- ^7 Z DATA ENDS( B1 t) k! z7 ]3 ^* [9 ?* @; R; t1 w
CODE SEGMENT
: K6 { O) ~2 j& ~3 o) c ASSUME CS:CODE,DS:DATA,SS:STAC* g2 F t9 ^: z" h/ Y& O2 z
START PROC FAR
* V S- Q4 Z& g. q, M% O! a" X/ [ PUSH DS
5 _0 m1 P6 N& Q7 ~3 ?4 \ XOR AX,AX
$ w& \* q ?) E& q PUSH AX
6 C* a7 \: [+ E+ c* g MOV AX,DATA$ {! ~0 q. B' o. U( a' W$ I) E
MOV DS,AX1 l% s' z8 z, t1 J! V
LEA DX,SOURCE ;数据区起始地址
# r7 ~9 u4 `) U1 I* c/ K LEA SI,NAME0 ;原始数据文件名% v6 [* i1 K3 @) W8 @. C
MOV CX,N*2 ;字节数+ j, {1 l* @' w1 i
CALL LOAD ;从'INPUT1.DAT'中读取数据
, w2 w- X7 S/ W! |0 [0 m+ O6 s" e ;****BEGIN****. K, A" c6 Y4 m7 D5 q
MOV SI,0) k% E( ]/ V: t! H) S2 k
MOV DI,0; u0 | x$ ]& z2 y3 H
MOV BX,6# k' D( P& ?7 U
REPT1: MOV DX,0% B# i5 i3 u' T3 w
____________________________' |6 c5 ^9 f' K& D
CAMP: MOV AX,SOURCE[SI]* t8 O( @3 T1 a% z: I: e7 l0 G8 Z
____________________________! `, T: Y% H7 ^+ [5 p! d
CMP AX,03 s* ]9 m+ A7 c% c+ Y( S1 Q
JL CONT
/ X8 O- g5 v* t; m6 b JMP NEXT
7 K! b/ Z6 q, f: R; f Y( ? CONT: INC DX
& W- B* [4 @5 c$ F NEXT: LOOP CAMP$ M8 ~: c$ {/ I6 V0 Q c# |
SUB SI,6
+ i0 t' B9 Z; G1 j" y5 w, V( W8 P2 z MOV CX,35 [6 B2 O; k/ a1 g! p S1 a
CMP DX,2
% X6 p0 r6 Y) K. m0 p# p JAE NEG1( J& h' I- j+ b- K5 @: @9 J
________ NEXT1
, w) u* q7 m3 H' B7 h o4 `4 b; C NEG1: MOV AX,SOURCE[SI]
9 b3 V) ^# K) e' o; l ______________________9 T ^9 ~. c \0 C
CMP AX,0
4 Y! y, B* A+ X3 }! m1 g* X- c JL NEG2
. A( W4 |/ c: g% n. W$ ~ JMP NOTNEG
: E6 t0 V$ `& @! B' U3 Y) w NEG2: ______________________
2 ?; r2 t; z9 x* ]+ U- r NOTNEG: MOV RESULT[DI],AX) x2 ?/ z0 r1 y4 p+ k
______________________5 S; j( C. p- V4 j9 o4 T
LOOP NEG1* Z7 w$ t5 t1 a! P5 C
JMP NEXT21 x2 ]! `; n6 ]5 r- L. o
NEXT1: MOV AX,SOURCE[SI]/ h0 |- L& o/ b( d1 {; u
______________________ o9 P, j% V A
CMP AX,0' S6 q$ |2 w9 C: M: k$ V0 a
JG NEG33 x% m: h+ ]' e" n, q
JMP NOTNEG1% H3 R' z1 F6 |
NEG3: NEG AX
, g- F9 d1 Y3 F! i% p NOTNEG1:MOV RESULT[DI],AX; j6 o) O2 m2 o
_______________________6 q( O) C: i) v8 D; n3 Z
LOOP NEXT1
, B2 j, @/ r8 m j; _$ r! \ NEXT2: DEC BX
5 m$ b( M8 N$ v1 E/ r) T+ q0 e JZ EXIT3 f" Z4 u' R! S4 I$ S7 @
_______________________$ v) q% Y1 h0 J$ y# X1 w8 `4 | b) d
EXIT: NOP
! u3 ~3 T8 G5 \) B! i& I: |- r ;****END****- n3 P" t4 }, E6 `* M: V8 [+ A
LEA DX,RESULT ;结果数据区首址3 g n6 B3 F: D$ V5 |: [& E
LEA SI,NAME1 ;结果文件名
/ k% Z6 E/ V/ I$ t% b4 h' {2 x9 o MOV CX,N*2 ;字节数+ h" Z- Q/ z( m0 Z7 G9 |9 a
CALL SAVE ;保存结果到文件
8 v% _1 M! ]" E) a! T+ E5 C# R RET
) E# r: K$ m6 n( ^3 w, V START ENDP
6 W) K) X3 b+ U/ V7 @. t CODE ENDS2 s9 t: s2 n6 ^( ?9 K; Y
END START |