请编制程序,其功能是:内存中连续存放着20个无符号二进制字序列Xi(i=1,2,…,20),字的最高3位为000,此序列对应某一信号在一段时间内的连续变化,现对该信号进行一阶低通数字滤波,其滤波方程为: Yi=(15*Yi-1/16)+(Xi/16)

admin2010-12-14  35

问题 请编制程序,其功能是:内存中连续存放着20个无符号二进制字序列Xi(i=1,2,…,20),字的最高3位为000,此序列对应某一信号在一段时间内的连续变化,现对该信号进行一阶低通数字滤波,其滤波方程为:
   Yi=(15*Yi-1/16)+(Xi/16),Y0=0
   Yi(i=1,2…,20)为滤波后得到的新序列,结果存入内存。
   例如:
   内存中有01FFH,02FFH…
   结果    001H,004DH…
   部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
   请填空BEGIN和END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
   试题程序:
   

选项

答案BX (2)ADD (3)SUB (4)MOV BX,AX (5)INC DI (6)INC SI

解析 此程序要实现的功能是:内存中连续存放着20个无符号二进制字序列Xi(i=1,2…,20),字的最高3位为000,此序列对应某一信号在一段时间内的连续变化,现对该信号进行一阶低通数字滤波,其滤波方程为:
   Yi=(15*Yi-1/16)+(Xi/16),Y0=0。Yi(i=1,2,…,20)为滤波后得到的新序列,结果存入内存。
   此程序的关键是要会将滤波方程灵活地拆开来,才能更好地理解程序。上面的公式可以拆成这样:Yi=Yi-1+Xi/16-Yi-1/16,Y0=0。Yi(i=1,2,…,20)。
   程序的堆栈段定义了一个128个字节的堆栈区。堆栈段下面是数据段。数据段中定义了两个字型变量:原始数据区SOURCE、结果数据区RESULT;两个字节型变量:原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。
   先将原始数据的偏移地址装入到SI中,结果数据存放的偏移地址装入到DI中。CX赋值为N,用于控制循环处理的次数。BX赋初值为0,表示Y0=0。注意:BX总是存放前一计算的结果,即Yi-1。
   AGN0段,先将BX暂存DX,表示Yi-1。所以第(1)空填写"BX"。取第一个无符号二进制字即 SI中内容Xi送AX,然后将CX压入堆栈,保存原现场,再给CX赋值为4,等用完了CX的这个值后,将CX从堆栈中弹出,返回操作系统。
   AGN1段,先将BX和AX都逻辑右移一位,然后再从AGN1入口处循环,继续将BX和AX逻辑右移一位,这样一共循环四次,就将BX和AX都逻辑右移了四位,即BX和AX的值都变成了原来的1/16,即Yi-1/16和Xi/16。然后将CX从堆栈中弹出。将AX即Xi/16与DX即Yi-1相加,结果先放AX中。然后再将AX减去BX即Yi-1/16,结果放AX中,就得到了Yi的值。然后将结果AX印Yi存入到DI中。再将AX值即Yi赋给BX,BX将作为计算下一个值Yi+1,的参照数。DI地址两次加1,准备存储下—个Yi, SI地址也两次加1,准备取下一个Xi进行计算。因为原始数据Xi和结果数据Yi都是 字序列,每个数存放在内存中连续两个地址空间中。然后从AGN0入口处循环,继续计算,进行下一次滤波,得到下一个值即Yi+1。从上面的分析来看,第(2)空填写"ADD",第(3)空填写"SUB",第(4)空填写"MOV BX, AX",第(5)空填写"INC DI",第(6)空填写"INC SI"。
转载请注明原文地址:https://kaotiyun.com/show/QdgZ777K
0

相关试题推荐
最新回复(0)