请编制程序,其功能是:内存中存放着由20个16位有符号整数组成的序列,求出该序列中的最小值和最大值。结果存放形式为,先按原顺序存放20个需处理的有符号整数,后跟该序列中的最小值和最大值(最小值在前,最大值在后)。例如:内存中有:8100H,0002H,0300H…结果为: 8100H,0002H,0300H… (由20个16位有符号整数组成的原序列),结果的后面跟该序列中的最小值和最大值(最小值在前,最大值在后)。部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内

题目

请编制程序,其功能是:内存中存放着由20个16位有符号整数组成的序列,求出该序列中的最小值和最大值。结果存放形式为,先按原顺序存放20个需处理的有符号整数,后跟该序列中的最小值和最大值(最小值在前,最大值在后)。

例如:

内存中有:8100H,0002H,0300H…

结果为: 8100H,0002H,0300H… (由20个16位有符号整数组成的原序列),结果的后面跟该序列中的最小值和最大值(最小值在前,最大值在后)。

部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。

请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。

对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

【试题程序】

XTRN LOAD:FAR,SAVE:FAR

N EQU 20

STAC EGMENT STACK

B 128 DUP(?)

STAC NDS

DATA SEGMENT

SOURCE DW N DUP(?)

RESULT DW (N+2)DUP(0)

NAME0 DB 'INPUT.DAT',0

NAME1 DB 'OUTPUT.DAT',0

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STAC

START PROC FAR

PUSH DS

XOR AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

LEA DX,SOURCE ; 数据区起始地址

LEA SI,NAME0 ; 原始数据文件名

MOV CX,N*2 ; 字节数

CALL LOAD ; 从'INPUT.DAT'中读取数据

; ******** BEGIN ********

LEA SI,SOURCE

LEA DI,RESULT

MOV BX, [SI] ; 第一个整数既为最大值

(1) ; 又为最小值

MOV [DI],BX

ADD SI,2

ADD DI,2

(2)

NEXT: MOV AX,[SI]

CMP AX,BX

JLE (3)

MOV; BX,AX

JMP ENDL

MIN: CMP AX,DX

(4) ENDL

MOV DX, AX

ENDL: MOV [DI], AX

ADD SI,2

ADD DI,2

LOOP NEXT

(5)

ADD DI,2

(6)

; ******** END ********

LEA DX,RESULT ; 结果数据区首址

LEA SI,NAME1 ; 结果文件名

NOV CX,(2+N)*2 ; 结果字节数

CALL SAVE ; 保存结果到文件

RET

START ENDP

CODE ENDS

END START


相似考题

1.编制一个程序,其实现的功能为:求出内存中连续存放的20个无符号数序列的最大值和最小值,并将结果按要求存入。结果的存放形式为:按原序列存放20个需要处理的无符号数,后跟该序列的最小值和最大值(最小值在前,最大值在后)。例如:内存中有:23H,45H,61H……结果为: 23H,45H,61H…… (20个需要处理的原来的无符号数),后面跟该序列的最小值和最大值(最小值在前,最大值在后)。部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。【试题程序】EXTRN LOAD:FAR,SAVE:FARN EQU 20SSEG SEGMENT STACKDB 256 DUP (?)SSEG ENDSDSEG SEGMENTSOURCE DB N DUP (?)RESULT DB N+2 DUP (0)NAME0 DB 'INPUT.DAT',0NAME1 DB '0UTPUT.DAT',0DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXLEA DX, SOURCELEA SI,NAME0MOV CX,NCALL LOAD; ******** BEGIN ********LEA SI,SOURCELEA DI,RESULTMOV DL,[SI]MOV DH,DLMOV [DI],DLINC SIINC DIMOV CX, (1)AGAIN: MOV AL,[SI]CMP (2)JBE MIN(3)JMP NEXTMIN: CMP (4)JAE NEXTMOV DL,ALNEXT: MOV [DI],ALINC SIINC DILOOP AGAINMOV [DI],DLMOV (5); ******** END ********LEA DX,RESULTLEA SI,NAME1MOV CX,N+2CALL SAVERETSTART ENDPCSEG ENDSEND START

参考答案和解析
正确答案:(1) MOV DX[SI] (2) MOV CXN-1 (3) MIN(4) JGE (5) MOV [DI]DX (6) MOV [DI]BX
(1) MOV DX,[SI] (2) MOV CX,N-1 (3) MIN(4) JGE (5) MOV [DI],DX (6) MOV [DI],BX 解析:本题是一道最值计算题。最值计算包括求最大值和最小值两种情况,通常采用的力法是将第一个数假设为最大值和最小值,分别保存到表示最大值和最小值的变量中,再将后续数据分别与最大值数据和最小值数据进行比较,如果发现比最大值更大的数,则用新的数替换原来的最大值,如果发现比最小值更小的数,则用新的数替换最小值,直到处理完最后一个数为止,便可以同时得到最大值和最小值。
更多“请编制程序,其功能是:内存中存放着由20个16位有符号整数组成的序列,求出该序列中的最小值和最大 ”相关问题
  • 第1题:

    请编制程序,其功能是:内存中连续存放着两个无符号字节序列AK和BK((K=0,1,……,9),求序列CK,CK=AK-BK(CK以有符号字的形式按C0,C1……,C9的顺序连续存放)。

    例如:

    序列AK为:30H,FFH,80H,FFH…

    序列BK为:00H,FFH,FFH,OAH…

    结果CK为:0030H,000H,FF81H,FFF5H…

    部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SURCE开始的内存单元中,运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。

    请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。

    对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

    [试题程序]

    EXTRN LOAD:FAR,SAVE:FAR

    N EQU 10

    STAC SEGMENT STACK

    DB 128 DUP(?)

    STAC ENDS

    DATA SEGMENT

    SOURCE DB N*2 DUP(?)

    RESULT DW N DUP(0)

    NAME0 DB 'INPUT1.DAT',0

    NAME1 DB 'OUTPUT1.DAT',0

    DATA ENDS

    CODE SEGMENT

    ASSUME CS:CODE,DS:DATA,SS:STAC

    START PROC FAR

    PUSH DS

    XOR AX,AX

    PUSH AX

    MOV AX,DATA

    MOV DS,AX

    LEA DX,SOURCE ; 数据区起始地址

    LEA SI,NAME0 ; 原始数据文件名

    MOV CX,N*2 ; 字节数

    CALL LOAD ; 从"INPUT1.DAT"中读取数据

    ******** BEGIN ********

    MOV DI,OFFSET RESULT ; 结果从RESULT开始存放

    MOV BX,0

    (1)

    PRO: MOV AH,0

    MOV AL,SOURCE[BX] ; 序列Ak中的一个字节

    SUB AL, (2) ; Ck=Ak-Bk

    (3) JUMP ; 无借位转JUMP

    MOV AH, (4) ; 有借位转换成有符号字(为负)

    JUMP: MOV (5) ,A

    ADD DI,2

    INC BX

    DEC CX

    JNZ PRO

    ; ******** END ********

    LEA DX,RESULT ; 结果数据区首址<


    正确答案:(1) MOV CXN (2) SOURCE[BX+N] (3) JNC (4) OFFH (5) [DI]
    (1) MOV CX,N (2) SOURCE[BX+N] (3) JNC (4) OFFH (5) [DI]

  • 第2题:

    10、下列说法正确的是()。

    A.子串就是子序列。

    B.串中任意个字符组成的序列称为该串的子串。

    C.串中任意个连续字符组成的序列称为该串的子序列。

    D.串中任意个连续字符组成的序列称为该串的子串。


    B

  • 第3题:

    有一个整数数组,其中存放着序列1,3,5,7,9,11,13,15,17,19。请将该序列倒序存放并输出。


    (按点得分,答案仅供参考)

  • 第4题:

    下列程序的功能是:将一正整数序列{K1,K2,…,K9}重新排列成一个新的序列。新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面)。要求编写函数NumSort(int a[10][9])实现此功能,最后调用Wdata函数将新序列输出到文件out.dat中。 说明:在程序中已给出了10个序列,每个序列有9个正整数,并存入数组a[l0][9]中,分别求出这10个新序列。 例:序列{6,8,9,1,2,5,4,7,3} 经重排后成为{3,4,5,2,1,6,8,9,7} 注意:部分源程序已经给出。 请勿改动主函数main和写函数Wdata的内容。


    正确答案:
    【审题关键句】统计一个长度为2的子字符串在另一个字符串中出现的次数。
    【解题思路】
    ①定义字符指针P,q,并且q指向字符串str。定义计数整型变量cnt,设置其值等于0。
    ②在while循环中调用C语言的字符串库函数strstr,返回子字符串substr在字符串q第一次出现的位置,赋给变量P。用if语句判断,如果P的值为空,则说明在字符串str没有找到子字符串,退出循环。否则,变量cnt加l,再把P的值加2(因为子字符串substr的长度为2)赋给变量q,执行下一次循环。直到字符串中不存在子字符串时,退出循环结束。
    ③最后,返回子字符串substr在字符串s仃中出现的次数。
    【参考答案】

  • 第5题:

    已知一棵二叉树的先序序列是A,B,C,D,E,F,G,和整数序列2,0,0,1,0,1,0。其中,整数序列中的第i个数,表示先序序列第i个结点的左子树上结点个数。则该二叉树的后序序列是 。

    A.ABCDEFG

    B.BCAEDGF

    C.CBEGFDA

    D.BCEDAGF


    C