荟萃馆

位置:首页 > 计算机 > 计算机三级

2016年全国计算机等级考试三级PC技术上机指导

这种题型是根据考题要求,在BEGIN和END区间自行编制程序,然后进行汇编、连接,并运行程序,最后得到正确结果。下面是一个编制程序的例子,题目要求是:

2016年全国计算机等级考试三级PC技术上机指导

内存中连续存放着二十个字(WORD),对每个字逻辑左移,使其最高位为1,其中值为零的不变。例如:

内存中有 29C1H(0010100111000001B),0000H,134BH,...

结果为 A704H(1010011100000100B),0000H,9A58H,...

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

下面是程序清单,其中BEGIN和END之间的程序段由考生编写。

;

EXTRN LOAD:FAR,SAVE:FAR

N EQU 20 ;需输入的字节数

DSEG SEGMENT ;数据段

SOURCE DW N DUP(?) ;存放原始数据

RESULT DW N DUP(0) ;存放运算结果

NAME0 DB '',0 ;输入文件名

NAME1 DB '',0 ;输出文件名

DSEG ENDS

SSEG SEGMENT STACK ;堆栈段

DB 128 DUP (?)

SSEG ENDS

CSEG SEGMENT ;代码段

ASSUME CS:CSEG,DS:DSEG,SS:SSEG

START PROC FAR

PUSH DS

XOR AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

LEA DX,SOURCE ;原始数据区首址送DX

LEA SI,NAME0 ;输入文件名首址送SI

MOV CX,2*N ;输入字节数送CX

CALL LOAD ;从中读取数据

; **** BEGIN ****

LEA SI,SOURCE ;原始数据首地址送SI

MOV DI,OFFSET RESULT ;结果数据首地址送DI

MOV CX,N ;字节数送CX

NEXT: MOV AX,[SI] ;取一个字数据

CMP AX,0 ;是0吗?

JE SKIP ;是,跳过这一个字

LOOP1: TEST AX,8000H ;否,最高位是1吗?

JNE SKIP ;是,跳过这一个字

SHL AX,1 ;否,左移一位

JMP LOOP1 ;继续测试最高位是否为1

SKIP: MOV [DI],AX ;保存变换结果于RESULT中

ADD SI,2 ;修改原始数据区指针

ADD DI,2 ;修改结果数据区指针

LOOP NEXT ;继续检查下一个字数据

; **** END ****

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

LEA SI,NAME1 ; 结果文件名首址送SI

MOV CX,N*2 ; 结果字节数送CX

CALL SAVE ; 保存结果到

RET

START ENDP

CSEG ENDS

END START