计算机等级考试三级PC上级题精选11-20
添加时间: 2007-5-25 6:32:15 作者: 计算机等级考试认证参考 阅读次数:41 来源: http://www.d9soft.com
PC上机题之11
以下内容为程序代码:
请编制程序PROG1.ASM,其功能是:内存中连续存放着二十个ASCII字符,如果是0~9或A~F之间的字符,请把它们转换成二进制
数;若为其他字符,不作转换。
例如:
内存中有30H(’0’),31H(’1’), 61H(’a’),41H(’A’),42H(’B’), ...结果为 00H,01H,61H,0AH,0BH ...部分程序已给出, 其中原始数据由过程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 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 ; 从 ’INPUT.DAT’中读取数据
**** BEGIN ****
LEA SI,SOURCE
mov di,offset result
;____ DI,OFFSET RESULT
mov cx,N
;__________________
NEXT: MOV AL,[SI]
CMP AL,’0’
JB INVALID
cmp al,’9’
jbe strip
;CMP AL,____
;JBE ____
CMP AL,’A’
JB INVALID
cmp al,’F’
ja invalid
;CMP AL, ____
;JA ____
ADD AL,9
STRIP: AND AL,0FH
INVALID: MOV [DI],AL
ADD SI,1
ADD DI,1
loop next
;LOOP ____
**** END ****
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
MOV CX,N ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 内容如下:
33 34 23 45 75 98 46 87 41 AC 30 63 66 61 76 39 88 77 24 DE
output1.dat 内容应当如下:
03 04 23 0E 75 98 0F 87 0A AC 00 63 66 61 76 09 88 77 24 DE
上机题之12
以下内容为程序代码:
请编制程序PROG1.ASM, 其功能是: 计算3×10矩阵中每一列元素(八位二进制数)之和, 并将其结果存放在指定的内存区中。
例如:
内存中有 0,0,0,0,0,0,0,0,0,0(第1行),1,1,1,1,1,1,1,1,1,1(第2行),9,9,9,9,9,9,9,9,9,9(第3行)结果为 000AH,000AH,...,000AH部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中, 转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已经给出的一段源程序使其完整,填空处已经用横线标出, 每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数), 考生也可以填入功能相当的多条指令, 或删去BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 30
DSEG SEGMENT
SOURCE DB N DUP(?)
SRC DW SOURCE
RESULT DW N/3 DUP(0)
I EQU 3
J EQU 10
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
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
*** BEGIN ***
LEA SI,SOURCE
LEA DI,RESULT
MOV BX,1
LPJ: MOV DX,0
MOV CX,1
LPI: MOV AL,[SI]
mov ah,0
;_______________
ADD DX,AX
add si,10
;ADD SI,__
INC CX
CMP CX,I
JBE LPI
MOV [DI],DX
add di,2
;ADD DI,____
INC SRC
MOV SI,SRC
inc bx
cmp bx,J
;_______________
;CMP BX,____
JBE LPJ
*** END ***
LEA DX,RESULT
LEA SI,NAME1
MOV CX,N*2/3
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
input1.dat 内容如下:
010101010101010101010202020202020202020204040404040404040404
output1.dat 内容应当如下:
07 00 07 00 07 00 07 00 07 00 07 00 07 00 07 00 07 00 07 00
上机题之13
以下内容为程序代码:
请编制程序PROG1.ASM, 其功能是: 内存中连续存放着二十个无符号字节数序列,求出该序列的最大值和最小值。 结果存放形
式为:先按原序存放二十个需处理的无符号字节序列,后跟该序列的最大值和最小值(最大值在前,最小值在后)。
例如:
内存中有 01H,02H,03H, ...结果为 01H,02H,03H, ... (共二十个需处理的原无符号字节序列),后跟该序列的最大值和最小值 (最大值在前,最小值在后)。
部分程序已给出,其中原始数据由过程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 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 ; 从 ’’INPUT’’中读取数据
**** BEGIN ****
最大值放在BH中,最小值放在BL中
LEA SI,SOURCE
lea di,result
;LEA ____,RESULT
MOV BH,[SI] ; 第一个字节既为最大值
MOV BL,BH ; 又为最小值
MOV [DI],BH
add si,1
add di,1 ; 或 inc di
;ADD SI, ____
;__________________
MOV CX,N-1
NEXT: MOV AL,[SI]
CMP AL,BH
jb chkmin
;____ CHKMIN
MOV BH,AL
JMP ENDL
CHKMIN: CMP AL,BL
JAE ENDL
mov bl,al
;MOV ____,AL
ENDL: MOV [DI],AL
ADD SI,1
ADD DI,1
LOOP NEXT
mov [di],bh
mov [di+1],bl
;MOV [DI],____
;______________
**** END ****
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
MOV CX,2+N ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 内容如下:
71 A2 34 3F 39 FC 48 43 44 45 39 32 38 41 48 37 36 35 38 87
output1.dat 内容应当如下:
71 A2 34 3F 39 FC 48 43 44 45 39 32 38 41 48 37 36 35 38 87 FC 32
上机题之14
以下内容为程序代码:
请编制程序PROG1.ASM, 其功能是: 对一个由可打印ASCII字符(ASCII码20H~7FH)组成的字符串可采用下列方法进行压缩:从串首开始向后扫描, 如某字符单独出现则该字符不变, 如某字符连续出现n次, 则该字符用ESC(1BH),n,<原字符>三个字节来代替(假定n不超过255)。例如:
原串 : 41H,43H,43H,43H,43H,43H,43H,61H,00H ("ACCCCCCa")压缩后: 41H,1BH,06H,43H,61H,00H设内存中从SOURCE开始有一字符串, 其以00H结束, 长度不超过100。试编程对其进行压缩, 结果存入RESULT开始的内存单元。
部分程序已在PROG1.ASM中给出, 请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出, 每行空白一般只需一条指令, 但功能相当的多条指令亦可)或删除BEGIN和END之间原有的代码并自行编写程序片段来完成要求的功能。
原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中, 结果要求从RESULT开始存放, 由过程SAVE保存到文件OUTPUT1.DAT中。
对程序必须进行汇编, 并与IO.OBJ链接产生PROG1.EXE 执行文件, 最终运行程序产生结果(无结果或结果不正确者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 100
ESC_CODE EQU 27
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
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
MOV ES,AX ; 置附加段寄存器
LEA DX,SOURCE ; 数据区起始地址
LEA SI,NAME0 ; 原始数据文件名
MOV CX,N ; 字节数
CALL LOAD ; 从 "input1.dat"中读取数据
**** BEGIN ****
LEA SI,RESULT
LEA DI,SOURCE
CLD
INC DI
L0: mov al,[di-1]
;____________________
CMP AL,0
JE QUIT
MOV CX,0FFFFH ; SET THE COUNTER TO 0FFFFH
rep scasb
;____________________ ; 字符串重复搜索, CX=0FFFFH-n
32 31 41 34 38 35 42 33 36 34 37 34 39 38 33 32 43 31 36 32
上一篇文章: 2004年NCRE答疑集锦-关于考试 下一篇文章: C语言教程连载--第三章 输入输出函数及控制流程语句

