请编制程序,其功能为:设由20个8位有符号数构成一个数组,试依次去掉其中负的奇数,生成一个新的数组(顺序不变)。结果存放在RESULT开始的内存单元中。
部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT中读入从SOURCE开始的内存单元,运算结果要求从RESULT开始存放,由SAVE过程保存到OUTPUT1.DAT文件中。请在BEGIN和END之间补充使其完整。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果。
部分程序如下:
; PROG1.ASM
EXTRN LOAD:FAR,SAVE:FAR
LEN EQU 20
DSEG SEGMENT
SOURCE DW N DUP ()
RESULT DW N DUP (0)
NAME0 DB ’INPUT1.DAT’,0
NAME1 DB ’OUTPUT1.DAT’,0
DSEG ENDS
SSEG SEGMENT STACK
DB 256 DUP ()
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG;SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX, DSEG
MOV DS,AX
MOV ES, AX
LEA DX, SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
; *** BEGIN ***
…………
…………
…………
; *** END ***
LEA DX, RESULT
LEA SI,NAME1
MOV CX,N
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
参考答案:
*** BEGIN ***
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,B0
LOOPA: MOV AL,[SI]
MOV AH,AL
SHR AH,A
JNC LOOPB
CMP AL,0
JNL LOOPB
JMP EXIT
LOOPB: MOV [DI],AL
INC, DI
EXIT: INC SI
LOOP LOOPA
; *** END ***
[INPUT A.DAT 中的输入数据]:
HAH,F0H,HEH,CHH,FHH,F0H,HEH,CHH,FHH,EEH,
E0H,FDH,EBH,EEH,DHH,CAH,DAH,D0H,DBH,BCH
[输出结果]
F0 HE CH FH F0 HE CH FH EE E0 FD EB EE DH CA DA
D0 DB BC 00