子程序与蒙特卡罗方法:编程中的实用技巧
1. 子程序基础
1.1 基于分支控制的局限性
传统的基于分支的控制存在一个主要限制,即代码块执行后,控制会自动返回到一个固定且不可改变的点。与高级编程语言中的传统过程不同,无法设置一个可以从程序任意点运行并返回原位置的代码块。
1.2 子程序的引入
为了解决这个问题,需要更多信息、新的控制结构和操作。JVM 提供了 jsr
(Jump to SubRoutine)指令(实际上有 jsr
和 jsr w
两条指令,类似于 goto
和 goto w
)。当执行 jsr
指令时,控制会立即转移到字节码中存储偏移量的标签处。在此之前,机会计算 (PC + 3)
的值,即 jsr
指令之后的下一条指令的地址,并将其作为 32 位(4 字节)的量压入栈中,然后才将控制转移到标签处。
1.3 jsr
指令的机器语言
jsr
助记符对应一个字节( 0xA8
),后面跟着一个 2 字节的偏移量,存储为有符号短整数。例如,假设内存位置 0x1000 - 0x1003
保存如下模式:
| 位置 | 字节值 | 解释 |
| ---- | ---- | ---- |
| 0x1000 | 0xA8 | js