[发明专利]一种从总线指令流中提取实际执行指令和预取指令的方法有效
申请号: | 201010611254.9 | 申请日: | 2010-12-17 |
公开(公告)号: | CN102063370A | 公开(公告)日: | 2011-05-18 |
发明(设计)人: | 吴瑾;段永顥;于志杰;郭向英;董燕;武占峰;张西超;张金巍;魏鹏;曾霞;左万娟;尚智 | 申请(专利权)人: | 北京控制工程研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 中国航天科技专利中心 11009 | 代理人: | 臧春喜 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 总线 指令 提取 实际 执行 方法 | ||
技术领域
本发明涉及一种从总线指令流中提取实际执行指令和预取指令的方法,尤其涉及一种从8086/186/386处理器总线指令流中提取实际执行指令和预取指令的方法,主要用于测试软件目标码覆盖率。
背景技术
在现有的软件测试领域中,一般通过软件执行覆盖率反映软件测试的质量和进度。软件覆盖率自上至下一般分为3个层次:功能覆盖率、源代码覆盖率和目标码覆盖率。目前大多数覆盖率工具都是针对源代码级的,一般采用软件插桩技术(如华为技术有限公司03101273.6号专利“一种嵌入式系统覆盖率统计方法”、李周的200710123818.2号专利“一种嵌入式系统测试方法”),这种方法的原理是对源代码进行修改,插入桩点,在软件执行时,根据桩点输出信息统计软件的源代码覆盖率。这种方法中,桩点的代码不可避免地对软件本身的执行造成影响,导致软件相关性能指标失真,而且桩点为了输出执行信息,必然会占用软件部分外围端口或通信通道。
而针对目标码的覆盖率工具(如逻辑分析仪、白盒测试工具SystemVerify)一般采用内存总线监测技术(即使用硬件探头连接处理器内存总线,监测处理器从内存读取指令的地址,结合软件目标码进行分析后即可得出目标码的执行信息,并统计覆盖率),避免了上述插桩问题,而且目标码由于是软件的最终形态,这种层次的覆盖率统计更具真实性和可信性。同时该类型工具也可以统计软件的性能指标,记录软件的执行路径,常用于软件测试分析和问题定位。
但在这种技术应用于8086/186/386处理器的目标码覆盖率统计时,发现该类处理器具有片上缓存,处理器从内存中获取指令后,先放入片上缓存,处理器再根据指令内容自主判断执行缓存中的哪些指令。这样就导致处理器从内存中读取的指令(即总线上出现指令的地址)并不一定被处理器实际执行(称这种总线上出现而不被执行的指令为预取指令)。预取指令的出现导致了目标码覆盖率获取结果与实际执行结果偏差过大,失去统计意义。
发明内容
本发明的技术解决问题是:克服现有技术地不足,提供一种从总线指令流中提取实际执行指令和预取指令的方法,解决了8086/186/386处理器片上缓存带来的预取指令问题,本发明能够过滤总线指令流上出现的预取指令,分析得到处理器实际执行指令,准确有效地测试8086/186/386处理器的目标码覆盖率。
本发明的技术解决方案是:一种从总线指令流中提取实际执行指令和预取指令的方法,步骤如下:
(1)根据目标代码建立跳转地址表,跳转地址表包括指令地址、指令类型、指令长度和跳转目标地址;
(2)建立一个空的仿真处理器缓存区用于记录总线指令采集地址,该仿真处理器缓存为一个先入先出缓存区;
(3)采集总线指令地址,将首次采集的总线指令地址放入仿真处理器缓存区中,将下次采集的总线指令地址与仿真处理器缓存区中最后一条指令的地址进行连续性判断,如果地址连续则执行步骤(4),否则执行步骤(5);
(4)将本次采集的总线指令地址放入仿真处理器缓存区中,判断仿真处理器缓存区的数据是否溢出,如果仿真处理器缓存区有溢出则将仿真处理器缓存区中的首条指令移出,将移出的指令设置为实际执行指令,如果仿真处理器缓存区的数据没有溢出,则继续采集总线指令地址并放入仿真处理器缓存区中,直至总线指令地址采集结束;
(5)将仿真处理器缓存区中的总线指令地址对应的指令设置为预取指令,并将不连续的总线指令地址作为目的地址,将仿真处理器缓存区中首个总线指令地址对应的指令进行LPAS处理,如果LPAS处理的结果为“非法路径”,则清空仿真处理器缓存区;如果LPAS处理的结果为“找到合法路径”,则首条指令为实际执行指令,其余指令为预取指令;如果LPAS处理的结果为“未找到合法路径”,则执行步骤(6);
(6)将仿真处理器缓存区中下一条总线指令地址对应的指令进行LPAS处理,如果LPAS处理的结果为“非法路径”,则仿真处理器缓存区中所有总线指令地址对应的指令均为预取指令,清空仿真处理器缓存区;如果LPAS处理的结果为“找到合法路径”,则该条指令为实际执行指令,其余指令为预取指令;如果LPAS处理的结果为“未找到合法路径”,则该条指令为实际执行指令,继续执行步骤(6)直至总线指令地址对应的所有指令处理完毕,则仿真处理器缓存区中所有总线指令地址对应的指令均为预取指令,清空仿真处理器缓存区;
所述LPAS处理的方法为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京控制工程研究所,未经北京控制工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010611254.9/2.html,转载请声明来源钻瓜专利网。