微 C 编译与现实世界抽象机器解析
微 C 语句编译
在微 C 语言的编译过程中,不同类型的语句有着各自独特的编译方式。
- 条件语句 :对于 if (e) stmt1 else stmt2 语句,生成的机器代码会先计算表达式 e 的值,并将其留在栈顶。若该值为零(表示假), IFZERO 指令会跳转到标签 lab1 ,执行 stmt2 的编译代码;若值不为零,则执行 stmt1 的编译代码,随后 GOTO 指令会跳转到标签 lab2 ,避免执行 stmt2 。
- 循环语句 : while (e) body 语句的编译代码以跳转到标签 lab2 开始。在 lab2 处计算条件 e 的值并留在栈顶,若值非零(为真), IFNZRO 指令会跳转到标签 lab1 ,执行 while 循环体的编译代码。执行完循环体后,再次执行表达式 e 的编译代码,如此循环。这种编译方式使得每次循环只需一次(条件)跳转,若不进行初始跳转,则每次循环需要两次跳转。由于循环体通常会执行多次,所以初始跳转的开销是值得的。
-
超级会员免费看
订阅专栏 解锁全文
620

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



