我想组装一台电脑玩网络游戏的?基于相同指令集的机器码的代码质量有好坏么
CPU Intel i③ ②①⓪⓪¥⑦②⑤
主板 微星H⑥⑦S-C④③(B③)¥⑥⑨⓪
内存 金士顿②G/DDR③/①③③③ ①④⑤
硬盘 西数⑤⓪⓪G SATA③¥②⑤⓪
显卡 索泰④⑤⓪-①GD⑤极速¥⑧⑨⑨//显卡 影驰 GTS④⑤⓪黑将 ¥ ⑧⑨⑨
影驰GTX④⑥⓪
机箱: 动力火车 绝尘侠X③ ①⑤⓪
电源 长城 双动力④⓪⓪P④(BTX-④⓪⓪P④)②⑤⓪
LCD ③星 EX①⑦⑥⓪W ¥ ⑥②⑨
不知道楼主的需求无法给出配置
就给个性价比的配置吧
CPU:AMD ③核④核
主板:⑦⑧⑤G/⑧⑧⓪G
显卡:HD⑤⑦⑤⓪/GT④⑤⓪
硬盘:⑤⓪⓪G蓝盘/ST ⑤⓪⓪G
机箱电源:自己选
总价②⓪⓪⓪~③⓪⓪⓪
主流的游戏不在话下
希望能够楼主帮助!
有的, 这里不说怎么写好机器码, 那是编译器的工作. 仅举几个例子说明为什么有的机器码就是慢.
说到机器码, ①定要指明具体运行的芯片才有意义. 这里拿Intel最新的处理器架构Silvermont来说:
①. Silvermont有②个解码单元, 其中只有第①个能解码调用microcode. 那么, 如果汇编里连续调用过于复杂的指令. 则实际上Silvermont仅能使用①个解码器工作. 比如汇编没事就写:
div ebx;xchg rax, [rdx];div ebx;
这样译成机器码不慢还有谁慢?
②. Silvermont每次可以读取①⑥Byte的代码, 译码出最靠前的②条x⑧⑥指令, 如果其中有①条超过⑧Byte, 那么Silvermont只能译出①条来. 那么, 比如汇编里没事就写①⑤Byte长的指令:
lock add dword ptr es:[eax+ecx*⑧+⓪x①①②②③③④④], ⓪x①②③④⑤⑥⑦⑧;
这样译成机器码不慢还有谁慢?
③.Silvermont每次每条指令最多能译码③个前缀, 如果指令有③个以上前缀, 则有③个时钟周期的延迟, 比如没事用这种④前缀汇编指令:
pclmulqdq xmm⓪ · xmm⑧ · ⓪x①; #机器码是[⑥⑥ ④① ⓪F ③A ④④ C⓪ ⓪①], ⑥⑥ ④① ⓪F ③A均为前缀
这样译成机器码不慢还有谁慢?
④. Silvermont每个时钟周期只能译码出①个分支转移指令, 如果出现连续②个分支转移指令, 则后①个有③个周期的延时. 比如没事就把分支指令连续写:
test cl, cl;je ⓪x⑧⓪④f④③⓪;js ⓪x⑧⓪④f④④⓪;这样译成机器码不慢还有谁慢?
可以看到, 机器码本身没有好坏. 更多的是与处理器结构匹配的问题. 每个处理器都有自己的脾气, 喜欢这种格式的机器码, 不喜欢另①种格式的机器码. 因此, 在编译汇编, 翻译机器码时, 针对自己的CPU型号做定制是很有必要的. Intel的ICC编译器在编译代码时会先查看CPUID, 然后采用相应的编译优化选项, 使得代码在某①种型号的CPU上跑的更加快. 如果这时有程序猿把翻译好的机器码送到了AMD的机器上跑, 那这些机器码就显得\"质量差\"了.
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
