Mathe: Integer Extra

WRITEME

Mathematische Extra-Funktionen für Integer Zahlen

Integer

Sign (Mit Vorzeichen)

;=== Abs, Wenn Val1: >0 Ret=1, =0 Ret=0, <0 Ret=-1
;=== Abs(Val1) = Abs(Val1)
 MOV        EAX, Val1      ; EAX = Val1
 
 CMP        EAX, 0         ; EAX <?> 0
 JL         short Jump_Neg ; If EAX < 0 Then Goto Jump_Neg
 
 SAR        EAX, 31        ; Signet Bit auf Bit 1 verschieben (den Rest wegschneiden)
 
 JMP Jump_End
Jump_Neg:                  ; Zahl ist Negativ
 XOR        EAX, EAX       ; EAX = 0
 INC        EAX            ; EAX =- 1 (EAX = -1)
Jump_End:
;=== Sig, Wenn Val1: >0 Ret=1, <=0 Ret=0
;=== Sig(Val1) = Sig(Val1)
 MOV        EAX, Val1      ; EAX = Val1
 
 OR         EAX, EAX       ; EAX <?> 0
 JZ         short Jump_End ; If EAX = 0 Then Goto Jump_Neg
 MOV        EAX, 1         ; EAX = 1
Jump_End:
;=== Sign, Wenn Val1: >=0 Ret=1, <=0 Ret=-1
;=== Sign(Val1) = Sign(Val1)
 MOV        EAX, Val1      ; EAX = Val1
 
 SAR        EAX, 31        ; Signet Bit auf Bit 1 verschieben (den Rest wegschneiden)
 JNZ        short Jump_End ; If EAX <> 0 Then Goto Jump_Neg
 INC        EAX            ; EAX =- 1 (EAX = -1)
Jump_End:

UnSigned (Ohne Vorzeichen)

;=== Sign, Wenn Val1: >=0 Ret=1, <=0 Ret=-1
;=== Sign(Val1) = Sign(Val1)
 
 MOV         EAX, 1        ; UnSigned ist immer >= 0

Werte

;=== Swap, Vertauscht 2 Werte
;=== OrderMax = OrderMax(Val1, Val2)
 MOV       EBX, Val2           ; EBX = Val2
 MOV       EAX, Val1           ; EAX = Val1
 
 XCHG      EAX, EBX            ; EAX <=> EBX

Min Max

;=== SelectMin, Gibt den kleineren Wert zurück
;=== SelectMin = SelectMin(Val1, Val2)
 MOV       EBX, Val2           ; EBX = Val2
 MOV       EAX, Val1           ; EAX = Val1
 
 CMP       EAX, EBX            ; Val1 <?> Val2
 JLE       short Jump1         ; If Val1 <= Val2 Then Goto Jump1
Jump2:                         ; =Val2
 MOV       EAX, EBX            ; EAX = EBX
Jump1:                         ; =Val1
;=== SelectMax, Gibt den Groseren Wert zurück
;=== SelectMax = SelectMax(Val1, Val2)
 MOV       EBX, Val2           ; EBX = Val2
 MOV       EAX, Val1           ; EAX = Val1
 
 CMP       EAX, EBX            ; Val1 <?> Val2
 JGE       short Jump1         ; If Val1 >= Val2 Then Goto Jump1
Jump2:                         ; =Val2
 MOV       EAX, EBX            ; EAX = EBX
Jump1:                         ; =Val1
;=== OrderMin, Organisiert den kleinere Wert zuerst
;=== OrderMin = OrderMin(Val1, Val2)
 MOV       EBX, Val2           ; EBX = Val2
 MOV       EAX, Val1           ; EAX = Val1
 
 CMP       EAX, EBX            ; Val1 <?> Val2
 JLE       short Jump1         ; If Val1 <= Val2 Then Goto Jump1
Jump2:                         ; =Val2
 XCHG      EAX, EBX            ; EAX <=> EBX
Jump1:                         ; =Val1
;=== OrderMax, Organisiert den größere Wert zuerst
;=== OrderMax = OrderMax(Val1, Val2)
 MOV       EBX, Val2           ; EBX = Val2
 MOV       EAX, Val1           ; EAX = Val1
 
 CMP       EAX, EBX            ; Val1 <?> Val2
 JGE       short Jump1         ; If Val1 >= Val2 Then Goto Jump1
Jump2:                         ; =Val2
 XCHG      EAX, EBX            ; EAX <=> EBX
Jump1:                         ; =Val1

WRITEME Prozeduren die aus einer beliebig langen Liste von Werten, der größte/kleinste aussucht


Runtime/Mathe-Integer-Extra.txt · Zuletzt geändert: 2009/02/15 14:44 (Externe Bearbeitung)