数値で AND・OR・・を行う BITOP.dllを、アセンブラで書くと、 SECOND 2007/01/01 02:33:44 ├!bitop2.dllのテスト SECOND 2007/01/01 02:36:15 │└符号付き32ビット整数nを符号無し32ビット整... 白石 和夫 2007/01/01 10:22:10 └winXPではnasmが動かないようです。nasmwを... SECOND 2007/01/01 17:18:04
数値で AND・OR・・を行う BITOP.dllを、アセンブラで書くと、 SECOND 2007/01/01 02:33:44 ツリーへ
数値で AND・OR・・を行う BITOP.dllを、アセンブラで書くと、 |
返事を書く |
SECOND 2007/01/01 02:33:44 | |
;数値で AND・OR・・を行う BITOP.dllを、アセンブラで書くと、
;ファイルサイズは、8kから2k未満に減少し、高速化する。 ;ついでに、シフト・ローテイトの SHL SHR ROL ROR を追加した。 ;必要ファイルは、ココに、まとめておきました。 ; http://homepage2.nifty.com/neutro/asm/nasm_al.htm ;このリストは、掲載のために タブ文字を、全角スペースに取り替えており、 ;直接アセンブルできません。 ;半角スペースにするか、元のタブ文字に戻すか、 ;上記からダウンロードしたものを、使ってください。 ; bitop2.asm ;-------------------- ;アセンブルのコマンドラインと、ツールの入手先。 ; nasm -fobj bitop2.asm ;http://sourceforge.net/project/showfiles.php?group_id=6208 ; alink -oPE -dll bitop2.obj ;http://alink.sourceforge.net/download.html ;-------------------- global ANDop,ORop,NOTop,XORop,EQVop,IMPop,SHLab,SHRab,ROLab,RORab export ANDop ;1 label at 1 statement export ORop export NOTop export XORop export EQVop export IMPop export SHLab export SHRab export ROLab export RORab segment code public use32 ;dll entry point ..start: mov eax,1 ;flag success ;do nothing ret 4*3 ;remove 3 params after return ;STDCALL entry ;---- ;exported procedure ANDop: mov eax,[esp+4] ;a and eax,[esp+8] ;b ret 4*2 ORop: mov eax,[esp+4] ;a or eax,[esp+8] ;b ret 4*2 NOTop: mov eax,[esp+4] ;a not eax ret 4 XORop: mov eax,[esp+4] ;a xor eax,[esp+8] ;b ret 4*2 EQVop: mov eax,[esp+4] ;a xor eax,[esp+8] ;b not eax ret 4*2 IMPop: mov eax,[esp+4] ;a not eax or eax,[esp+8] ;b ret 4*2 SHLab: mov eax,[esp+4] ;a mov ecx,[esp+8] ;b shl eax,cl ret 4*2 SHRab: mov eax,[esp+4] ;a mov ecx,[esp+8] ;b shr eax,cl ret 4*2 ROLab: mov eax,[esp+4] ;a mov ecx,[esp+8] ;b rol eax,cl ret 4*2 RORab: mov eax,[esp+4] ;a mov ecx,[esp+8] ;b ror eax,cl ret 4*2 ends end |
├!bitop2.dllのテスト SECOND 2007/01/01 02:36:15 ツリーへ
Re: 数値で AND・OR・・を行う BITOP.dllを、アセンブラで書くと、 |
返事を書く |
SECOND 2007/01/01 02:36:15 | |
! bitop2.dll のテスト
! 返り引数が、符号付 32bits になるのは、不便な場合がある。 ! OPTION dll unsigned の様な、オプションがあれば? LET a=BVAL("1010",2) LET b=BVAL("11",2) CALL Unsign_Print(" a =", a ) CALL Unsign_Print(" b =", b ) CALL Unsign_Print("a AND b =", AND(a,b) ) CALL Unsign_Print("a OR b =", OR(a,b) ) CALL Unsign_Print(" NOT a =", BNOT(a) ) CALL Unsign_Print("a XOR b =", XOR(a,b) ) CALL Unsign_Print("SHL a,b =", SHL(a,b) ) CALL Unsign_Print("SHR a,b =", SHR(a,b) ) CALL Unsign_Print("ROL a,b =", ROL(a,b) ) CALL Unsign_Print("ROR a,b =", ROR(a,b) ) !---- equivalent(a,b) = not( xor(a,b) ) = Ex-NOR(a,b) CALL Unsign_Print("a eqv b =", BNOT(XOR(a,b)) ) CALL Unsign_Print("a EQV b =", EQV(a,b) ) !---- imply(a,b) = not( and(a, not(b)) ) = or(not(a), b) CALL Unsign_Print("a imp b =", OR( BNOT(a),b) ) CALL Unsign_Print("a IMP b =", IMP(a,b) ) CALL Unsign_Print("b imp a =", OR( BNOT(b),a) ) CALL Unsign_Print("b IMP a =", IMP(b,a) ) SUB Unsign_Print( w$, w ) IF w<0 THEN LET w=w+BVAL("100000000",16) ! unsigned32 w PRINT USING w$&">###############################":BSTR$(w,2) END SUB END EXTERNAL FUNCTION AND(a,b) ASSIGN "BitOp2.dll","ANDop" END FUNCTION EXTERNAL FUNCTION OR(a,b) ASSIGN "BitOp2.dll","ORop" END FUNCTION EXTERNAL FUNCTION BNOT(a) ASSIGN "BitOp2.dll","NOTop" END FUNCTION EXTERNAL FUNCTION XOR(a,b) ASSIGN "BitOp2.dll","XORop" END FUNCTION EXTERNAL FUNCTION SHL(a,b) ASSIGN "BitOp2.dll","SHLab" END FUNCTION EXTERNAL FUNCTION SHR(a,b) ASSIGN "BitOp2.dll","SHRab" END FUNCTION EXTERNAL FUNCTION ROL(a,b) ASSIGN "BitOp2.dll","ROLab" END FUNCTION EXTERNAL FUNCTION ROR(a,b) ASSIGN "BitOp2.dll","RORab" END FUNCTION EXTERNAL FUNCTION EQV(a,b) ASSIGN "BitOp2.dll","EQVop" END FUNCTION EXTERNAL FUNCTION IMP(a,b) ASSIGN "BitOp2.dll","IMPop" END FUNCTION |
│└符号付き32ビット整数nを符号無し32ビット整... 白石 和夫 2007/01/01 10:22:10 ツリーへ
Re: !bitop2.dllのテスト |
返事を書く |
白石 和夫 2007/01/01 10:22:10 | |
符号付き32ビット整数nを符号無し32ビット整数に変換するのはMOD(n,2^32)でできますが,反対に,符号無し32ビット整数を符号付き32ビット整数に変換するのはやや面倒なので,DLL呼び出しの結果は符号付き32ビット整数と解釈することにしています。
|
└winXPではnasmが動かないようです。nasmwを... SECOND 2007/01/01 17:18:04 ツリーへ
Re: 数値で AND・OR・・を行う BITOP.dllを、アセンブラで書くと、 |
返事を書く |
SECOND 2007/01/01 17:18:04 | |
winXPでは nasm が動かないようです。nasmw を使用して下さい。
すみません、win98SE で作業していたため気が付きませんでした。 ダウンロード・ページも、更新しておきます。 |