一种从总线指令流中提取实际执行指令和预取指令的方法技术

技术编号:5506698 阅读:416 留言:0更新日期:2012-04-11 18:40
一种从总线指令流中提取实际执行指令和预取指令的方法,本发明专利技术根据8086/186/386处理器的片上缓存行为,仅在8086/186/386处理器总线指令流断裂时进行预取指令分析,且仅对当前缓存内指令流遍历一遍,能够准确而有效地过滤总线上出现的预取指令,分析得到处理器实际执行指令,从而提高了测试效率。由于8086、80186、80386处理器指令集的一致性、处理器缓存操作的相似性(仅缓存大小略有不同),本发明专利技术完全可以通用于这3款处理器的目标码覆盖率测试。

【技术实现步骤摘要】

本专利技术涉及,尤其涉及 一种从8086/186/386处理器总线指令流中提取实际执行指令和预取指令的方法,主要用 于测试软件目标码覆盖率。
技术介绍
在现有的软件测试领域中,一般通过软件执行覆盖率反映软件测试的质量和进 度。软件覆盖率自上至下一般分为3个层次功能覆盖率、源代码覆盖率和目标码覆盖率。 目前大多数覆盖率工具都是针对源代码级的,一般采用软件插桩技术(如华为技术有限公 司03101273. 6号专利“一种嵌入式系统覆盖率统计方法”、李周的200710123818. 2号专利 “一种嵌入式系统测试方法”),这种方法的原理是对源代码进行修改,插入桩点,在软件执 行时,根据桩点输出信息统计软件的源代码覆盖率。这种方法中,桩点的代码不可避免地对 软件本身的执行造成影响,导致软件相关性能指标失真,而且桩点为了输出执行信息,必然 会占用软件部分外围端口或通信通道。而针对目标码的覆盖率工具(如逻辑分析仪、白盒测试工具SystemVerify) —般 采用内存总线监测技术(即使用硬件探头连接处理器内存总线,监测处理器从内存读取指 令的地址,结合软件目标码进行分析后即可得出目标码的执行信息,并统计覆盖率),避免 了上述插桩问题,而且目标码由于是软件的最终形态,这种层次的覆盖率统计更具真实性 和可信性。同时该类型工具也可以统计软件的性能指标,记录软件的执行路径,常用于软件 测试分析和问题定位。但在这种技术应用于8086/186/386处理器的目标码覆盖率统计时,发现该类处 理器具有片上缓存,处理器从内存中获取指令后,先放入片上缓存,处理器再根据指令内容 自主判断执行缓存中的哪些指令。这样就导致处理器从内存中读取的指令(即总线上出现 指令的地址)并不一定被处理器实际执行(称这种总线上出现而不被执行的指令为预取指 令)。预取指令的出现导致了目标码覆盖率获取结果与实际执行结果偏差过大,失去统计意 义。
技术实现思路
本专利技术的技术解决问题是克服现有技术地不足,提供一种从总线指令流中提取 实际执行指令和预取指令的方法,解决了 8086/186/386处理器片上缓存带来的预取指令 问题,本专利技术能够过滤总线指令流上出现的预取指令,分析得到处理器实际执行指令,准确 有效地测试8086/186/386处理器的目标码覆盖率。本专利技术的技术解决方案是一种从总线指令流中提取实际执行指令和预取指令的 方法,步骤如下(1)根据目标代码建立跳转地址表,跳转地址表包括指令地址、指令类型、指令长 度和跳转目标地址;(2)建立一个空的仿真处理器缓存区用于记录总线指令采集地址,该仿真处理器 缓存为一个先入先出缓存区;(3)采集总线指令地址,将首次采集的总线指令地址放入仿真处理器缓存区中,将 下次采集的总线指令地址与仿真处理器缓存区中最后一条指令的地址进行连续性判断,如 果地址连续则执行步骤G),否则执行步骤(5);(4)将本次采集的总线指令地址放入仿真处理器缓存区中,判断仿真处理器缓存 区的数据是否溢出,如果仿真处理器缓存区有溢出则将仿真处理器缓存区中的首条指令移 出,将移出的指令设置为实际执行指令,如果仿真处理器缓存区的数据没有溢出,则继续采 集总线指令地址并放入仿真处理器缓存区中,直至总线指令地址采集结束;(5)将仿真处理器缓存区中的总线指令地址对应的指令设置为预取指令,并将不 连续的总线指令地址作为目的地址,将仿真处理器缓存区中首个总线指令地址对应的指令 进行LPAS处理,如果LPAS处理的结果为“非法路径”,则清空仿真处理器缓存区;如果LPAS 处理的结果为“找到合法路径”,则首条指令为实际执行指令,其余指令为预取指令;如果 LPAS处理的结果为“未找到合法路径”,则执行步骤(6);(6)将仿真处理器缓存区中下一条总线指令地址对应的指令进行LPAS处理,如果 LPAS处理的结果为“非法路径”,则仿真处理器缓存区中所有总线指令地址对应的指令均为 预取指令,清空仿真处理器缓存区;如果LPAS处理的结果为“找到合法路径”,则该条指令 为实际执行指令,其余指令为预取指令;如果LPAS处理的结果为“未找到合法路径”,则该 条指令为实际执行指令,继续执行步骤(6)直至总线指令地址对应的所有指令处理完毕, 则仿真处理器缓存区中所有总线指令地址对应的指令均为预取指令,清空仿真处理器缓存 区;所述LPAS处理的方法为(a)根据跳转地址表中的指令类型对当前指令的指令类型进行判断,如果指令类 型为分支指令,执行步骤(b),如果指令类型为跳转指令则执行步骤(c),如果指令类型为 返回指令则返回“找到合法路径”,否则返回“未找到合法路径”;(b)将目的地址与跳转地址表中的跳转目标地址进行比较,如果两个地址一致则 返回“找到合法路径”,如果两个地址不一致则返回“未找到合法路径”;(c)将目的地址与跳转地址表中的跳转目标地址进行比较,如果两个地址一致则 返回“找到合法路径”,如果两个地址不一致则返回“非法路径”。本专利技术与现有技术相比的有益效果为本专利技术根据8086/186/386处理器的片上 缓存行为,仅在8086/186/386处理器总线指令流断裂时进行预取指令分析,且仅对当前缓 存内指令流遍历一遍,能够准确而有效地过滤总线上出现的预取指令,分析得到处理器实 际执行指令,从而提高了测试效率。由于8086、80186、80386处理器指令集的一致性、处理 器缓存操作的相似性(仅缓存大小略有不同),本专利技术完全可以通用于这3款处理器的目标 码覆盖率测试。附图说明图1为本专利技术的工作流程图。图2为本专利技术实施例的指令提取流程图。具体实施例方式下面结合附图和实施例对本专利技术做进一步说明。如图1所示,本专利技术的工作流程如下(1)根据目标代码建立跳转地址表,跳转地址表包括指令地址、指令类型、指令长 度和跳转目标地址;(2)建立一个空的仿真处理器缓存区用于记录总线指令采集地址,该仿真处理器 缓存为一个先入先出缓存区;(3)采集总线指令地址,将首次采集的总线指令地址放入仿真处理器缓存区中,将 下次采集的总线指令地址与仿真处理器缓存区中最后一条指令的地址进行连续性判断,如 果地址连续则执行步骤G),否则执行步骤(5);(4)将本次采集的总线指令地址放入仿真处理器缓存区中,判断仿真处理器缓存 区的数据是否溢出,如果仿真处理器缓存区有溢出则将仿真处理器缓存区中的首条指令移 出,将移出的指令设置为实际执行指令,如果仿真处理器缓存区的数据没有溢出,则继续采 集总线指令地址并放入仿真处理器缓存区中,直至总线指令地址采集结束;(5)将仿真处理器缓存区中的总线指令地址对应的指令设置为预取指令,并将不 连续的总线指令地址作为目的地址,将仿真处理器缓存区中首个总线指令地址对应的指令 进行LPAS处理,如果LPAS处理的结果为“非法路径”,则清空仿真处理器缓存区;如果LPAS 处理的结果为“找到合法路径”,则首条指令为实际执行指令,其余指令为预取指令;如果 LPAS处理的结果为“未找到合法路径”,则执行步骤(6);(6)将仿真处理器缓存区中下一条总线指令地址对应的指令进行LPAS处理,如果 LPAS处理的结果为“非法路径”,则仿真处理器缓存区中所有总线指令地址对应的指令均为 预取指令,清空仿真处理器缓存区;如果本文档来自技高网
...

【技术保护点】
一种从总线指令流中提取实际执行指令和预取指令的方法,其特征在于步骤如下:(1)根据目标代码建立跳转地址表,跳转地址表包括指令地址、指令类型、指令长度和跳转目标地址;(2)建立一个空的仿真处理器缓存区用于记录总线指令采集地址,该仿真处理器缓存为一个先入先出缓存区;(3)采集总线指令地址,将首次采集的总线指令地址放入仿真处理器缓存区中,将下次采集的总线指令地址与仿真处理器缓存区中最后一条指令的地址进行连续性判断,如果地址连续则执行步骤(4),否则执行步骤(5);(4)将本次采集的总线指令地址放入仿真处理器缓存区中,判断仿真处理器缓存区的数据是否溢出,如果仿真处理器缓存区有溢出则将仿真处理器缓存区中的首条指令移出,将移出的指令设置为实际执行指令,如果仿真处理器缓存区的数据没有溢出,则继续采集总线指令地址并放入仿真处理器缓存区中,直至总线指令地址采集结束;(5)将仿真处理器缓存区中的总线指令地址对应的指令设置为预取指令,并将不连续的总线指令地址作为目的地址,将仿真处理器缓存区中首个总线指令地址对应的指令进行LPAS处理,如果LPAS处理的结果为“非法路径”,则清空仿真处理器缓存区;如果LPAS处理的结果为“找到合法路径”,则首条指令为实际执行指令,其余指令为预取指令;如果LPAS处理的结果为“未找到合法路径”,则执行步骤(6);(6)将仿真处理器缓存区中下一条总线指令地址对应的指令进行LPAS处理,如果LPAS处理的结果为“非法路径”,则仿真处理器缓存区中所有总线指令地址对应的指令均为预取指令,清空仿真处理器缓存区;如果LPAS处理的结果为“找到合法路径”,则该条指令为实际执行指令,其余指令为预取指令;如果LPAS处理的结果为“未找到合法路径”,则该条指令为实际执行指令,继续执行步骤(6)直至总线指令地址对应的所有指令处理完毕,则仿真处理器缓存区中所有总线指令地址对应的指令均为预取指令,清空仿真处理器缓存区;所述LPAS处理的方法为:(a)根据跳转地址表中的指令类型对当前指令的指令类型进行判断,如果指令类型为分支指令,执行步骤(b),如果指令类型为跳转指令则执行步骤(c),如果指令类型为返回指令则返回“找到合法路径”,否则返回“未找到合法路径”;(b)将目的地址与跳转地址表中的跳转目标地址进行比较,如果两个地址一致则返回“找到合法路径”,如果两个地址不一致则返回“未找到合法路径”;(c)将目的地址与跳转地址表中的跳转目...

【技术特征摘要】

【专利技术属性】
技术研发人员:吴瑾段永顥于志杰郭向英董燕武占峰张西超张金巍魏鹏曾霞左万娟尚智
申请(专利权)人:北京控制工程研究所
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1