新しく発言する EXIT インデックスへ
数値でAND・OR・・を行うBITOP.dllを、アセ...

  数値で 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 で作業していたため気が付きませんでした。
ダウンロード・ページも、更新しておきます。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。