请编制程序,其功能是:以SOURCE开始的内存区域存放着若干字节的数据,以’#’作为数据的结束标志。将其中的空格滤除,对每个非空格数据的最高位清0后依次存放到RESULT指示的区域,其后存放一个空格符(20),然后存放原来的空格个数,最后仍以’#’结束。

admin2010-12-14  29

问题 请编制程序,其功能是:以SOURCE开始的内存区域存放着若干字节的数据,以’#’作为数据的结束标志。将其中的空格滤除,对每个非空格数据的最高位清0后依次存放到RESULT指示的区域,其后存放一个空格符(20),然后存放原来的空格个数,最后仍以’#’结束。
   例如:
   内存中有45H,20H,87H,20H,A5H,32H,20H,20H,20H,23H
   结果为    45H,07H,25H,32H,20H,05H,23H
   部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
   请填空BEGIN和END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
   对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
   试题程序:
   

选项

答案(1)AGN11 (2)’#’ (3)INCDI (4)JMP AGN1 (5)20H (6)[DI]

解析 此程序要实现以下功能:非空格数据最高位清0,以及统计空格符的个数。然后将处理后的数据存储到内存区域,并以"20H",空格符个数及’#’结尾。要读懂程序中的BL是存放空格符的个数。
   程序的堆栈段定义了一个128字节的堆栈区。堆栈段下面是数据段。数据段中定义了四个字节型变量,原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAME1。数据   段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。
   先将原始数据的偏移地址装入到SI中,结果数据存放的偏移地址装入到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]。

转载请注明原文地址:https://jikaoti.com/ti/Os27FFFM
0

随机试题
最新回复(0)