早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->计算机三级 -->

请编制程序,其功能为:从SOURCE开始的内存区域存放着N个字节的有符号数。现找出最大的数,结果存放

题目

请编制程序,其功能为:从SOURCE开始的内存区域存放着N个字节的有符号数。现找出最大的数,结果存放到RESULT 指示的,其后存放原N个数逻辑取反后的值。

例如:

数据为:09H,7EH,89H,F6H,17H……67H(N个数据)

结果为:7EH (最大数),F6H,81H,76H,0CH,E8H……98H(原N个数的逻辑反)

部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT 中读入从SOURCE开始的内存单元,运算结果要求从RESIULT开始存放,由SAVE 过程保存到OUTPUT1.DAT 文件中。请在BEGIN和END 之间补充使其完整,完成要求的功能。或删除BEGIN和END 之间原有的代码井自行编程来完成要求的功能。

对程序必须进行汇编,并与IO. OBJ 链接产生PROG1. EXE 执行文件,最终产生运行结果。

部分程序如下;

;PROG1. ASM

EXTRN LOAD: FAR,SAVE:FAR

N EQU 30

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 128 DHP (?)

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 ***

______ SI,SOURCE

MOV BX,OFFSET SOURCE

LEA DI,RESULT

L1: MOV CX,N

MOV DX,CX

DEC DX

MOV AL,______

L2: INC BX

______ AL,[BX]

______________

MOV AL,[BX]

L3: DEC DX

JNZ______

MOV [DI],AL

INC DI

CLD

MAX: LODSB

NOT AL

______________

LOOP MAX

; *** END ***

LEA DX,RESULT

LEA SI,NAME1

MOV CX,N

CALL SAVE

RET

START ENDP

CSEG ENDS

END START

参考答案
正确答案:; *** BEGIN *** LEA SI SOURCE MOV BXOFFSET SOURCE LEA DI RESULT L1: MOV CXN MOV DX CX DEC DX ; 第一个数已经取出故还剩N-1个数需做比较 MOV AL [BX] ; 将 SOURCE 中的第一个数传至AL中 L2: INC BX CMP AL [BX] ; 当前最大值与 BX 所指 SOURCE 数据区中的数 JGE L3 ; 若大于或等于则转移至 L3 MOV AL [BX] ; 否则用BX 所指向的数改写 AL寄存器的内容 L3: DEC DX JNZ L2 ; 若不等于0转移至L2 MOV [DI] AL INC DI CLD MAX: LODSB NOT AL STOSB LOOP MAX ; *** END *** [INPUT1. DAT 中的输入数据]: 50H61H72H83H94H2BH51h11H45HE9H 09H7EH89HF6H 17H43H34h12H67H35H 3DH2EHfAH44H 12H23H 17H46H36H47H [输出结果] 7E AF 9E 8D 7C 6B D4 AE EE BA 16 F6 81 76 09 E8 BC CB ED 98 CA C2 D1 A5 BB ED DC E8 B9 C9
; *** BEGIN *** LEA SI, SOURCE MOV BX,OFFSET SOURCE LEA DI, RESULT L1: MOV CX,N MOV DX, CX DEC DX ; 第一个数已经取出,故还剩N-1个数需做比较 MOV AL, [BX] ; 将 SOURCE 中的第一个数传至AL中 L2: INC BX CMP AL, [BX] ; 当前最大值与 BX 所指 SOURCE 数据区中的数 JGE L3 ; 若大于或等于,则转移至 L3 MOV AL, [BX] ; 否则,用BX 所指向的数改写 AL寄存器的内容 L3: DEC DX JNZ L2 ; 若不等于0,转移至L2 MOV [DI] ,AL INC DI CLD MAX: LODSB NOT AL STOSB LOOP MAX ; *** END *** [INPUT1. DAT 中的输入数据]: 50H,61H,72H,83H,94H,2BH,51H,11H,45H,E9H 09H,7EH,89H,F6H, 17H,43H,34H,12H,67H,35H 3DH,2EH,fAH,44H, 12H,23H, 17H,46H,36H,47H [输出结果] 7E AF 9E 8D 7C 6B D4 AE EE BA 16 F6 81 76 09 E8 BC CB ED 98 CA C2 D1 A5 BB ED DC E8 B9 C9