我是GDB的新手,目前正在尝试检查内存。我想头衔说了一切。基本上我编译了一些c代码并将断点设置为main。当我输入x/x $eip
时,它会给我一些机器指令0xd02404c7
在第二次尝试x/5x $eip
时,它返回了0x8048426 <main+9>: 0xd02404c7 0xe8080484 0xfffffebe 0x9066c3c9
0x8048436: 0x90669066
所以我在这里有点困惑。地址0x8048426--0x8048436之间的空间等于10.因此,事实证明四条指令采用了#34; 10地址&#34;。我的问题是:
内存地址最多可以存储4台机器指令吗?
为什么需要&#34; 10地址&#34;存储4台机器指令?
procceor有多少比特和单个内存地址存储的机器数量之间是否有任何关系?
对不起,如果这个问题听起来很傻。
答案 0 :(得分:0)
地址0x8048426--0x8048436之间的空格等于10.所以事实证明,有四条指令采用了#34; 10地址&#34;
不完全,它等于0x10,这是十六进制数,并且十进制等于16。 所以那些指令占用了16个字节。
内存地址可以存储最多4个机器指令吗?
地址的粒度为1个字节。也就是说,一个地址恰好是一个字节。
机器指令可能需要1个或更多字节。因此,单个内存地址(单个字节)最多可以存储1个机器指令,至少在x86上。
为什么需要&#34; 10个地址&#34;存储4台机器指令?
您看到的每个数字都不是指令。您看到的4个数字称为单词,是您的CPU通常使用的数字。
procceor有多少位和单个内存地址存储的机器数量之间是否有任何关系?
不是真的。单个存储器地址最多可存储一条指令。因为指令的长度至少为1个字节(对于x86)。
但&#34; proccesor有多少比特&#34;可以表示您的处理器可以访问扩展或不同的指令集。