Skip to main content
QUICK REVIEW

[论文解读] Instruction Sequences with Indirect Jumps

J.A. Bergstra, C.A. Middelburg|ArXiv.org|Jan 1, 2007
Logic, programming, and type systems参考文献 22被引用 25
一句话总结

本文提出了一种用于包含间接跳转(如返回指令)的指令序列的形式语义,采用投影语义学方法,通过利用堆栈和寄存器文件等内存设备,将此类程序转换为等价的无间接跳转程序。其主要贡献在于提出了一种系统化、数学基础坚实的消除间接跳转的方法,通过与有限内存组件的交互,在执行约束条件下保持程序行为不变,确保正确性。

ABSTRACT

We study sequential programs that are instruction sequences with direct and indirect jump instructions. The intuition is that indirect jump instructions are jump instructions where the position of the instruction to jump to is the content of some memory cell. We consider several kinds of indirect jump instructions. For each kind, we define the meaning of programs with indirect jump instructions of that kind by means of a translation into programs without indirect jump instructions. For each kind, the intended behaviour of a program with indirect jump instructions of that kind under execution is the behaviour of the translated program under execution on interaction with some memory device.

研究动机与目标

  • 为包含间接跳转指令(如递归方法调用中使用的返回指令)的顺序程序提供一种基于形式语义的理解。
  • 通过使用投影语义学,避免依赖复杂的数学构造,解决在程序语义中建模间接跳转的挑战。
  • 证明在结合适当的内存设备(如堆栈或寄存器文件)时,可以系统性地消除间接跳转,将其转换为等价程序。
  • 形式化程序行为与执行环境组件(尤其是有限内存设备)之间的交互,以建模现实世界中的执行约束。

提出的方法

  • 针对每类间接跳转(如绝对返回跳转、返回指令),本文定义了翻译函数,将包含间接跳转的程序映射为等价的无间接跳转程序。
  • 该翻译依赖于投影语义学,通过程序与内存设备的交互来定义程序语义,而非依赖抽象的行为模型。
  • 内存设备通过基于状态的方法建模,具体表现为堆栈和寄存器文件,以描述其在程序执行过程中的行为。
  • 包含间接跳转的程序的行为被定义为其在与对应内存服务交互时执行的翻译后版本的行为。
  • 该方法确保翻译后的程序能正确模拟预期的控制流,包括将堆栈溢出或空堆栈状态作为死锁源进行处理。
  • 该方法被应用于两种程序记法(PGLC 和 PGLD),并扩展支持间接跳转指令和双重间接跳转。

实验结果

研究问题

  • RQ1如何在不依赖复杂行为抽象的前提下,形式化建模指令序列中的间接跳转指令(如返回指令)?
  • RQ2在保持预期执行行为不变的前提下,将包含间接跳转的程序翻译为等价无间接跳转程序的正确方法是什么?
  • RQ3有限内存设备(如堆栈和寄存器文件)如何影响包含间接跳转的程序的语义与执行?
  • RQ4在存在适当内存服务的前提下,是否可以系统性地消除间接跳转?若可以,其条件是什么?
  • RQ5此类翻译的计算成本(特别是程序长度和步骤数的增加)是多少?是否可以最小化?

主要发现

  • 本文确立了:当与适当的内存设备(如堆栈或寄存器文件)交互时,可以通过翻译消除间接跳转指令。
  • 包含间接跳转的程序的行为被正式定义为该程序翻译版本在与内存服务交互时的行为,确保语义等价性。
  • 返回跳转期间发生堆栈溢出将导致死锁,该现象被正确建模为有限内存的后果,而非使用错误。
  • 返回指令期间出现空堆栈也会导致死锁,表明使用错误,该情况在语义中被正式捕获。
  • 翻译过程会增加程序长度和步骤数,但通过优化搜索策略(如使用二分查找替代线性查找)可减少该增加。
  • 当最后一条指令为基本的正向测试或负向测试指令时,该方法通过追加终止序列,确保程序在最后一条指令后正确终止。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。