例如:
jmp LABEL
... # loads of instructions
jmp LABEL
.... # loads of instructions
LABEL:
.....
Run Code Online (Sandbox Code Playgroud)
如果没有jmp LABEL
指令大小,则无法确定LABEL的地址,因为两种形式的jmp指令(短(2字节),近(3或5字节))具有不同的大小.鉴于不知道LABEL的地址,您无法确定使用哪种表单.
汇编程序如何解决它?
这是简单的类定义,如
class Base{
public:
virtual void Func(){
cout<<"Func in Base"<<endl;
}
};
class Derived : public Base{
public:
virtual void Func(){
cout<<"Func in Derived"<<endl;
}
}
Base *b = new Derived();
Run Code Online (Sandbox Code Playgroud)
和声明
(b->*&Base::Func)();
Run Code Online (Sandbox Code Playgroud)
调用Func的派生版本,不同于b-> Base :: Func(),它按预期调用基本版本,为什么会发生这种情况,这个调用的含义到底是什么?
例如,像map这样的对象包含20000个条目.在运行时不调用insert方法,在编译时初始化其元素,并将此映射写入二进制文件,就像全局int数组一样.
我有一个用LLVM和C ++实现的玩具解释器?通过走AST并使用JIT,基于Perl的语言,内置的数据结构和函数来生成LLVM IR?现在我想将其扩展为可编译的,生成程序集代码并使用gas和ld获取可执行文件。
如果我想要的只是一个可运行的编译器,无需复杂的优化即可创建“ JUST CORRECT” elf可执行文件,我是否必须将AST转换为RTL之类的IR或类似的东西?还是有其他选择而不是在语法分析阶段构建AST?
顺便说一句?我想知道在像lcc或tcc这样的小型编译器中,它的“ IR”和“目标代码”是什么?