返回介绍

附录 D 低级 Icode 到高级 Icode 的映射

发布于 2025-03-09 23:09:36 字数 4964 浏览 0 评论 0 收藏 0

附录 D

低级 Icode 到高级 Icode 的映射

在低级和高级 Icode (中间代码) 之间的映射见图 D-1 所示。在高级 Icode 栏中,一个短划线(-) 表示低级 Icode 没有与之对应的高级 Icode,一个星号(*) 表示仅当该低级 Icode 在一个成语中的时候是某一个高级指令的组成部分,一个 f 表示一个 Icode 标志被设置而且该指令不再被考虑,一个 cc 表示该低级指令设置一个条件码,它没有对应的高级中间代码,而且将通过条件码传播把它去除,一个 n 表示该低级 Icode 指令在这个分析中不予考虑。被标记一个 n 的指令涉及处理机器字符串指令,dcc 执行这个分析时对此不作考虑。

最初的低级到高级的 Icode 映射是用寄存器表达。对 Icode 做更进一步的数据流分析把这些指令转换成不使用临时寄存器的表达式,只使用变量和寄存器变量(如果有的话)。

低级 Icode

高级 Icode

iAAA-
iAAD-
iAAM-
iAAS-
iADC*
iADDasgn(+)
iANDasgn(&)
iBOUNDf
iCALLcall
iCALLFcall
iCLCcc
iCLDcc
iCLI-
iCMCcc
iCMPcc
iCMPSn
iREPNE_CMPSn
iREPE_CMPSn
iDAA-
iDAS-
iDECasgn(- 1)
iDIVasgn(/)
iENTERf
iESCf
iHLT-
iIDIVasgn(/)
iIMULasgn(*)
iIN-
iINCasgn(+ 1)
iINS-
iREP_INS-
iINT-
iINTO-
iIRET-
iJBjcond(<)
iJBEjcond(<=)
iJAEjcond(>=)
iJAjcond(>)
iJEjcond(==)
iJNEjcond(<>)
iJLjcond(<)
iJGEjcond(>=)
iJLEjcond(<=)
iJGjcond(>)
iJSjcond(> 0)
iJNSjcond(< 0)
iJO-
iJNO-
iJP-
iJNP-
iJCXZjcond(cx == 0)
iJNCXZjcond(cx <> 0)
iJMPjmp
iJMPFjmp
iLAHF-
iLDSasgn(far pointer)
iLEAasgn(near pointer)
iLEAVEret
iLESasgn(far pointer)
iLOCK-
iLODSn
iREP_LODSn
iMOVasgn(=)
iMOVSn
iREP_MOVSn
iMODasgn(%)
iMULasgn(*)
iNEGasgn(-)
iNOT!
iNOP-
iORasgn(|)
iOUT-
iOUTS-
iREP_OUTS-
iPOPpop
iPOPA-
iPOPF-
iPUSHpush
iPUSHA-
iPUSHF-
iRCL*
iRCR*
iREPEn
iREPNEn
iRETret
iRETFret
iROL*
iROR*
iSAHF-
iSAR*
iSHLasgn(<<)
iSHRasgn(>>)
iSBB*
iSCASn
iREPNE_SCASn
iREPE_SCASn
iSIGNEXasgn(=)
iSTCcc
iSTDcc
iSTI-
iSTOSn
iREP_STOSn
iSUBasgn(-)
iTESTcc
iWAITf
iXCHGasgn(uses tmp)
iXLAT-
iXORasgn(^)

图 D-1: Icode 操作码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文