一、指令分类
CISC指令集的长度不是固定的,可以按照指令的复杂度对代码进行分类。
针对x86指令集,有些短指令的翻译十分简单(比如不需要解析Ev等字段),可以在解析之后迅速翻译,可以按照以下规则进行分类:
1、有没有前缀字节。
2、单字节指令。
3、简单的操作码,比如仅仅是寄存器操作。
4、复杂的指令,多操作码可以对相似的操作进行归类。
我觉得switch case是比较好的方法,即可以将指令进行分类又可以合并复杂指令的相似操作。
二、二进制翻译中的内嵌C语言
1、指令比较复杂,需要很多临时寄存器。
2、host不支持target的指令,比如arm没有除法指令。
3、和硬件的关系比较密切,需要在汇编中调用C函数,比如 ioport操作。
三、关于中间代码的利弊分析
优点:
有利于代码的优化。
有利于进行跨平台的设计。
缺点
有损性能。
采用三地址法来描述一个中间代码