1、三级 PC技术机试-159 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:内存中连续存放着 20个 ASCII字符,如果是小写字母 az之间的字符,请把它们转换成相应的大写字符;若为其他字符,不作转换。例如:内存中有 61H(a),62H(b),31H(1),41H(A),42H(B)结果为 41H(A),42H(B),31H,41H(A),42H(B)部分程序已给出,其中原始数据由过程 LOAD从文件 INPUT1DAT 中读入 SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程 SAVE保
2、存到文件 OUTPUT1.DAT中。请填空 BEGIN和 END之间已给出的源程序使其完整(空白己用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN和 END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:(分数:100.00)_三级 PC技术机试-159 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:内存中连续存放着 20个 ASCII字符,如果是
3、小写字母 az之间的字符,请把它们转换成相应的大写字符;若为其他字符,不作转换。例如:内存中有 61H(a),62H(b),31H(1),41H(A),42H(B)结果为 41H(A),42H(B),31H,41H(A),42H(B)部分程序已给出,其中原始数据由过程 LOAD从文件 INPUT1DAT 中读入 SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程 SAVE保存到文件 OUTPUT1.DAT中。请填空 BEGIN和 END之间已给出的源程序使其完整(空白己用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN和 END之间
4、原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:(分数:100.00)_正确答案:(1)UPPER2(2)Z(3)A(4)AL,0DFH(5)AL(6)SI(7)DI(8)LOOP)解析:解析此程序要求实现的功能是:将内存中连续存放着的 20个 ASCII字符,如果是小写字母 az之间的字符,把它们转换成相应的大写字符;若为其他字符,不作转换。程序的堆栈段定义了一个 128字节的堆栈区。堆栈段下面是数据段。数据段中定义了四个字节型变量:原始数据区 SOURCE、结果
5、数据区 RESULT、原始数据文件名 NAME0、结果数据文件名 NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器 CS、DS、SS。先将原始数据的偏移地址装入到 SI中,结果数据存放的偏移地址装入到 DI中,CX 赋值为 N,用于控制循环处理的次数。NEXT段,取第一个原始 ASCII字符,即将 SI中内容送 AL,将 AL与a做比较,若 AL小于字符a的ASCII值,说明 AL为大写字母或其他字符,则转向 UPPER2处执行;否则,将 AL与字符z再做比较,若AL大于字符z的 ASCII值,说明 AL为其他字符,仍转向 UPPER2处执行;否则,AL 大
6、于等于字符a的ASCII值,小于等于字符2的 ASCII值,说明 AL为小写字母 az之间的字符。因为小写字母的 ASCII值范围是 61H7AH,大写字母的 ASCII值范围是 41H5AH,所以要将小写字母变成大写字母的话,只需将小写字母的 ASCII值和 0DFH进行逻辑与操作。读者可以试一下,将 61H7AH之间的值和 0DFH进行逻辑与操作,看是否能得到 41H5AH之间的值。从上面的分析来看,第(1)空填写“UPPER2“,第(2)空填写“2“,第(3)空填写“A“,第(4)空填写“AL,0DFH“。UPPER2段,当字符 AL不为小写字母,为大写字母或其他字符时,不需将它做任何变换,直接将该字符 AL存入到 DI中。所以第(5)空填写“AL“。接着,SI 地址加 1,准备取下一个字符,继续判断;DI地址加 1,准备存储下一个转换后或不需转换的字符。然后从 NEXT入口处循环,继续下一个字符的处理。一共循环 CX即 20次,才能完成程序的功能。所以第(6)空填写“SI“,第(7)空填写“DI“,第(8)空填写“LOOP“。