Entwickler-Ecke
Algorithmen, Optimierung und Assembler - ASM Routine zur Frequenzmessung
suga2001 - Di 06.05.08 20:41
Titel: ASM Routine zur Frequenzmessung
hallo...und zwar bastel ich mal wieder an einer aufgabe herum,die irgendwie ,warum auch immer nicht wirklich funktionieren will. :oops:
ich habe zwei buttons,über den einen lese ich die frequenz aus der registry aus und mit dem anderen soll ich via zeitmessung und asm routine die frequnz bestimmten. leichter gesagt als getan. auslesen funktioniert, messen aber nicht.... bitte um ratschlag :) :idea:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Registry;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
var Form1: TForm1; M_Reg:TRegistry;Frequenz:extended;
implementation
{$R *.dfm}
function Messung:single; CONST Zeitdauer=500; Var StampHi,StampLo:Cardinal; begin ASM dw 310Fh mov StampLo,eax mov StampHi,edx END; sleep(Zeitdauer); ASM dw 310Fh sub eax,StampLO sbb edx,StampHi mov StampLo,eax mov StampHi,edx END; Frequenz:=StampLO/(1000.0*Zeitdauer) end;
procedure TForm1.Button2Click(Sender: TObject); begin Messung; end;
procedure TForm1.Button1Click(Sender: TObject); var M_Reg:TRegistry;Frequenz:integer; begin
M_Reg:=TRegistry.Create;
M_Reg.RootKey:=HKEY_LOCAL_MACHINE; if M_Reg.OpenKeyReadOnly ('\HARDWARE\DESCRIPTION\System\CentralProcessor\0\') then Frequenz:=M_Reg.READINTEGER('~MHZ') else Frequenz:=0; M_Reg.Free;
Label1.Caption:=inttostr(Frequenz);
end; end; |
ASM ist vorgegeben un nur der hinweis, dass es sich bei der vorgabe um 32 bit handelt, wir aber mit 64 arbeiten. :?: ist damit der typ gemeint, wie single,double oder extended??? :?:
danke schon mal im voraus :D
BenBE - Mi 07.05.08 08:49
hmmm, sollte es nicht sbc statt sbb heißen ???
suga2001 - Mi 07.05.08 14:28
Titel: sbc
nein,eben nicht.weil ich 2mal sub müsste, darf aber nicht,deswegen wird das zweite mal nicht sub sondern sbb geschrieben...
suga2001 - Mi 07.05.08 14:41
hab den entscheidenen fehler geunden, ; statt. :oops: aaaaber nun habe ich das nächste problem. das label, wo die frequenz ausgegeben werden soll, kann ich doch nicht in eine function schreiben, da eine function doch keinen rückgabewert habe, bzw diese nur abgewarbeitet wird, oder hab ich da etwas falsch verstanden`. ich möchte mit meinem button2click zur marke messung springen, macht er auch, aber ich will,dass er die frequenz im label2 ausgibt. in die function passt das nicht,also in den button2click, oder? denn bekomm ich aber die fehlermeldung "es gibt keine überladene version von 'inttostr', die man mit diesen argumenten aufrufen kann....
Martok - Mi 07.05.08 17:02
Ist auch richtig so: function Messung:single;
Die Funktion gibt einen Single zurück, also brauchst du FloatToString.
suga2001 - Mi 07.05.08 19:43
:D danke, nun passts.....
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!