c变量的压栈操作

int main()
{
   long t = 10;
   int x = 10;
   short y = 20;
   char c = 'a';
    return 0;
}
生成的汇编如下
1long t = 10 
⇒
movq    $10, -16(%rbp)   
也就是 10 存储在下面8字节中。
 %rbp - 16 
 %rbp - 15
 %rbp - 14
 %rbp - 13
 %rbp - 12
 %rbp - 11
 %rbp - 10
 %rbp - 9

int x = 10;
 ⇒
movl    $10, -8(%rbp)

也就是 10 存储在下面4字节中。
 %rbp - 8
 %rbp - 7
 %rbp - 6
 %rbp - 5

short y = 20;
 ⇒
movw    $20, -4(%rbp)

也就是 10 存储在下面2字节中。

   %rbp - 4

 %rbp - 3

char c = 'a';

 ⇒
movb    $97, -1(%rbp)

也就是 a存储在下面1字节中。
 %rbp - 1

从上面的例子可以看出,变量值从低地址到高地址存放。

posted @ 2017-09-04 16:52  蜗牛码  阅读(233)  评论(0编辑  收藏  举报