小布龙神契约辅助:利用汇编语言写出高效的3x+1程序

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 05:26:16
任取一个自然数,如果它是偶数,我们就把它除以2,如果它是奇数,
我们就把它乘3再加上1。在这样一个变换下,我们就得到了一个新的
自然数。如果反复使用这个变换,我们就会得到一串自然数。是否对于所有自然数,这一串生成的序列都会陷入4-2-1的循环中呢?这就是3x+1问题。
现在我要编写一个解决这个问题的程序,其中的核心部分就是用汇编把这个东西表达出来。待运算数有64bit,高位放在ebx,低位放在eax。si和di分别记录总步数和奇变换的数目。

注意:至少要比以下的程序效率高:
start6:
__asm test ax, 1
__asm jz evenpre6
//oddpre6
__asm test ax, 2
__asm jz res126
//res36:
__asm add di, 2
__asm add si, 4
__asm mov ecx, eax
__asm mov edx, ebx
__asm shl eax, 1
__asm rcl ebx, 1
__asm inc eax
__asm jc of6
__asm shrd ecx, edx, 2
__asm shr edx, 2
__asm stc
__asm adc eax, ecx
__asm adc ebx, edx
__asm jmp start6
evenpre6:
__asm test ax, 2
__asm jnz res126
//res06:
__asm add si, 2
__asm shrd eax, ebx, 2
__asm shr ebx, 2
__asm jmp start6
res126:
__asm add si, 3
__asm inc di
__asm mov ecx, eax
__asm mov edx, ebx
__asm shrd ecx, ebx, 2
__asm shr edx, 2
__asm sub eax,ecx
__asm sbb ebx, edx
__asm jmp start6

太难了!

完全看不懂 还是JAVA简单