阅读新闻

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

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

第六题

一、请编制程序,其功能是:将内存中存放着20个数字0~9之间的ASCII字符(包括数字09ASCII字符)或SP字符(20H),请将数字0~9之间的ASCII字符(包括数字09ASCII字符)转换为相应的八位二进制数,并将SP字符转换为 $ 字符(24H)。将按上述方法处理后得到的20个字节存入内存中。

例如:

内存中有 20H’SP’,30H’0’,31H’1’,31H’1’,20H’SP’,32H’2’,,39H’9’)(共20ASCII字符)

结果为     24H’$’,00H,01H,01H,01H,24H’$’,02H’2’,,09H’9’)(共20个字节)

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

      ________________________

CHAN:   ________________________

        SUB      AL,20H

JZ       CHANGE

        SUB      AL,____________

        MOV      RESULT[DI],AL 

        ________________________

        ________________________

        DEC      CX

        JZ       EXIT

        JMP      CHAN

CHANGE: MOV      RESULT[DI],24H

        INC      DI

        INC      SI

        JMP      _______________

EXIT  : NOP                  

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N           ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

第七题

一、请编制程序,其功能是:内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。欲寻找ASCII字符串由13个字符组成:#23H),7ASCII字符,*2AH),2ASCII字符,回车符(0DH),换行符(0AH)。

    校验方法为:对字符#及字符*之间的7ASCII字符进行异或操作,若异或操作结果的ASCCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符*之后的两个ASCII字符相同,则将原字符串原样保存;反之,则将原字符串中的所有字符(共13个)均用字符!(21H)代替。

例如:

内存中有 33H,35H,23H’#’,第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH’*’,32H,31H,0DH,0AH,46H,23H’#’,第二个字符串开始),46H,41H,30H,2EH,34H,3DH,30H,2AH’*’,32H,31H,0DH,0AH,55H

结果为   23H,46H,41H,30H,2EH,34H,3DH,31H,2AH’*’,32H,31H(校验正确,该字符串原样保持),0DH,0AH,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符’!’代替)。

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

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

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

   

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      26

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

SOURCE   DB       N+4 DUP(?)       

RESULT   DB       N DUP(0)

HH       DB       2 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+4               ;字节数

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

;****BEGIN****

        MOV      SI,0

        MOV      DI,0

        MOV      BX,2                 ;两个ASCII字符串

REPEAT: MOV      AH,0

SEARCH: MOV      AL,SOURCE[SI]

INC      SI

CMP      AL,’#’

________ SEARCH

MOV      RESULT[DI],AL

INC      DI

SEARCH1:MOV      AL,SOURCE[SI]

        INC      SI

        CMP      AL,____________

        JE       ASCII

        MOV      RESULT[DI],AL

        INC      DI

        XOR      AH,AL

        JMP      _______________

ASCII:  MOV      RESULT[DI],AL

INC      DI

PUSH     DI

MOV      DI,0

MOV      DH,2

MOV      DL,AH        ;异或结果暂存在DL中

MOV      CL,4         ;先将异或结果高4位转换成ASCII字符

SHR      AH,CL        ;本行开始的4行语句将一个十六进制数转换为ASCII码

CHANGE: CMP      AH,10

JL       ADD_0

ADD      AH,’A’-’0’-10

ADD_0:  ADD      AH,’0’

MOV      HH[DI],AH

INC      DI

DEC      DH

JZ       EXT

MOV      AH,DL        ;再将异或结果低4位转换成ASCII字符

AND      AH,0FH

JMP      CHANGE

EXT:    POP      DI

MOV      AL,SOURCE[SI]

MOV      RESULT[DI],AL

INC      SI

INC      DI

MOV      AH,SOURCE[SI]

MOV      RESULT[DI],AH

INC      SI

INC      DI

MOV      DL,HH

MOV      DH,HH+1

CMP      AX,DX

________ ERR

MOV      AL,0DH           ;校验正确

MOV      RESULT[DI],AL

INC      DI

MOV      AL,0AH

MOV      RESULT[DI],AL

INC      DI

JMP      LP

ERR:    SUB      DI,11            ;校验错误

MOV      AL,’!’

MOV      CX,____________

COVER:  MOV      RESULT[DI],AL

INC      DI

LOOP     COVER

LP:     ________________________

JZ       EXIT

JMP      REPEAT

EXIT:   NOP

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N           ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

第八题

一、请编制程序,其功能是:内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,…,9。统计每个数中位为0的个数N0,N1,…,N9(均用一个字节表示),然后按序定义将N0至N9存入内存中,最后再用一个字节这10个数中为0的位的总数n(n=N0+N1+…+N9)。

例如:

    内存中有    0000H,000FH,FFFFH…

    结果为      10H,0CH,00H…最后为n

    部分程序已给出, 其中原始数据由过程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+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*2               ;字节数

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

;****BEGIN****

        MOV      DI,OFFSET RESULT

        MOV      CL,N

        MOV      BX,0

        MOV      DH,0

PRO:    MOV      DL,0

        MOV      AX,SOURCE[BX]

        MOV      CH,_____________

COUNT:  _________________________

________ JUMP

INC      DL

JUMP:   DEC      CH

JNZ      ________________

MOV      [DI],DL

ADD      DH,DL

INC      DI

ADD      _________________

DEC      CL

JNZ      PRO

MOV      ________________

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N           ;结果字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

第九题

一、请编制程序,其功能是:内存中有一个由16个十六位二进制数组成的数组(SOURCE)和一个字变量L。试将L作为逻辑尺对数组SOURCE进行下列处理:如L的第i位为0,则数组的第i个数不变;如L的第i位为1,则数组的第i个数按位取反。字L的位序从低到高依次为0至15,数组下标依次从0到15。

例如:L=0009H,数组为  139CH,89C6H,5437H,8819H…

               变换为  EC63H,89C6H,5437H,77E6H…

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

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

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

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      16

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

L        DW       ?

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,L                 ;数据区起始地址

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

        MOV      CX,2*(N+1)           ;字节数

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

;****BEGIN****

        LEA      SI,SOURCE

        __________________            

        MOV      CX,N

        MOV      DX,_________

L0:     MOV      AX,[SI]   

        ________ L,DX

        ________ STORE

        NOT      AX

STORE:  MOV      [DI],AX

        ADD      DI,2

        ADD      SI,2

        _____________________

        LOOP     L0

;****END****

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

        LEA      SI,NAME1       ;结果文件名

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

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 第十题

一、请编制程序,其功能是:计算10个有符号字节数据的绝对值之和(字型),并找出绝对值最大的数及其所在的偏移地址,最后将它们依次存入指定的内存中,结果以FFH结束。

例如:

    内存中有 10H,01H,27H,00H,FEH,80H,00H,03H,FFH,01H

    结果为     BFH,00H,80H,05H,00H,FFH

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

MAX      DB       ?       

NAME0    DB       'INPUT1.DAT',0

NAME1    DB       'OUTPUT1.DAT',0

DSEG