Macht dieses Programm was ich denke was es macht?
-
Ich habe ein Programm (Linux,gcc,Inlineassembler) geschrieben und jetzt weiß ich nicht, ob es das macht, was ich will.
Es soll machen: An der Druckerschnittstelle liegt am ACK-Pin (Pin 10 der Schnittstelle, 7. Bit Offset 1) ein Signal mit einer Frequenz von 500 kHz an. Dieses soll so lange überprüft werden, bis dass 16 mal hintereinander das Signal 1 war. Mein Computer arbeitet mit 333 MHz und dtrate ist demzufolge 666.
Und hier ist das Programm:
asm(" rdtsc
movl %%eax,%%ebx
addl %2,%%ebx
movl $0x0000,%%esi
anfang:
call nulllesen
bt $0x04,%%esi
jnc warnix
jmp ende
warnix:
jmp anfangnulllesen:
inb $0x0379,%%eax
bt $0x06,%%eax
jnc einsles
addl $0x0001,%%esi
jmp lesfertig
einsles:
movl $0x0000,%%esi
lesfertig:
call wartstart
retwartstart:
rdtsc
sub %%ebx, %%eax
jae weiter
jmp wartstart
weiter:
addl %2,%%ebx
retende:"
: "=a"(enderg),"=c"(y)
: "g"(dtrate)
: "%eax","%ebx","%ecx","%edx","%esi");Machts das, was ich geschrieben habe?
-
Ist mein Programm denn soooo kompliziert?
-
Original erstellt von James:
Ist mein Programm denn soooo kompliziert?Vielleihct ists nicht das Programm, nur mit der gcc-Syntax kann ich persönlich überhuapt nichts anfangen, vielelicht ast das Ding ja auch mal in Intel-Syntax ohne gcc
[ Dieser Beitrag wurde am 30.08.2002 um 11:10 Uhr von TriPhoenix editiert. ]
-
Sorry, ich bin leider auch nicht (so) vertraut mit der AT&T Syntax.
Müssten da nicht zumindest INTs nach 80h gehen, um die Schnittstelle abzufragen? Da Linux im PMode läuft wirst du wohl nicht die Berechtigung haben direkt darauf zugreifen zu können (es sei denn du schreibst ein Kernelmodul).
Und wie machst du das Timing? Du weist ja, dass du dich nicht auf die Ausführzeit eines Befehls verlassen darfst, die du einfach so ausgerechnet hast (Cache(miss);...).mfg
-bg-