首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

结成原理的一个小疑问

2013-10-11 
组成原理的一个小疑问我电脑cpu是Intel(R) Core(TM)2 Quad 64位的,意思应该就是数据总线是64根吧?64位意思

组成原理的一个小疑问
   我电脑cpu是Intel(R) Core(TM)2 Quad 64位的,意思应该就是数据总线是64根吧?64位意思是cpu可以同时处理一个64bit的数。
   我的问题是:按理说在c中cpu可以将一个long long类型(64bit)的数以原操作的方式存入内存。应该是这样吧?但是我的实验的结果是,存一个64bit的数,cpu还是分了两步,第一步是先存高32位,第二步再存低32位,为什么会是这种结果?按道理说cpu一次就可以完成这个功能的呀?
   希望哪位大神能详细的解释一下,谢谢
[解决办法]
http://blog.csdn.net/max_min_go/article/details/9149585

看看
[解决办法]
先看看芯片手册:Intel(R) Core(TM)2 Quad 64
确认一下地址总线/数据总线的宽度,接着看看寄存器宽度。
再接着看看你的编译器的实现,编译器参数是否支持64位等,
最后最直接的结构看反汇编,看看编译后的结果是用64位的指令操作码还是32位的指令操作码。
[解决办法]
64位CPU应该指寄存器是64位的,而总线宽度则不一定是64位
[解决办法]

引用:
Quote: 引用:

选择什么指令怎么组织数据是编译器干的活,怪不到CPU头上。

CPU方面应该是有提供64位操作的,但编译器未必采用。

1.intel收到机器指令后,其实会对指令再次优化,所以感觉您的第一句未必
2.我使用了gcc的某条命令(忘是哪个命令了)显示我的编译目标代码是运行在x86_64下的,所以我的程序是64位程序

有再次优化的可能性,但这个,准确来说我觉得称不上是优化,其实就是内部机制怎么处理这条指令而已吧。汇编这层差不多已经可以理解成机器指令的助记符了,一般观察程序内部行为也就观察到这一层了吧?难道lz的“存一个64bit的数,cpu还是分了两步,第一步是先存高32位,第二步再存低32位”是在其它某种更底层的途径观察得到的结论?
否则如果是来自汇编层观察的结果,那么我说这一层的结果只是编译器的劳动成果又有何问题?

是否64位程序这个我也不知道有没有明确的概念,不过不能因为有个类似64的编译选项就简单的认为编译器做了各种针对64位机的优化吧,还是要翻手册看看该版本的该编译指令到底做了什么。
[解决办法]
long long ==>rax ,         64 位寄存器
                 edx:eax     2*32 位寄存器

r0,  ~                       r7,   r8 ~r16
rax,rbx,rcx,rdx,rsi,rdi,rsp,rbp,


你只要查看汇编或者调试的时候,看下反汇编,就知道是32位,还是64位代码了
 
[解决办法]
引用:
Quote: 引用:

很明显的问题,跟编译器和操作系统有关!
在64位系统上安装64位编译器就可以直接读写8BYTES的数据了。。。

我的编译器和os都是64位的

64位LINUX 编译器64位

int main()
{
    long long var1=1;
    long long var2=2;
    var1=var2;

    return 0;
}



mov    QWORD PTR [rbp-0x10],0x1
mov    QWORD PTR [rbp-0x8],0x2
mov    rax,QWORD PTR [rbp-0x8]
mov    QWORD PTR [rbp-0x10],rax

热点排行