【发布时间】:2013-12-14 21:11:34
【问题描述】:
当我中断 main 时,看起来粗线是 i 被创建和初始化的地方。我想我完全错了,我试图从一本解释 x86 的书中检查 x86_64 程序集。这看起来很奇怪,我很确定我只是不明白在这本书中看到他说他将一个单词和 dword 称为 4 字节。如果我能得到一个解释来帮助我的无知,那将不胜感激。
(gdb) 列表
1 #include
2
3 int main()
4 {
5个整数我;
6 for(i=0; i :推送rbp
0x0000000100000f11 : mov rbp,rsp
0x0000000100000f14 : sub rsp,0x10
0x0000000100000f18 : mov DWORD PTR [rbp-0x4],0x0
0x0000000100000f1f : mov DWORD PTR [rbp-0x8],0x0
0x0000000100000f26 : cmp DWORD PTR [rbp-0x8],0xa
0x0000000100000f2d : jge 0x100000f54
0x0000000100000f33 : lea rdi,[rip+0x48] # 0x100000f82
0x0000000100000f3a : 移动,0x0
0x0000000100000f3c : 调用 0x100000f60
0x0000000100000f41 : mov DWORD PTR [rbp-0xc],eax
0x0000000100000f44 : mov eax,DWORD PTR [rbp-0x8]
0x0000000100000f47 : 添加eax,0x1
0x0000000100000f4c : mov DWORD PTR [rbp-0x8],eax
0x0000000100000f4f : jmp 0x100000f26
0x0000000100000f54 : 移动 eax,0x0
0x0000000100000f59 : 添加rsp,0x10
0x0000000100000f5d : 弹出 rbp
0x0000000100000f5e : ret
汇编程序转储结束。
【问题讨论】:
-
你是怎么知道一个字的大小是 8 个字节的?
-
由于处理器是 64 位的,我会说这个字的长度是 64 位,正如左边的地址所证实的那样。那么,是的,一个字是8个字节。也许你的书提到了 32 位处理器。
-
@HAL9000 字是 64 位长吗? nope.jpg
-
“单词”这个词在过去意味着某些东西,那时数据总线的大小与 ALU 和寄存器的大小相匹配。那些日子早已一去不复返了,这个词变得无可救药地模棱两可。像最初的 Pentium 这样的 32 位处理器已经使用了 64 位数据总线。而 64 位处理器具有 48 位地址总线。如果这本书经常谈论“词”,那么你肯定应该再找一个。
-
嗯,不,没有 x86_64 编译器为 int 使用 8 个字节。太贵了。 64 位架构不会为您购买两倍的缓存。
标签: assembly x86 size word x86-64