Forum: PC-Programmierung define in c für asm mit rückgabewert


von anfeanger (Gast)


Lesenswert?

Kann mir bitte jemand zeigen/schreiben, wie ich ein define für die 
Funktion inb erzeuge? danke.

unsigned char inb(unsigned short int port)
  {
  unsigned char data = 0x00;

  asm("mov %1, %%dx;inb %%dx, %0;" : "=r" (data) : "g" (port));

  return(data);
  }

#define outb(value, port) asm("mov %0, %%dx;mov %1, %%al;out %%al, 
%%dx;" : : "g" (port), "g" (value));

von Sven P. (Gast)


Lesenswert?

Was stört dich an der Funktion?
Warum benutzt du nicht inb/outb aus den Systemheadern?

von anfeanger (Gast)


Angehängte Dateien:

Lesenswert?

Stell mir doch mal eine Frage die ich dir beantworten kann ...

Also ich wollte, dass ein bestimmter Quellcode unter linux und windows 
absolut identisch ist. Irgendwie habe ich die Erfahrung gemacht, dass 
die Funktionen inb und outb unter Windows/DOS nicht verfügbar sind. Also 
in den header-dateien die mit "C and C++ IDE 4.0.0.0" mitgeliefert 
werden finde ich die nicht. Auch im MinGW paket finde ich dich. Mag sein 
dass ich mich nur zu blöd anstelle aber ich wollte da "hokus pokus" ein 
Ergebnis haben welches ich an dieser Stelle auch direkt einmal 
präsentieren möchte.

Was C angeht habe ich ein wenig hier gelesen, ein wenig dort gelesen, 
die Prozessoren von Atmel habe ich auch schon mehrfach erfolgreich mit 
GCC zum funktionieren gebracht.

Eigentlich wäre eine Antwort auf meine ursprüngliche rage ja nicht so 
wichtig da dass was ich da vorhatte ja funktioniert. Interessieren würde 
mich eine Lösung dennoch. Wenn es denn keine Umstände macht.

von Reinhard Kern (Gast)


Lesenswert?

anfeanger schrieb:
> Kann mir bitte jemand zeigen/schreiben, wie ich ein define für die
> Funktion inb erzeuge? danke.

Hallo,

ist dir klar, dass unter Windows kein I/O-Portzugriff zulässig ist?

Gruss Reinhard

von anfeanger (Gast)


Lesenswert?

Reinhard Kern schrieb:

> ist dir klar, dass unter Windows kein I/O-Portzugriff zulässig ist?

Also dass das nicht zulässig sein soll war mir nicht bekannt. Aber da 
das mein Computer ist, und ich auf den Druckerport zugreifen will, tue 
ich das. Aus diesem Grund schrieb ich ja die weiter oben dargestellen 
Funktionen welche hier tadellos funktionieren.

Das wäre ja  noch schöner wenn ich mir hier vorschreiben liesse was mein 
Computer können darf und was nicht.

von anfeanger (Gast)


Lesenswert?

Da fällt mir ein, für Windows gibt es unter anderem die Datei 
inpout32.dll welche einen IO-Zugriff ermöglicht. Diese lässt sich unter 
anderem in VB nutzen. So lässt sich dann eine Active-X Komponente 
erzeugen. Diese wiederum kann dann auch in VBScript genutzt werden. Also 
wenn das funktioniert ...

Ich will ja jetzt keinen Streit anzetteln ... aber wenn man mit linux 
IO-Zugriff haben kann dann seh ich keinen Grund warum windows das nicht 
auch können darf.

Das wäre so als würde ich behaupten dass ich jetzt etwas besseres wäre 
als ihr. Linux is auch nur ein Betriebssystem.

von anfeanger (Gast)


Lesenswert?

@ Reinhard Kern

Ah... jetzt fällt hier der Gröschen... du willst sicherlich auf Windows 
NT Systeme anspielen so wie hier beschrieben:

   http://www.pci-card.com/menu3.html

Ich darf zu meiner Schande gestehen, dass ich noch immer mit windows 98 
arbeite und daher nie wirklich Probleme mit irgendwelchen IO-Zugriffen 
hatte, was wiederum der Grund ist dass ich dieses noch immer nutze. 
Jetzt bitte keine Sprüche zu dem von mir noch genutzen Windows 98 ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.