Questions tagged «machine-code»



2
什么是“ rep; 没事;” 在x86汇编中意味着什么?它与“暂停”指令相同吗?
什么rep; nop意思 与pause指示相同吗? 是否与rep nop(不含分号)相同? 简单nop指令有什么区别? 它在AMD和Intel处理器上的行为是否有所不同? (奖金)这些说明的正式文件在哪里? 这个问题的动机 在讨论另一个问题的评论后,我意识到我不知道rep; nop;x86(或x86-64)汇编的含义。而且我在网上也找不到很好的解释。 我知道这rep是一个前缀,表示“重复下一个指令cx时间”(或者至少在旧的16位x86汇编中是这样)。根据这一维基百科汇总表,似乎rep只能与使用movs,stos,cmps,lods,scas(但也许是对新的处理器去掉这个限制)。因此,我认为rep nop(没有分号)会重复一个nop操作cx时间。 但是,经过进一步的搜索,我变得更加困惑。似乎rep; nop和pause 映射到完全相同的操作码,并且pause行为与刚刚不同nop。2005年的一些旧邮件说了不同的话: “尽量不要消耗太多功率” “仅用2字节编码就相当于'nop'。” “这在英特尔上是神奇的。就像'nop,但让其他HT兄弟运行一样'” “在Intel上暂停,在Athlon上快速填充” 由于这些不同的意见,我无法理解正确的含义。 它是在Linux内核(两个正在使用的i386和x86_64的),这条评论在一起:/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */它也正在贝尔托斯使用,具有相同的注释。

2
与零比较时的int运算符!=和==
我发现!=和==并不是测试零或非零的最快方法。 bool nonZero1 = integer != 0; xor eax, eax test ecx, ecx setne al bool nonZero2 = integer < 0 || integer > 0; test ecx, ecx setne al bool zero1 = integer == 0; xor eax, eax test ecx, ecx sete al bool zero2 = !(integer < 0 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.