6.3.3 为跳转指令产生汇编代码
在这一小节中,我们要为“有条件跳转”、“无条件跳转”和“间接跳转”产生相应的汇编指令。中间指令的四元式如下所示:
<运算符opcode,目的操作数DST,源操作数SRC1,源操作数SRC2>
(1) 有条件跳转,例如“if (a <= b) goto BB2;”,四元式为:
<JLE,BB2,a,b>
////////对应的汇编代码//////////
movl a, %eax //把SRC1的值暂存在寄存器eax中
cmpl b, %eax&nbs
本文详细介绍了C编译器如何为有条件跳转、无条件跳转和间接跳转生成汇编代码。内容涵盖四元式转换、寄存器回写、常数处理、浮点数比较以及跳转表的创建。重点讲解了EmitBranch、EmitX87Branch和EmitJump等函数的实现,以及如何处理不同类型的跳转操作。
6.3.3 为跳转指令产生汇编代码
在这一小节中,我们要为“有条件跳转”、“无条件跳转”和“间接跳转”产生相应的汇编指令。中间指令的四元式如下所示:
<运算符opcode,目的操作数DST,源操作数SRC1,源操作数SRC2>
(1) 有条件跳转,例如“if (a <= b) goto BB2;”,四元式为:
<JLE,BB2,a,b>
////////对应的汇编代码//////////
movl a, %eax //把SRC1的值暂存在寄存器eax中
cmpl b, %eax&nbs
3185

被折叠的 条评论
为什么被折叠?