【发布时间】:2018-08-07 09:39:41
【问题描述】:
如何在 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
所以问题是我不知道在哪里存储结果(返回)..我应该像在这个示例中为函数创建一个变量并将其存储在那里吗?
【问题讨论】:
-
您是要实现 Java 语言的所有功能,还是只涉及这个特定的 Java 功能?如果是后者,那么您真正的问题是如何在 Hack 中编写带符号的 max 函数,最好使用条件分支。如果是前者,那么它显然是宽泛的。或者你主要是问如何传递和返回函数参数/返回值? (我实际上根本不知道 Hack,所以我无法回答,只是用于 x86、MIPS 和 ARM 等真实 CPU 的汇编语言。一些 x86 调用约定在堆栈上传递参数,但好的调用约定在寄存器中传递参数。)
标签: java assembly calling-convention nand2tetris