阅读新闻

2007年4月备考三级PC南开100题

[日期:2007-07-22] 来源:  作者: [字体: ]
中域网

2007年4月备考三级PC南开100题

 

第一题

一、请编制程序,其功能是:将内存中由SOURCE指示的40个字节有符号数组成的数组分成正数和负数两个数组,并求这两个数组的数据个数,结果存放在RESULT指示的内存区域,存放形式为正数个数在前,其后跟正数数组元素,然后是负数个数及负数数组元素。

例如:

    内存中有 1EH,91H,74H,91H,42H,30H,81H,F3H,18H,25H

    结果为     06H,1EH,74H,42H,30H,18H,25H,04H,91H,91H,81H,F3H

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

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

    对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。

   

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      40

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

SOURCE   DB       N DUP(0)       

RESULT   DB       N+2 DUP(0)       

NAME0    DB       'INPUT1.DAT',0

NAME1    DB       'OUTPUT1.DAT',0

NDATA    DB       N DUP(0)

PDATA    DB       N DUP(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                 ;从'INPUT1.DAT'中读取数据

;****BEGIN****

        LEA      SI,SOURCE

        MOV      DI,OFFSET PDATA      ;PDATA为正数数组存放缓冲区首址

        MOV      BX,OFFSET NDATA      ;NDATA为负数数组存放缓冲区首址

        XOR      DX,DX

        MOV      CX,N

        CLD

MAIN1:  LODSB

        TEST     AL,_______________

        JZ       MAIN2

        INC      DH                    ;-

        MOV      [BX],AL

        INC      BX

        _______________

MAIN2:  INC      DL

        MOV      [DI],AL               ;+

        INC      DI

MAIN3:  _______  MAIN1

        LEA      SI,PDATA

        LEA      DI,RESULT

        MOV      [DI],DL

        INC      DI

        XOR      CX,CX

        MOV      CL,DL

MAIN4:  MOV      AL,_______________

        MOV      [DI],AL

        INC      DI

        INC      SI

        LOOP     _______________

        MOV      [DI],DH

        INC      DI

        XOR      CX,CX

        MOV      CL,DH

        MOV      BX,OFFSET NDATA

MAIN5:  MOV      AL,[BX]

        MOV      [DI],AL

        INC      DI

        _______________

        LOOP     MAIN5                     

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N+2         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第二题

一、请编制程序,其功能是:内存中连续存放着10个无符号8位格雷码表示的数,现将此十个数转换成十个8位二进制数,结果存入内存,其转换方法为二进制数的最高位D7与格雷码的最高位G7相同,二进制数的其余七位DKk=6,…,0)分别为格雷码的位GKk=6,…,0)与二进制数的位DK+1k=6,…,0)异或的结果。

例如:

    内存中有    00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H

    结果为      00H,02H,32H,45H,08H,19H,67H,03H,90H,85H

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

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

    对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      10

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

SOURCE   DB       N DUP(?)        ;顺序存放10个字节数

RESULT   DB       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                 ;字节数

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

;****BEGIN****

        LEA      SI,SOURCE

        LEA      DI,RESULT

        MOV      CX,10

AGN0:   MOV      AL,[SI]   

        ________________

        MOV      CX,8

        MOV      BX,0

AGN1:   MOV      AH,0

        SHL      BL,1

        ____     AL,1

        RCL      AH,1

        CMP      AH,____

        ________________

        JMP      NEXT

SET_ONE:OR       BL,01H

NEXT:   MOV      ____,BL

        ________________

        LOOP     AGN1

        ________________

        MOV      [DI],BL

        INC      SI

        INC      DI

        LOOP     AGN0

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N           ;结果字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 第三题

一、请编制程序,其功能是:内存中连续存放着20个十六位二进制无符号数序列,请将它们排成升序(从小到大)。

例如:

    内存中有    7001H,7004H,7002H…(假设后17个字均大与7004H)

结果为      7001H,7002H,7004H…(后跟17个字,按从小到大的顺序排列)

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

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

    对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      20

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

SOURCE   DW       N 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****

        LEA      SI,SOURCE

        LEA      DI,RESULT

        MOV      CX,N

NEXT0:  MOV      AX,[SI]   

        MOV      [DI],AX

        ADD      SI,_________

_____________________

        LOOP     ____________

        CLD

        MOV      BX,N-1

MAL1:   LEA      SI,RESULT

        MOV      CX,_________

NEXT:   LOD______

        CMP      [SI],AX

        JAE      CONT

XCHG     [SI],__________

        MOV      [SI-2],AX

CONT:   LOOP     _______________

________________________

        ________ MAL1

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N*2         ;结果字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

第四题

一、请编制程序,其功能是:内存中连续存放着24个无符号二进制字序列,字的最高位为000,此序列对应某一信号在一段时间内的连续变化,现对第21个二进制字前的20个二进制字进行移动平均处理,其方法为:将要处理的字Xi用以它为开始的连续五个字的平均数(Xi+Xi+1Xi+2Xi+3Xi+4)/5代替(余数舍去),得到新的20个无符号二进制字序列,结果存入内存。

例如:

内存中有    0100H,0200H,0300H,0400H,0500H,0600H…

结果为      0300H,0400H…

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

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

    对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      24

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

SOURCE   DW       N DUP(?)        ;顺序存放24个字

RESULT   DW       20 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,0

MOV      SI,0

MOV      CX,20

MOV      BX,__________

AGN0:   MOV      AX,SOURCE[SI]

        PUSH     SI

        PUSH     CX       

MOV      _______ , _______

AGN1:   INC      SI

        INC      SI

ADD      AX,SOURCE[SI]

        LOOP     AGN1

        ______________________

        DIV      BX

        MOV      RESULT[DI],AX

        INC      DI

        ______________________

        POP      CX

        POP      SI

        INC      SI

        ______________________

LOOP     AGN0

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,40          ;结果字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第五题

一、请编制程序,其功能是:内存中从SOURCE开始连续存放着21个八位有符号数(补码),其相邻两数之间差值不超过-87。对这种变化缓慢的数据可采用差分方法进行压缩。即第一个数据不变,其后的数据取与前一数据的差值并用四位二进制补码表示,两个差值拼成一个字节,前一个差值放在高四位,后一个差值放在低四位。

例如:

       原数据(X[n]):23H,27H,2AH,29H,22H

压缩后(Y[n]):23H,       43H,       F9H

编程按上述方法进行压缩,结果保存在RESULT开始的内存单元中。

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

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

    对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。

   

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      10

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

SOURCE   DB       2*N+1 DUP(?)       

RESULT   DB       N+1 DUP(0)       

NAME0    DB       'INPUT1.DAT',0

NAME1    DB       'OUTPUT1.DAT',0

NDATA    DB       N DUP(0)

PDATA    DB       N DUP(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,2*N+1             ;字节数

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

;****BEGIN****

        LEA      SI,SOURCE

        LEA      DI,RESULT

        CLD

        MOVSB                         ;Y[0]=X[0]

        XOR      BX,BX                ;FLAG=0

        MOV      DX,N*2               ;COUNTER

COMPRESS:

  LODSB                         ;X[n]-X[n-1]

        SUB      _______________      ;FLAG=NOT FLAG

        ________________________

J_______ LOW_HEX

        MOV      CL,4

        ________ AL,CL 

        MOV      AH,AL

        JMP      NEXT

LOW_HEX:

_________________________

        OR       AL,AH

        STOSB

NEXT:   _________________________

        JNE      COMPRESS

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N+1         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 



[1] [2] [3] [4] [5] [6] [7] [8] [9..] [13] 下一页   

 

中域网空间50元起,支持手机wap访问,域名1元.www.cnetidc.com 欢迎注册!!
阅读:
录入:

评论 】 【 推荐 】 【 打印
上一篇:2007年4月备考三级PC南开100题
下一篇:
相关新闻      
本文评论       全部评论
发表评论