16、微 C 编译与现实世界抽象机器解析

微 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 的编译代码,如此循环。这种编译方式使得每次循环只需一次(条件)跳转,若不进行初始跳转,则每次循环需要两次跳转。由于循环体通常会执行多次,所以初始跳转的开销是值得的。
-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值