java - Hack 汇编语言中的 Java 函数
问题描述
如何在 Hack Assembly 中实现 Java 函数?我知道更改变量的指令很容易制作,但是 HACK 是如何调用函数的呢?例如:
function(int a, int b) {
if (a-b > 0)
return a;
else
return b;
}
我的(我认为错误的)结果是:
@a
D=M
@b
D=D-M
@JUMPMARK1
D;JGT
@Jumpmark2
0;JMP
(JUMPMARK1)
@a
D=M
@function
M=D
(Jumpmark2)
@b
D=M
@function
M=D
所以问题是我不知道在哪里存储结果(返回)..我应该像在这个例子中为函数创建一个变量并将它存储在那里吗?
解决方案
为了在 Hack 中实现真正的函数调用,首先需要实现一个下推堆栈。一旦完成,它就相对简单了。
然后,为了进行函数调用,你加载 D 和返回地址并推送它。对于单参数函数调用,您可以在 D 中传递函数参数;对于多参数调用,您还需要将这些值推送到堆栈中。
然后,您无条件跳转到该函数。在函数中,您可以做任何您需要做的事情(包括从堆栈中弹出任何参数)。最后,将返回地址从堆栈中弹出到 A 中并无条件跳转。
返回操作可以用 4 条指令完成。调用操作需要 9 条指令。
如果保证函数是非递归的,则可以省去堆栈,将函数参数(包括返回地址)放在与每个函数关联的固定内存块中。
推荐阅读
- xml - 无法使用 wp all import pro 在 wordpress 中为图库导入图像
- apache - Htaccess 301 博客重定向网址
- auto - 可以使用firebase在flutter中自动读取OTP吗?
- javascript - 如果满足任何条件,我想循环指定次数并显示数组
- postgresql - EF Core - 表中不存在键 (Id)=(0)
- hbase - kylin - 扫描 10 439 900 行后协处理器超时
- git - 在 git 中链接两个存储库
- mule - 根据输入日期创建日期数组
- php - Wordress Divi 主题 - 如何将变量传递给主站点 url,然后在 divi builder 的按钮链接中使用该变量?
- sahi - 如何使用 Sahi webdriver 执行最新的浏览器(Firefox 87)