我想组装一台电脑玩网络游戏的?基于相同指令集的机器码的代码质量有好坏么

时间:2018-01-11 12:12:02   浏览:次   点击:次   作者:   来源:   立即下载

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的机器上跑, 那这些机器码就显得\"质量差\"了.

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息