📄 bits.hhf
字号:
#if( ! @defined( bits_hhf ))?bits_hhf := true;namespace bits;readonly SpreadBitsOdd8 :word[256]; @external( "BITS_SPREADBITSODD8" ); SpreadBitsEven8 :word[256]; @external( "BITS_SPREADBITSEVEN8" ); reversedBits :byte[256]; @external( "BITS_REVERSEDBITS" ); procedure cnt( BitsToCnt:dword in eax ); @returns( "eax" ); @external( "BITS_CNT" ); procedure distribute( source:dword; mask:dword; dest:dword ); @returns( "eax" ); @external( "BITS_DISTRIBUTE" ); procedure coalesce( source:dword; mask:dword ); @returns( "eax" ); @external( "BITS_COALESCE" ); #macro extract( d ); #if( @string:d = "eax" ) #error( "Cannot pass EAX as a parameter to bits.extract" ) #endif bsf( d, eax ); if( @nz ) then btr( eax, d ); else mov( -1, eax ); cmp( eax, eax ); // Must set zflag. endif; #endmacro procedure reverse32( BitsToReverse:dword in eax ); @returns( "eax" ); @external( "BITS_REVERSE32" ); procedure reverse16( BitsToReverse:word in ax ); @returns( "ax" ); @external( "BITS_REVERSE16" ); procedure reverse8( BitsToReverse:byte in al ); @returns( "al" ); @external( "BITS_REVERSE8" ); procedure merge8( even:byte; odd:byte ); @returns( "ax" ); @external( "BITS_MERGE8" ); procedure merge16( even:word; odd:word ); @returns( "eax" ); @external( "BITS_MERGE16" ); procedure merge32( even:dword; odd:dword ); @returns( "edx:eax" ); @external( "BITS_MERGE32" ); procedure nibbles8( theByte:byte in al ); @returns( "ax" ); @external( "BITS_NIBBLES8" ); procedure nibbles16( theWord:word in ax ); @returns( "eax" ); @external( "BITS_NIBBLES16" ); procedure nibbles32( theDWord:dword in eax ); @returns( "edx:eax" ); @external( "BITS_NIBBLES32" );end bits;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -