请编制程序 其功能为:从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 SOURCEMOV BXOFFSET SOURCELEA DI RESULTL1: MOV CXNMOV DX CXDEC DX ; 第一个数已经取出故还剩N-1个数需做比较MOV AL [BX] ; 将 SOURCE 中的第一个数传至AL中L2: INC BXCMP AL [BX] ; 当前最大值与 BX 所指 SOURCE 数据区中的数JGE L3 ; 若大于或等于则转移至 L3MOV AL [BX] ; 否则用BX 所指向的数改写 AL寄存器的内容L3: DEC DXJNZ L2 ; 若不等于0转移至L2MOV [DI] ALINC DICLDMAX: LODSBNOT ALSTOSBLOOP MAX; *** END ***[INPUT1. DAT 中的输入数据]:50H61H72H83H94H2BH51H11H45HE9H09H7EH89HF6H 17H43H34H12H67H35H3DH2EHfAH44H 12H23H 17H46H36H47H[输出结果]7E AF 9E 8D 7C 6B D4 AE EE BA 16 F6 81 76 09 E8BC CB ED 98 CA C2 D1 A5 BB ED DC E8 B9 C9
; *** BEGIN ***LEA SI, SOURCEMOV BX,OFFSET SOURCELEA DI, RESULTL1: MOV CX,NMOV DX, CXDEC DX ; 第一个数已经取出,故还剩N-1个数需做比较MOV AL, [BX] ; 将 SOURCE 中的第一个数传至AL中L2: INC BXCMP AL, [BX] ; 当前最大值与 BX 所指 SOURCE 数据区中的数JGE L3 ; 若大于或等于,则转移至 L3MOV AL, [BX] ; 否则,用BX 所指向的数改写 AL寄存器的内容L3: DEC DXJNZ L2 ; 若不等于0,转移至L2MOV [DI] ,ALINC DICLDMAX: LODSBNOT ALSTOSBLOOP MAX; *** END ***[INPUT1. DAT 中的输入数据]:50H,61H,72H,83H,94H,2BH,51H,11H,45H,E9H09H,7EH,89H,F6H, 17H,43H,34H,12H,67H,35H3DH,2EH,fAH,44H, 12H,23H, 17H,46H,36H,47H[输出结果]7E AF 9E 8D 7C 6B D4 AE EE BA 16 F6 81 76 09 E8BC CB ED 98 CA C2 D1 A5 BB ED DC E8 B9 C9