C

时间:2015-07-25 14:15:23

标签: c assembly x86-64

让我清楚地说明情况,我正在学习使用gdb的c数据类型。

int main(){
int integer = 2;
return 0;
}
  • 首先我在我的程序中引入了一个int,它是4个字节x86 生成一个可接受的汇编代码如下。

    0x00000000004004ad <+1>:  mov    %rsp,%rbp   
    0x00000000004004b0 <+4>:  movl   $0x2,-0x4(%rbp)
    

然后我相信出了问题,我决定尝试char null_byte = '\0'

int main(){
char nul_byte = '\0';
int integer = 2;
return 0;
}
  • 现在我是c的新手,根据我所学到的,char使用1个字节,所以我在我的程序中初始化了char null_byte = '\0',并在下面编译了生成的汇编程序代码。
     0x00000000004004ad <+1>: mov    %rsp,%rbp
     0x00000000004004b0 <+4>: movb   $0x0,-0x1(%rbp)
     0x00000000004004b4 <+8>: movl   $0x2,-0x8(%rbp)

现在帮我解释为什么在引入null_byte char之后基址指针将8个字节移位到低位而不是4个?

0 个答案:

没有答案