Mathe: Integer Basis

FIXME

Mathematische Basis-Operationen + - * /




;===============================================================================
;===============================================================================
;===============================================================================
;-------------------------------------------------------------------------------
 
 
 
;===============================================================================
comment * ----------------------------------------------------------------------
 
Infos:
-------
 
    XOR EAX, EAX    ; EAX = 0
ist schneller als
    MOV EAX, 0      ; EAX = 0
 
------------------------------------------------------------------------------ *
;===============================================================================
 
 
 
;===============================================================================
;======= Code-Deklaration
;-------------------------------------------------------------------------------
 
.386                          ; Minimal Anforderung an Prozessor
;.486                          ; Minimal Anforderung an Prozessor
;.586                          ; Minimal Anforderung an Prozessor
;.model flat, stdcall          ; Flat-Memory Modell 32Bit
option casemap :none          ; Case-Sensitive
 
 
 
 
 
;===============================================================================
;======= Includes von Externen Prozessen und APIs
;-------------------------------------------------------------------------------
 
 
 
 
 
;===============================================================================
;======= Public-Deklaration von Prozessen die Extern sichtbar sind
;-------------------------------------------------------------------------------
 
 
 
 
 
;===============================================================================
;======= Daten-Deklarationen
;-------------------------------------------------------------------------------
.data                         ; Daten-Block Beginn
 
 
 
 
 
;===============================================================================
;===============================================================================
;===============================================================================
;======= Code-Beginn
;-------------------------------------------------------------------------------
 
.code                         ; Code-Block Begin
 
 
 
 
 
;===============================================================================
;======= Proceduren für den Code
;-------------------------------------------------------------------------------
 
 
 
;-------------------------------------------------------------------------------
 
Test_Add PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
 
    ADD EAX, Val2
;@CheckOverflow
 
  RET
Test_Add ENDP
 
Test_Sub PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
 
    SUB EAX, Val2
;@CheckOverflow
 
  RET
Test_Sub ENDP
 
Test_Add1 PROC Public Val1:DWORD
 
  MOV EAX, Val1
 
    INC EAX
;@CheckOverflow
 
  RET
Test_Add1 ENDP
 
Test_Sub1 PROC Public Val1:DWORD
 
  MOV EAX, Val1
 
    DEC EAX
;@CheckOverflow
 
  RET
Test_Sub1 ENDP
 
 
 
Test_Mul PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV EBX, Val2
 
    MUL EBX         ; EDX:EAX = EAX * EBX
;@CheckOverflow
 
  RET
Test_Mul ENDP
 
Test_Div PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV EBX, Val2
 
    XOR EDX, EDX    ; EDX = 0
    DIV EBX         ; EAX = Quotient = EDX:EAX / EBX , EDX = Rest
;@CheckOverflow
 
  RET
Test_Div ENDP
 
Test_Mod PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV EBX, Val2
 
    XOR EDX, EDX    ; EDX = 0
    DIV EBX         ; EAX = Quotient = EDX:EAX / EBX , EDX = Rest
;@CheckOverflow
    MOV EAX, EDX    ; EAX = EDX
 
  RET
Test_Mod ENDP
 
Test_MulSig PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV EBX, Val2
 
    IMUL EBX         ; EDX:EAX = EAX * EBX
;@CheckOverflow
 
  RET
Test_MulSig ENDP
 
Test_DivSig PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV EBX, Val2
 
    XOR EDX, EDX    ; EDX = 0
    IDIV EBX         ; EAX = Quotient = EDX:EAX / EBX , EDX = Rest
;@CheckOverflow
 
  RET
Test_DivSig ENDP
 
Test_ModSig PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV EBX, Val2
 
    XOR EDX, EDX    ; EDX = 0
    IDIV EBX         ; EAX = Quotient = EDX:EAX / EBX , EDX = Rest
;@CheckOverflow
    MOV EAX, EDX    ; EAX = EDX
 
  RET
Test_ModSig ENDP
 
 
 
Test_NegSig PROC Public Val1:DWORD
 
  MOV EAX, Val1
 
    NEG EAX
 
  RET
Test_NegSig ENDP
 
 
 
;-------------------------------------------------------------------------------
 
Test_Pow2 PROC Public Val1:DWORD
 
  MOV EAX, Val1
 
    MUL EAX   ; EDX:EAX = EAX * EAX
;@CheckOverflow
 
  RET
Test_Pow2 ENDP
 
Test_Pow3 PROC Public Val1:DWORD
 
  MOV EAX, Val1
  MOV EBX, Val1
 
    MUL EAX   ; EDX:EAX = EAX * EAX
    MUL EBX   ; EDX:EAX = EAX * EBX
;@CheckOverflow
 
  RET
Test_Pow3 ENDP
 
Test_Pow4 PROC Public Val1:DWORD
 
  MOV EAX, Val1
 
    MUL EAX   ; EDX:EAX = EAX * EAX
    MUL EAX   ; EDX:EAX = EAX * EAX
;@CheckOverflow
 
  RET
Test_Pow4 ENDP
 
 
 
;-------------------------------------------------------------------------------
 
Test_ShtRgt PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV ECX, Val2
 
    SHR EAX, CL  ;! Kann nicht ECX sein
;@CheckOverflow
 
  RET
Test_ShtRgt ENDP
 
Test_ShtLft PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV ECX, Val2
 
    SHL EAX, CL  ;! Kann nicht ECX sein
;@CheckOverflow
 
  RET
Test_ShtLft ENDP
 
 
 
Test_ShtRgtSig PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV ECX, Val2
 
    SAR EAX, CL  ;! Kann nicht ECX sein
;@CheckOverflow
 
  RET
Test_ShtRgtSig ENDP
 
Test_ShtLftSig PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV ECX, Val2
 
    SAL EAX, CL  ;! Kann nicht ECX sein
;@CheckOverflow
 
  RET
Test_ShtLftSig ENDP
 
 
 
Test_RotRgt PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV ECX, Val2
 
    ROR EAX, CL  ;! Kann nicht ECX sein
;@CheckOverflow
 
  RET
Test_RotRgt ENDP
 
Test_RotLft PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV ECX, Val2
 
    ROL EAX, CL  ;! Kann nicht ECX sein
;@CheckOverflow
 
  RET
Test_RotLft ENDP
 
Test_RotRgtCary PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV ECX, Val2
 
    ROR EAX, CL  ;! Kann nicht ECX sein
;@CheckOverflow
 
  RET
Test_RotRgtCary ENDP
 
Test_RotLftCary PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
  MOV ECX, Val2
 
    ROL EAX, CL  ;! Kann nicht ECX sein
;@CheckOverflow
 
  RET
Test_RotLftCary ENDP
 
 
 
;-------------------------------------------------------------------------------
 
Test_BitNot PROC Public Val1:DWORD
 
  MOV EAX, Val1
 
    NOT EAX
 
  RET
Test_BitNot ENDP
 
Test_BitAnd PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
 
    AND EAX, Val2
 
  RET
Test_BitAnd ENDP
 
Test_BitOr PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
 
    OR EAX, Val2
 
  RET
Test_BitOr ENDP
 
Test_BitXor PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
 
    XOR EAX, Val2
 
  RET
Test_BitXor ENDP
 
Test_BitImp PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
 
    NOT EAX
    OR EAX, Val2
 
  RET
Test_BitImp ENDP
 
 
 
;-------------------------------------------------------------------------------
 
Test_Swap PROC Public Val1:DWORD, Val2:DWORD
 
  MOV EAX, Val1
 
    XCHG EAX, Val2
 
  RET
Test_Swap ENDP
 
 
 
 
 
;-------------------------------------------------------------------------------
;===============================================================================
;===============================================================================

Runtime/Mathe-Integer.txt · Zuletzt geändert: 2009/04/22 21:42 (Externe Bearbeitung)