选择和循环语句的机器级表示
选择结构的机器级表示
• 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) {