阅读新闻

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

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

第六十三题:

一、请编制程序,其功能是:内存中连续存放着20ASCII字符,如果是大写字母AZ之间的字符,请把它们转换成相应的小写字母的ASCII字符(否则不作转换)并统计原20ASCII字符中字符“A”的个数。转换结果(包括不作转换的非A~Z之间的原ASCII字符)按序存入内存中,之后存放原20ASCII字符中为字符“A”的个数(用一个字节表示)。

例如:

内存中有     30H’0’,31H’1’,61H’a’,41’A’,42’B’)…

结果为       30H,31H,61H,61H,62H…后跟用一个字节表示的原20ASCII字符中字符“A”的个数。

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

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

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

   

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      20

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

SOURCE   DB       N DUP(?)       

RESULT   DB       N+1 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      DI,OFFSET RESULT

MOV      BX,0

MOV      DL,0

MOV      CX,N

CLD

PRO:    MOV      AL,SOURCE[BX]

CMP      AL,41H

________ KEEP

CMP      AL,_______________

JNBE     KEEP

CMP      AL,42H

JNB      __________________        ;>=42H

INC      DL

NINC:   ADD      AL,_______________

MOV      [DI],AL

INC      DI

JMP      JUMP

KEEP:   MOV      [DI],AL

___________________________

JUMP:   INC      BX

        DEC      CX

JNZ      PRO

___________________________

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N+1         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第六十四题:

一、请编制程序,其功能是:内存中连续存放着10个用ASCII码表示的十进制个位数,将它们转换成相应的二进制无符号字节N0,N1,,N9,并统计N0,N1,N9中大于等于5的十进制数的个数n。转换结果按原序存放,之后存放nn用字节表示)。

例如:

内存中有  30H’0’,39H’9’,31H’1’)…

结果为    00H,09H,01H…(后跟nnN0,N1,,N9中大于等于5的十进制数的个数)

部分程序已给出, 其中原始数据由过程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       N DUP(?)       

RESULT   DB       N+1 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****

        MOV      DI,OFFSET RESULT

MOV      BX,0

        MOV      CX,N

        MOV      DL,_______________

PRO:    MOV      AL,[BX]

SUB      AL,_______________

CMP      AL,05

________ JUMP                  ;小于5

        INC      __________________    ;大于等于5

JUMP:   MOV      [DI],AL

        INC      BX

INC      DI

DEC      CX

JNZ      PRO

___________________________

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N+1         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第六十五题:

一、请编制程序,其功能是:统计30个学生成绩中得在100~9089~8079~7069~60区间以及低于60分的人数,并计算30个学生的平均成绩(取整数),结果依次存入指定的内存区域。

例如:

内存中有10个分数  5EH,50H,64H,52H,55H,48H,3AH,4AH,40H,42H

结果为             02H,03H,02H,02H,01H,4DH(平均成绩)

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

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

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

   

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      30

L        EQU      5

 

DSEG    SEGMENT

SOURCE   DB       N DUP(?)               

RESULT   DB       N+1 DUP(0)         

NAME0    DB       'INPUT1.DAT',0

NAME1    DB       'OUTPUT1.DAT',0

DSEG    ENDS

SSEG    SEGMENT  STACK

         DB       128 DUP(?)

SSEG    ENDS

CSEG    SEGMENT

         ASSUME  CS:CSEG,SS:SSEG,DS:DSEG

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                 ;从'INPUT1.DAT'中读取数据

;****BEGIN****

        LEA      SI,SOURCE

LEA      DI,RESULT

XOR      BX,BX

________________________

MOV      CX,N

GOON:   LODSB

________________________

ADD      BX,AX

________________________

JAE      A1

CMP      AL,80

JAE      A2

CMP      AL,70

JAE      A3

CMP      AL,60

JAE      A4

INC      ________________

_________________________

A4:     INC      BYTE PTR [DI+3]

        JMP      NEXT

A3:     INC      BYTE PTR [DI+2]

JMP      NEXT

A2:     INC      BYTE PTR [DI+1]

JMP      NEXT

A1:     INC      BYTE PTR [DI]

NEXT:   LOOP     GOON

MOV      AX,_____________

MOV      DL,_____________

DIV      DL

MOV      [DI+5],AL

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,L+1         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CSEG    ENDS

        END    START

 

 

第六十六题:

一、请编制程序,其功能是:剔除108位无符号二进制数据中的最大值和最小值,然后按四舍五入原则计算其余8个数据的算术平均值。将晚剔除最大值和最小值之后的8个数据依次存入指定的内存区域中,并在其后存放平均值。

例如:

内存中有  1,5,4,0,7,9,2,6,8,3

结果为    1,5,4,7,2,6,8,3,5

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

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

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

   

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      10

DSEG    SEGMENT

SOURCE   DB       N DUP(?)       

RESULT   DB       N-1 DUP(0)       

NAME0    DB       'INPUT1.DAT',0

NAME1    DB       'OUTPUT1.DAT',0

TEMP     DW       0

DSEG    ENDS

SSEG    SEGMENT  STACK

         DB       200 DUP(?)

SSEG    ENDS

CSEG    SEGMENT

         ASSUME  CS:CSEG,SS:SSEG,DS:DSEG,ES:DSEG

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                 ;从'INPUT1.DAT'中读取数据

;****BEGIN****

        XOR      AX,AX

XOR      BX,BX

XOR      DX,DX

MOV      SI,OFFSET SOURCE

MOV      BL,________________   ;取第一个数作为最大值暂存BL

MOV      DL,________________   ;取第一个数作为最小值暂存DL

MOV      CX,N

GOON:   ADD      AL,[SI]

        ADC      AL,0

CMP      BL,[SI]

JA       ___________________

MOV      BL,[SI]

CONT:   CMP      DL,[SI]

        ____________________________

MOV      DL,[SI]

NEXT:   INC      SI

        LOOP     GOON

CLD

LEA      SI,SOURCE

LEA      DI,RESULT

MOV      CX,N

LP2:    LODSB

        CMP      AL,BL

        JE       LP1

CMP      AL,DL

JE       LP1

CBW

ADD      TEMP,AX

STOSB

LP1:    LOOP     LP2

        MOV      AX,TEMP

MOV      DL,_______________

DIV      DL

ADD      AH,AH

CMP      AH,DL

JB       OFF

___________________________

OFF:    MOV      [DI],AL

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N-1         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CSEG    ENDS

        END    START

 

 

第六十七题:

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

例如:

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

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

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

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

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

   

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      20

STAC