2016年计算机三级PC技术上机考试指导
1 上机考试环境
1.硬件环境
主机
386、486、586及其各种兼容机
内存
640KB基本内存,具有1MB以上的扩充内存
显示卡
彩显VGA
显示内存
具有512KB以上的显示内存
硬盘空间
10MB以上硬盘空间
2.软件环境
MS-DOS5.0、PC-DOS5.0及以上各种版本
汉字系统
希望汉字系统UCDOS5.0及以上各种版本(正版软件)
TURBO-C 2.0
驱动程序
使用HIMEM.SYS、EMM386.EXE等扩充内存管理器
3.配置文件CONFIG.SYS设置
FILES=64
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM
DOS=HIGH,UMB
BUFFERS=16
4.修改错误
这种题型是在程序中设置了若干错误,考生应根据题目要求,修改程序中的错误,使程序能正常汇编、连接,并获得正确的运行结果。
下面是一个修改程序错误的例子,题目要求是:
内存中从SOURCE开始连续存放着二十个字(WORD),试统计每个字中二进制位为1的个数,结果以字节存放。
例如: 内存中有 139CH,5B8CH,1489H,...
结果为 07H, 08H, 05H,...
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
修改源程序中的错误,使程序运行后能够获得考题所提出的运行结果。
;PROG1.ASM
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
DSEG SEGMENT
SOURCE DW N DUP(?)
RESULT DW N DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DSEG ENDS
SSEG SEGMENT STACK
DB 128 ;错误1
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START: PROC FAR ;错误2
PUSH DS
XOR AX,AX
PUSH AX
MOV DS,DSEG ;错误3
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAMEO ;错误4
MOV CX,2*N ;字节数
CALL LOAD ;从INPUT1.DAT中读取数据
LEA SI,SOURCE
CLD
MOV DX,N
LOOP0: LODS SOURC
XOR BX,BX
MOV CX,16
LOOP1: ROL AX,1
JNC NEXT
INC BX
NEXT: LOOP LOOP0 ;错误5
MOV DESULT,BL ;错误6
INC DI
DEC DX
JNZ LOOP0
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;结果字节数
CALL SAVE ;保存结果到OUTPUT1.DAT
RET
START ENDP
CSEG ENDS
END START
上面的程序中设置了六种类型的错误,其错误性质是:
错误1,虽然这条伪指令语句没有语法错误,但这样设计是不合理的,因为该语句只是在堆栈中存放了一个字节的数据,也就是说,堆栈空间只有一个字节的大小,因此执行本程序时显然是不够用的,当程序执行后必然会出现不可预料的结果。
错误2,根据伪指令语句格式要求,伪指令名后面没有冒号,因此该语句非法。
错误3,根据传送指令的要求,立即数不能直接传送给段寄存器。也就是说,为了对段寄存器初始化,必须先把立即数送到某通用寄存器,然后再由通用寄存器把立即数送到段寄存器,才能达到对段寄存器初始化之目的'。
错误4,由于该指令把NAME0误写成NAMEO,汇编时找不到变量名NAMEO,因而指出NAME0未定义,只要将NAMEO改写为NAME0即可。
错误5,这条语句没有语法错误,但这样设计目标地址不能获得考题规定的运算结果,必须将目标地址LOOP0改为LOOP1,程序运算结果才会正确。碰到这种类型的错误,考生应仔细阅读程序,彻底理解每一条指令在程序中所起的作用,才能改正这种类型的错误。
错误6,该指令错误的性质是操作数类型不匹配,因为目的操作数为字变量,而源操作数为8位寄存器。因此,为了使操作数类型匹配,应将BL寄存器改为BX寄存器,或者将RESULT改为字节变量。
需要说明的是,考生在识别错误时首先应充分利用汇编和连接软件工具检查程序中的语法错误,然后再通过调试与运行,验证程序设计中使用的指令以及算法的正确性。否则,面临众多的隐藏错误,将一定会感到束手无策。