阅读新闻

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

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

第四十六题:

一、请编制程序,其功能是:内存中连续存放着两个有符号字节数序列AKBKk=0,,9),求序列CKCK=AKBKCK以有符号字的形式按C0,,C9的顺序连续存放)。

例如:

序列AK     30H,80H-128D,7FH127D)…

序列BK     00H,7FH127D,80H-128D)…

则结果CK   0030H,FF01H,00FFH

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

RESULT   DB       N DUP(0)          ;顺序存放C0,…,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****

        LEA      DI,RESULT            ;结果从RESULT开始存放

        MOV      CX,N

        MOV      BX,0

        MOV      AH,0

PRO:    MOV      AL,SOURCE[BX]        ;序列Ak中的一个字节

        MOV      DH,0

___________________________   ;Ck= Ak-Bk

JNO      STAY                 ;无溢出转STAY

ADD      DH,0                 ;有溢出

________ DEC1                 ;Ak为正数(为一个正数减去一个负数,结果为

;负数的溢出情况)转DEC1

MOV      AH,_______________   ; Ak为负数(为一个负数减去一个正数,结果为

;正数的溢出情况)将结果变为有符号字的形式

;(为负)

JMP      __________________  

DEC1:   MOV      AH,00H               ;将结果变为有符号字的形式(为正)

        JMP      __________________

STAY:   _________                     ;AL中数的符号扩展到AH,正的字节变成正的字,

;负的字节变成的负的字

JUMP1:  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

第四十七题:

一、请编制程序,其功能是:内存中连续存放着两个无符号字节数序列AKBKk=0,,9),求序列CKCK=AK×BKCK以有符号字的形式按C0,,C9的顺序连续存放)。

例如:

序列AK     FFH,80H,7FH,00H

序列BK     FFH,80H,01H,02H

则结果CK   FE01H,4000H,007FH,0000H

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

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****

        ___________,OFFSET RESULT

        MOV      BX,0

        __________________________

PRO:    ___________,SOURCE[BX+N]     

        ___________________________  

MOV      [DI],AX

ADD      DI,2

INC      BX

___________________________

JNZ      PRO

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N*2         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第四十八题:

一、请编制程序,其功能是:内存中连续存放着20个无符号8位二进制数,每个数为摇号机一次摇出的两个号码的压缩BCD码表示。现统计此20次摇号中号码012,…9出现的次数,将结果存入内存。

例如:

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

          62H,44H,73H,57H,39H,81H,36H,92H,21H,05H

结果为    06H,04H,05H,04H,03H,05H,03H,03H,03H,04H

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

RESULT   DB      (N/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*2               ;字节数

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

;****BEGIN****

        LEA      SI,SOURCE           

        MOV      CX,20

        MOV      BX,0

        MOV      AH,0

AGN0:   MOV      AH,[SI]

        ___________________________

AND      AL,0FH

___________________________

PUSH     CX

MOV      CX,4

AGN1:   ________ AH,1

LOOP     AGN1

POP      CX

MOV      BL,AH

___________________________

MOV      BL,AL

___________________________

INC      SI

NEXT:   LOOP     AGN0

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,N*2         ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第四十九题:

一、请编制程序,其功能是:内存中连续存放着20个无符号8位二进制数,每个数为摇号机一次摇出的两个号码的压缩BCD码表示。每个号码为14之间的数。现统计此20次摇号中两号码相加值分别为2345678的次数,将结果存入内存。

例如:

内存中有  12H,32H,31H,11H,22H,24H,41H,44H,11H,14H,

          33H,21H,13H,33H,23H,42H,22H,34H,43H,11H

结果为    03H,02H,04H,04H,04H,02H,01H

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

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

        MOV      CX,20

AGN0:   MOV      _______,0

        MOV      AH,[SI]

        MOV      AL,AH

        AND      AL,0FH

AND      AH,0F0H

PUSH     CX

MOV      CX,4

AGN1:   ________ AH,1

LOOP     AGN1

POP      CX

ADD      AL,_______________

ADD      _________,________

ADC      BH,0

________ BX,2

___________________________

INC      SI

NEXT:   LOOP     AGN0

;****END****

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

        LEA      SI,NAME1       ;结果文件名

        MOV      CX,7           ;字节数

        CALL     SAVE           ;保存结果到文件

        RET

START   ENDP

CODE    ENDS

        END    START

 

 

第五十题:

一、请编制程序,其功能是:内存中连续存放着两个有符号字节数序列AKBKk=0,,9),求序列CKCK=AK+BKCK以有符号字的形式按C0,,C9的顺序连续存放)。

例如:

序列AK     80H-128D,31H+49D,61H+97D,7FH+127D)…

序列BK     80H-128D,01H+1D,F1H-15D,7FH+127D)…

则结果CK   FF00H-256D,0032H+50D,0052H+82D,00FEH+254D)…

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

RESULT   DB       N DUP(0)          ;顺序存放C0,…,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