三级PC技术上机真题汇集.docx

上传人:b****8 文档编号:9985906 上传时间:2023-02-07 格式:DOCX 页数:24 大小:34.28KB
下载 相关 举报
三级PC技术上机真题汇集.docx_第1页
第1页 / 共24页
三级PC技术上机真题汇集.docx_第2页
第2页 / 共24页
三级PC技术上机真题汇集.docx_第3页
第3页 / 共24页
三级PC技术上机真题汇集.docx_第4页
第4页 / 共24页
三级PC技术上机真题汇集.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

三级PC技术上机真题汇集.docx

《三级PC技术上机真题汇集.docx》由会员分享,可在线阅读,更多相关《三级PC技术上机真题汇集.docx(24页珍藏版)》请在冰豆网上搜索。

三级PC技术上机真题汇集.docx

三级PC技术上机真题汇集

计算机三级PC技术(机试)

1.

  请编制程序,其功能是:

对一个由可打印ASCII字符(ASCII值为20H~7FH)组成的字符串可采用下列方法进行压缩:

从串首开始向后扫描,如某字符单独出现则该字符不变,如某字符连续出现n次,则该字符用ESC(1BH),n,<原字符>三个字节来代替(假定n不超过255)。

  设内存中从SOURCE开始有一用上述方法压缩的字符串,其以OOH结束,解压后长度不超过100。

试编程对其解压缩,结果存入RESULT开始的内存单元。

  例如:

  原串:

  41H,1BH,06H,43H,61H,00H

  解压缩后:

41H,43H,43H,43H,43H,43H,43H,61H,OOH("ACCCCCCa")

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

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

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

调试中若发现整个程序中存在错误之处,请加以修改。

  【试题程序】

          EXTRN    LOAD:

FAR,SAVE:

FAR

    N      EQU      100

    ESC_CODE  EQU      27

    STAC    SEGMENT    STACK

          DB      128DUP(?

    STAC    ENDS      

    DATA    SEGMENT    

    SOURCE    DB      N  DUP(?

    RESULT    DB      N  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

          MOV      ES,AX                ;置附加段寄存器

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

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

          MOV      CX,N                ;字节

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

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

          LEA      SI,SOURCE

          LEA      DI,RESULT

          CLD

    LO:

      LODSB

          CMP      AL,0

          JE        QUIT

          CMP      AL,ESC_CODE

          J

(1)      EXPAND

          

(2)

          JMP      L0

    EXPAND:

    (3)                      ;解压缩

          XOR      CX,CX

          (4)  

          (5)  

          (6)  

          (7)  

          JMP      LO

    QUIT:

          STOSB                        ;STORE  THE  '00H'

    ********  END  ********

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

          LEA      SI,NAME1            ;结果文件名起始地址

          MOV      CX,N                ;字节数

          CALL      SAVE                ;保存结果到"output.dat"文件

          RET

    START    ENDP

    CODE    ENDS

          END      START_____

                                                                        [+] [-] [=]

[参考答案] (1分)  

(1)E  

(2)STOSB  (3)CID  (4)MOVCL,[SI]

  (5)MOVAL,[SI+1]  (6)REPSTOSB  (7)ADDSI,2

[您的答案]

[详细解答]  本题是一道数据插入题,其中本题采用的算法是首先从原始数据区读取一个字节,判断是否为结束标志,若是结束标志,则直接送至结果数据区并结束处理,若不是结束标志则再次判断是否是压缩标志,是则读取下一个字节,然后将其值送CL,再读取下一个字节到AL,以CL为计数器重复将刚才读取的数据写入结果数据区,然后继续读取下一个数据开始进行判断,直到发现结束标志为止。

反之则直接将该字符送到结果数据区。

  程序中使用串处理指令LODSB来完成读取数据和修改原始数据区偏移地址的目的:

使用串处理指令STOSB来完成写入数据和修改结果数据区偏移地址的目的;使用CL做计数器和指令REP完成循环处理

 

题 1

.

  编制一个程序,其实现的功能是:

对一个数字采集系统采集的50个字节无符号数按算术平均数字滤波方法进行数字滤波,每5个数求一个平均数(含余数,其中低字节为商,高字节为余数),将10个平均值依次存入RESULT指示的内存区域。

  例如:

  原始采集数据:

05H,07H,12H,08H,10H,09H,2EH,56H,48H,85H,65H,36H,45H……

  则结果为:

  0A04H,4003H……

  部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。

运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。

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

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

调试中若发现整个程序中存在错误之处,请加以修改。

  【试题程序】

        EXTRN    LOAD:

FAR,SAVE:

FAR

  N      EQU      10

  DSEG    SEGMENT      

  SOURCE  DB      6*N  DUP(?

  RESULT  DW      N  DUP(0)

  NAME0    DB      'INPUT.DAT',0

  NAME1    DB      'OUTPUT.DAT',0

  DSEG    ENDS      

  SSEG    SEGMENT    STACK

        DB      256DUP(?

  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

        LEA      DX,SOURCE

        LEA      SI,NAME0

        MOV      CX,6*N

        CALL      LOAD

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

        LEA      SI,SOURCE

        LEA      DI,RESULT

        MOV      DX,N

  AGAIN:

  SUB      AX,AX

          

(1)

        MOV      CX,6

  AGAIN1:

  MOV      AX,[SI]

        ADD      BX,AL

        INC      SI

          

(2)

          (3)

        MOV      CL,6

          (4)

          (5)

        ADD      DI,2

        DEC      DX

        JNZ      AGAIN

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

  LEA    DX,RESULT  

        LEA      SI,NAME1

        MOV      CX,N*2

        CALL      SAVE

        RET

  START    ENDP

  CSEG    ENDS

        END      START_____

                                                                        [+] [-] [=]

[参考答案] (1分)  

(1)SUBBX,BX或XORBX,BX或MOVBX,0  

(2)LOOPAGAIN1

  (3)MOVAX,BX  (4)DIVCL  (5)MOV[DI],AX

[您的答案]

[详细解答]  如果将数据中6个数分为一组的话,则对每一组的操作是一样的,即求这一组数的平均数,因此只需要实现一组的操作,其他的用循环程序来实现。

  将指针初始化以后,将循环的参数送DX寄存器,用来控制循环。

进入循环以后,因为每次循环都要使用某些寄存器,并且每次的内容都不一样,所以要对部分寄存器进行清零操作。

从后面的程序可以看出,BX寄存器是用来进行求和操作的,所以在每次进行求和操作之前应该对其进行清零操作,否则会把前一次的结果累加到后一次中。

因此,需要对BX寄存器进行清零,这就是第一个空白处应该填的内容。

通常进行清零的操作有SUBBX,BX或XORBX,BX或MOVBX,0。

  完成清零工作以后,便对数据进行处理。

要求一组数据的平均数,首先要进行求和操作,从程序中可以看出求和操作用循环AGAIN1来实现,然而程序中没有控制AGAIN1循环结束的语句(即判断什么情况继续循环,什么情况停止循环向下执行的语句),所以需要在空白处填写。

从第二个空白以上的程序来看,已经完成了加法运算,只需要控制其循环结束即可,所以要在第二个空白处填控制循环语句。

在前面的程序中,已经将循环次数送到CX中,因此用LOOPAGAIN1即可控制求和运算的循环。

  求和结束以后,就要对数据进行除法操作。

由于程序中除数为6,所以被除数放到AX中即可。

前面的求和操作结束时,所得结果最后存放的寄存器为BX,因此需要将数据从BX传送到AX中。

传送结束以后,就可以进行除法操作。

除完以后,将结果存入RESULT中,所以第三个、第四个和第五个空加上已经有的语句需要完成上述操作。

在第三个空中,将被除数传送到BX,因此指令为MOVAX,BX。

MOVCL,6,将除数传送到CL寄存器中,接下来进行除法操作,即第四个空要填写的内容为DIVCL。

执行完除法操作以后,商和余数分别位于AL和AH寄存器中,与题目要求的商在低字节,余数在高字节的要求刚好吻合,因此直接送入RESULT中即可,这样便由最后一个空来实现,而指针DI已经指向RESULT,所以应填MOV[DI],AX。

 

题 1

.

  编制一个程序,实现如下功能:

将内存中连续存放的10个八位二进制无符号数按照从大到小的顺序排列。

  例如:

  内存中有:

3EH,0FEH,5DH……(假设后面的7个数都小于3EH)

  结果为:

  0FEH,5DH,3EH……(后面跟7个字,按照从大到小的顺序排列)。

  部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。

运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。

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

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

调试中若发现整个程序中存在错误之处,请加以修改。

  【试题程序】

        EXTRN    LOAD:

FAR,SAVE:

FAR

  N      EQU      10

  SSEG    SEGMENT    STACK

        DB      256  DUP(?

  SSEG    ENDS

  DSEG    SEGMENT

  SOURCE  DB      NDUP  (?

  RESULT  DB      NDUP  (0)

  NAME0    DB      'INPUT.DAT',0

  NAME1    DB      'OUTPUT.DAT',0

  DSEG    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

        LEA      DX,SOURCE

        LEA      SI,NAME0

        MOV      CX,N

        CALL      LOAD

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

        MOV      SI,OFFSET  SOURCE

        MOV      DI,OFFSETRESULT

        MOV      CX,N

  AGAIN0:

  MOV      AX,[SI]

        MOV      [DI],AX

        ADD      SI,

(1)

          

(2)

        LOOP      AGAIN0

        CLD

        MOV      BX,N-1

  AGAIN1:

  MOV      SI,OFFSETRESULT

        MOV      CX,BX

  AGAIN2:

  LODSB

        CMP      [SI],AX

          (3)

        XCHG      [SI],AX

          (4)

  NEXT:

    LOOP      AGAIN2

          (5)

        JNZ      AGAIN1

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

        LEA    DX,RESULT

        LEA    SI,NAME1

        MOV    CX,N

        CALL    SAVE

        RET

  START    ENDP

  CSEG    ENDS

        END    START_____

                                                                        [+] [-] [=]

[参考答案] (1分)  

(1)1  

(2)ADDDI,1  (3)JBENEXT

  (4)MOV[SI-1],AX  (5)DECBX

[您的答案]

[详细解答]  本题是一道降序排列题,程序首先是将以SOURCE开始的内存单元中的数据传送到RESULT中,利用循环AGAIN0实现。

在循环中,需要不断地改变指针,但由于题中的变量为字节型,因此指针的改变为1,即第一个空白处应填1。

指向SOURCE的指针增加1的时候,指向RESULT的指针也应该增加1,所以第二个空白处应填ADDDI,1。

  接下来的程序便是对数据进行从大到小排列,CLD使指针向着增加的方向移动。

在对两个数据进行比较后,因为要求从大到小排列,所以小的数据要往后移,若后面的数据较小,则不需要交换,直接进行下一次比较,所以第三个空白处应填JBENEXT。

若后面的数据大,则在进行数据交换以后需要将大的数据装入前面的存储单元,因此第四个空白处应填MOV[SI-1],AX。

每一轮比较后,参加比较的数据的较小者都被放到了最后,这样只需要N-1轮比较就可以得到正确的排序。

排序轮次的控制由BX寄存器来实现,因此最后一个空白处应填DECBX。

 

题 1

.

  请编制程序,其功能是;内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。

欲寻找的ASCII字符串由13个字符组成:

#(23H),7个ASCII字符,*(2AH),2个ASCII字符,回车符(0DH),换行符(0AH)。

  校验方法为:

对字符#及字符,之间的7个ASCII字符进行异或操作,若异或操作结果的ASCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符,之后的两个ASCII字符相同,则将原字符串原样保存:

反之,则将原字符串中的所有字符(共13个)均用字符!

(21H)代替。

  例如:

  内存中有:

33H,35H,23H('#',第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH('#'),32H,

  31H,ODH,OAH,46H,23H('#',第二个字符串开始),46H,41H,30H,2EH,34H,46H,41H,

  30H,46H,41H,30H,2EH,34H,3DH,30H,2AH('*'),32H,31H,ODH,OAH,55H

  结果为:

23H,46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,31H(校验正确,该字符串原样保持),

  ODH,OAH,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符“!

”代替)

  部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中。

运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。

  请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1