阅读新闻

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

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

第六十九题:

一、请编制程序,其功能是:内存中连续存放着两个由8位有符号整数组成的序列AiBii=09),Ai在前,Bi在后。求CiCi=|Ai+Bi|。结果Ci用字单元按C0,,C9的顺序存放。

例如:

序列Ai为:     98H,53H,39H

序列Bi为:     80H,67H,94H

序列Ci为:     00E8H,00BAH,0033H

    部分程序已给出, 其中原始数据由过程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*2 DUP(?)          ;顺序存放A0,L,A9,B0,L,B9 

RESULT   DW       N DUP(0)            ;顺序存放C0,L,C9

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

        MOV      CX,_______________

PRO:    MOV      AH,0

        MOV      AL,_______________   ;序列Bi中的一个整数

        MOV      DL,AL                ;暂存Bi

        ADD      AL,_______________   ;Ci=Bi+Ai

        JNO      STAY                 ;无溢出转STAY

JUMP1:  MOV      AH,00                ;有溢出

        ADD      DL,0

        JNS      JUMP                 ;Bi是正数(为一个正数加上一个正数,结果为

;负数的溢出情况)转JUMP(AH已为00H)

        MOV      AH,_______________   ;Bi是负数(为一个负数加上一个负数,结果为

;正数的溢出情况)将结果变为负数

        JMP      __________________

STAY:   ___________________________   ;AL中数的符号扩展到AH

JUMP:   AND      AX,AX

        ________ PLP

        NEG      AX

PLP:    MOV      [DI],AX

        ADD      DI,2

        INC      BX

        DEC      CX

        JNZ      PRO

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N*2         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第七十题:

一、请编制程序,其功能是:从00列开始,依次取出N阶矩阵中对角线上的元素(字节型)并计算累加和(字型),然后将其存放在指定的内存区中。

例如:

内存中有  1,1,1(第一行),2,2,2(第二行),3,3,3(第三行)

结果为    01H,02H,03H,06H,00H

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

RESULT   DB       (N+2) DUP(0)       

NAME0    DB       'INPUT1.DAT',0

NAME1    DB       'OUTPUT1.DAT',0

DSEG    ENDS

SSEG    SEGMENT  STACK

         DB       256 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*10              ;字节数

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

;****BEGIN****

        LEA      DI,RESULT

MOV      CX,0

MOV      DH,0                 ;行

MOV      DL,0                 ;列

NEXT:   MOV      AL,N

        MUL      ___________________

MOV      BX,AX

MOV      AL,DL

____________________________

MOV      SI,AX                ;列号送SI

MOV      AL,________[BX+SI]

MOV      [DI],AL

ADD      CL,AL

____________________________

INC      DI

INC      DH

INC      DL

CMP      DL,________________

JNE      NEXT

MOV      [DI],CX

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N+2         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CSEG    ENDS

        END    START

 

第七十一题:

一、请编制程序,其功能是:内存中连续存放着由串行通讯接收到的10个字节数,根据通讯协议,前九个数应为ASCII字符(8位二进制数表示,最高位为零)的偶校验码,最后一个数为前九个偶校验码的累加码(累加值的低8位二进制数),现依次判别接收的前九个字节数是否为偶校验码,若是,则将其转换为ASCII字符,否则以07H代替。然后计算接收的前九个字节数的累加码,并与接收到的累加码比较,若相等则在紧跟九个转换结果后的一个内存单元中置06H,否则置07H。

例如:

    内存中有    B7H,38H,39H…

结果为      37H,07H,39H…后跟06H或07H。

部分程序已给出, 其中原始数据由过程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(?)        ;顺序存放9个ASCII字符

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      SI,OFFSET SOURCE

MOV      DI,OFFSET RESULT

        MOV      DX,N-1

        MOV      AL,0

PRO:    MOV      BL,[SI]

        ________ AX

MOV      CX,8

MOV      AL,0

LP1:    ROR      BL,1

ADC      AL,0

LOOP     LP1

AND      AL,01H

________ GOOD0

MOV      BL,07H

JMP      STORE0

GOOD0:  AND      ________,________

STORE0: MOV      [DI],BL

        ________ AX

        ADD      AL,[SI]

        INC      DI

        INC      SI

DEC      DX

JNZ      LP0

__________________________

JZ       GOOD1

MOV      AL,07H

JMP      STORE1

GOOD1:  MOV      AL,06H

STORE1: MOV      [DI],AL

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N           ;结果字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第七十二题:

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

例如:

    内存中有    00H,02H,32H,45H,08H,19H,67H,03H,90H,85H

    结果为      00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H

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

        LEA      SI,SOURCE

LEA      DI,RESULT

        MOV      CX,10

AGN0:   MOV      AL,[SI]

______________________

MOV      CX,8

MOV      BX,0

AGN1:   MOV      AH,0

________ BL,1

ROL      AL,1

_________________________

CMP      AH,BH

________ SET_ONE

JMP      NEXT

SET_ONE:OR       BL,01H

NEXT:   MOV      _________,AH

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

 

 

第六十三题:

一、请编制程序,其功能是:内存中连续存放着5个递增的无符号8位二进制数,此5个数分别对应于某非线性温度传感器在温度0℃、3℃、6℃、9℃和12℃时的输出值Yn(n=0、3、6、9、12),现采用分段线性插值法求出传感器在温度1℃、2℃、4℃、5℃、7℃、8℃、10℃和11℃时的近似输出值Yk(k=1、2、4、5、7、8、10、11),Yk取整数,其公式为Yk=[(Yn+3-Yn)/3]*(k-n)+Yn,其中k=n+1、n+2,n=0、3、6、9,将结果存入内存。

例如:

    内存中有    01H,0AH,19H,31H,5EH

结果为      04H,07H,0FH,14H,21H,29H,40H,4FH

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

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

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

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      5

STAC    SEGMENT  STACK

         DB       128 DUP(?)

STAC    ENDS

DATA    SEGMENT

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

RESULT   DB       5 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,4

        __________________________

AGN0:   MOV      BL,[SI]   

        INC      SI

        MOV      AL,[SI]

SUB      AL,BL

__________________________

MOV      BH,1

AGN1:   MUL      _________________

        DIV      DL

ADD      ___________,BL

MOV      [DI],AL

INC      DI

__________________________

INC      BH

CMP      BH,______________

JNA      AGN1

LOOP     AGN0

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,8           ;结果字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第七十四题:

一、请编制程序,其功能是:以SOURCE开始的内存区域存放着N个字节的有符号数。现找出最大的数,结果存放到RESULT指示的单元,其后存放原N个数逻辑取反后的值。

内存中有  09H,7EH,89H,F3H,17H,,67HN个数据)

结果为    7EH(最大数),F6H,81H,76H,0CH,E8H,,98H(原来N个数的逻辑反)

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

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

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

   

    试题程序:

 

         EXTRN    LOAD:FAR,SAVE:FAR

N        EQU      19

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

        MOV