1、三级 PC 技术机试-162 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:以 SOURCE 开始的内存区域存放着若干字节的数据,以#作为数据的结束标志。将其中的空格滤除,对每个非空格数据的最高位清 0 后依次存放到 RESULT 指示的区域,其后存放一个空格符(20),然后存放原来的空格个数,最后仍以#结束。例如:内存中有 45H,20H,87H,20H,A5H,32H,20H,20H,20H,23H结果为 45H,07H,25H,32H,20H,05H,23H部分程序已经给出,其中原始数据由过程 LOAD 从文件
2、 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,转换结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。请填空 BEGIN 和 END 之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去 BEGIN和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:(分数:100.00)_三级 PC 技
3、术机试-162 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:以 SOURCE 开始的内存区域存放着若干字节的数据,以#作为数据的结束标志。将其中的空格滤除,对每个非空格数据的最高位清 0 后依次存放到 RESULT 指示的区域,其后存放一个空格符(20),然后存放原来的空格个数,最后仍以#结束。例如:内存中有 45H,20H,87H,20H,A5H,32H,20H,20H,20H,23H结果为 45H,07H,25H,32H,20H,05H,23H部分程序已经给出,其中原始数据由过程 LOAD 从文件 INPUT1.
4、DAT 中读入 SOURCE 开始的内存单元中,转换结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。请填空 BEGIN 和 END 之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去 BEGIN和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:(分数:100.00)_正确答案:(1)AGN11(2
5、)#(3)INCDI(4)JMP AGN1(5)20H(6)DI)解析:解析此程序要实现以下功能:非空格数据最高位清 0,以及统计空格符的个数。然后将处理后的数据存储到内存区域,并以“20H“,空格符个数及#结尾。要读懂程序中的 BL 是存放空格符的个数。程序的堆栈段定义了一个 128 字节的堆栈区。堆栈段下面是数据段。数据段中定义了四个字节型变量,原始数据区 SOURCE、结果数据区 RESULT、原始数据文件名 NAME0、结果数据文件名 NAME1。数据 段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器 CS、DS、SS。先将原始数据的偏移地址装入到 SI 中,结果数
6、据存放的偏移地址装入到 DI 中。BL 清 0。接着将 SI 中内容送 AL 中。SI 地址加 1,准备取下一个字节。将 AL 与空格符比较,若相等,则转向 AGN11 段;否则,转向 AGN2 段。所以第(1)空填写“AGN11“。AGN11 段中,BL 是记录空格符的个数。当 AL 为空格符时,BL 加 1。接着转向 AGN1,继续判断下一个字符。AGN2 段的第(2)空中,将 AL 与#比较,若 AL#,则数据已经搜索到#,搜索完毕,转向 DONE 段;否则,用指令“AND AL 7FH“将 AL 字符最高位清 0,并将结果 AL 存入到 DI 中。DI 地址加 1,无条件转向AGN1 段。所以第(3)空填写“INCDI”,第(4)空填写“JMPAGN1“。DONE 这一段,是统计完所有字符后,将空格符存入到 DI 中。所以第(5)空填写“20H“。接着将空格符个数 BL 存入到 DI 中。最后将字符#存入到DI 中。所以第(6)空填写DI。