组成原理的一个小疑问
我电脑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位
[解决办法]
很明显的问题,跟编译器和操作系统有关!
在64位系统上安装64位编译器就可以直接读写8BYTES的数据了。。。
我的编译器和os都是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