Memory 表示类型和存储局部变量?
我正在编写一个编译器,虽然我知道我需要做些什么来处理内置类型,比如Memory 表示类型和存储局部变量?,memory,assembly,compiler-construction,Memory,Assembly,Compiler Construction,我正在编写一个编译器,虽然我知道我需要做些什么来处理内置类型,比如Int,它可以放入寄存器并可以很好地推送到堆栈或其他任何地方,但我不知道如何处理用户定义的类型(这种语言主要是面向对象的),因此给出了以下示例: class Color { Color(Int r, Int g, Int b) r g b { } method GetR() Int { return r } } 其中,r,g和
Int
,它可以放入寄存器并可以很好地推送到堆栈或其他任何地方,但我不知道如何处理用户定义的类型(这种语言主要是面向对象的),因此给出了以下示例:
class Color
{
Color(Int r, Int g, Int b)
r
g
b
{ }
method GetR() Int
{
return r
}
}
其中,r
,g
和b
自动成为Int
类型的成员变量。如何在例如GetR()
中处理Color
的实例
我的想法
我认为,最好的方法是保留一个寄存器(或者在每个方法的堆栈帧中保留一个空格更好?)来保存指向this
的指针。然后,如果您想要实现GetR()
,假设r10
持有该指针,并且r
成员恰好从该地址开始,您可以生成:_G_Color_GetR:
mov rax, [r10]
ret
这是解决问题的好方法吗?如果不是,其他语言的编译器是如何解决的?是的,这是典型的实现-像参数一样传递
这个。要么像是额外的第一个参数,要么通过指定的寄存器。好的,非常感谢!