就业数据资源平台
当前位置:首页 > PC技术
2013年计算机等级考试三级PC技术上机考试内容5

;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改为字节变量。


需要说明的是,考生在识别错误时首先应充分利用汇编和连接软件工具检查程序中的语法错误,然后再通过调试与运行,验证程序设计中使用的指令以及算法的正确性。否则,面临众多的隐藏错误,将一定会感到束手无策。

就业数据资源平台