c语言语句的机器级表示实训,选择和循环语句的机器级表示.pdf

本文详细探讨了选择结构如if-else语句在机器级的表示,强调了条件转移和无条件转移指令在流程控制中的作用。以C语言函数`get_cont`为例,解释了参数传递和返回值存储的机制,并展示了如何在IA-32架构中实现。此外,还提及了switch-case语句在程序设计中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择和循环语句的机器级表示

选择结构的机器级表示

• if ~ else语句的机器级表示 if (cond_expr)

then_statement

else

else_statement

红框处为条件转移指令!

篮框处为无条件转移指令!

If-else语句举例

int get_cont( int *p1, int *p2 ) { p1和p2对应实参的存储地址分别为

if ( p1 > p2 ) R[ebp]+8、R[ebp]+12,EBP指

else return *p2; 向当前栈帧底部,结果存放在EAX。

return *p1;

}

SKIP

入口参数的位置

movl 参数3,8(%esp) 准备 返回地址是什么?

……….. 入口

movl 参数1, (%esp) 参数 call指令的下一条指令的地址!

call add R[esp]←R[esp]-4

M[R[esp]]←返回地址

R[eip]←add函数首地址 • IA-32中,若参数类型是

unsigned char、char或

unsigned short、short,

也都分配4个字节

• 故在被调用函数中,使用

R[ebp]+8、R[ebp]+12、

EBP+16 入口参数3

R[ebp]+16作为有效地址来

EBP+12 入口参数2 访问函数的入口参数

EBP+8 入口参数1

• 每个过程开始两条指令

返回地址

pushl %ebp

EBP EBP在main中的值

movl %esp, %ebp

BACK

switch-case语句举例

int sw_test(int a, int b, int c) R[eax]=a-10=i

{

int result; if (a-10)>7 转 L5

switch(a) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值