011
02.06.2006, 21:24 Uhr
Helmut
|
Hi!
C++: |
#include <stdlib.h> #include <stdio.h> #include <time.h> #include <iostream> using namespace std;
int randFunc();
int main() { for(int i = 10000; i; i--) { cout << "rand ->" ; cout.width(6); cout << right << rand()%200+1; cout.width(11); cout << right << randFunc(); cout << " <- randFunk" << endl; } }
#define RANDOM 200; //0x7fff //max -> 0x7fffffff
__declspec(naked) int randFunc() {
#define FAKTOR 3141592653 static int lager = 1; // <--- muss ungrade sein !!
_asm mov eax, lager _asm mov ecx, FAKTOR _asm mul ecx _asm mov lager, eax _asm mov ecx, RANDOM _asm mul ecx _asm inc edx _asm mov eax, edx _asm ret }
|
Stackrahmen braucht man für diese Funktion nicht, der Compieler würde die Register esi, edi, und ebx sichern und wiederherstellen. Diese Register benutzt die Funktion nicht.
wenn man schreibt #define RANDOM 200, dann gibt die Funktion Zahlen zwischen 1 und 200 aus, man braucht nicht func()%200+1 schreiben.
wenn man analog s_rand mit nem Timerwert initialisieren will, muss man int lager als globale Variable anlegen und mit Timerwert initialisieren --> anschließend lager |= 1; nicht vergessen! ( muss ungrade sein!) mfg |