Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo, hab ein kleines Prob möchte einen Wert in einem Speichersegment auslesen. Weiß aber nicht wie ich das mache.

Wert liegt bei EX:BX.

Wie kann ich nun darauf zugreifen? Ich weiß,ich muss den Segmentzeiger verschieben, aber wie?

MVg

need-some-blood

Geschrieben

Hallo,

kannst Du das noch etwas genauer beschreiben? Was ist in dem Register enthalten, ein Pointer auf eine Speicherstelle die ausgelesen werden soll oder direkt der auzulesende Wert? Mit Standard-C wirst Du das gewünschte Ergebniss nicht erreichen, allerdings gibt es die Möglichkeit inline Assembler einzubinden (wobei das wiederum Compiler-Abhängig ist, mit welchem Compiler arbeitest Du)?

Sofern Du einen Zeiger innerhalb eines C-Programms hast, kannst Du alternativ auch mit memory mapped files arbeiten (zumindes unter Unix/Linux).

Nic

Geschrieben
...Der Fehlerzustand wird im Puffer bei ES:BX abgelegt...
Quelle das Handbuch

Also wird der direkte Wert dort abgelegt.

Arbeite mit BC3.1 for DOS. das ganze soll auf RDos aufsetzen. Und es muss 80186 kompatibel sein. Die Kiste ist der BC660 von Beck. klickste hier

Momentan weiß ich echt net weiter.

MVg

need-some-blood

Geschrieben

int far* fehlerzustand;

int segment;

int offset;


/* Aufruf deiner Funktion */


asm {

   mov segment,es;

   mov offset,bx;

}


fehlerzustand = (segment << 0x10) & offset;

weiß aber net, ob das funzt, d.h. ob nach dem aufruf der Funktion es und bx wirklich noch nicht von anderem Code überschrieben worden sind.

test it

Geschrieben

Also, wenn du schon borland nimmst, dann kannst du auch folgendes machen:


int far * fehlerzustand;


/* funktionsaufruf */

bla();


fehlerzustand = _ES << 0x10 & _BX;
Wie rufst du eigentlich diese Funktion auf? ist es ne C-Funktion? Oder ein Interrupt? Wenn es ein Interrupt ist, dann gehts auch so:

#include <dos.h>


...


union REGS generic;

union SREGS segment;

int far * fehlerzustand;


generic.ax = blabla;     /* Parameter setzen */

.

.


/* Interruptaufruf mit int86x(). Deklaration:

    int int86x (int nr, union REGS *in, union REGS *out, struct SREGS *seg) */


int86x(interruptnummer,&generic,&generic,&segment);


fehlerzustand = segment.es << 0x10 & generic.bx;

/* bzw: */

fehlerzustand = MK_FP(segment.es,generic.bx); /* in dos.h definiert */


/* Über den Zeiger fehlerzustand kannst du jetzt auf den Wert zugreifen */

Hope this helps

  • 2 Wochen später...
Geschrieben

So einfach gehts


/***************************************************

		-= Analogeingang lesen =-

Funktionsaufruf : 	ReadAnIn(Eingangsadresse "0..2");

Rueckgabewert:		-KEINER-

***************************************************/

int GetAnIn (unsigned char AnIn)

{

  union REGS inregs, outregs;

  struct SREGS segregs;

  int buffer;


  inregs.h.ah = 0xd0;

  inregs.x.dx = 0x0500;

  segregs.es  = FP_SEG(&buffer);

  inregs.x.bx = FP_OFF(&buffer);

  inregs.h.cl = AnIn;


  int86x(SRV_INT, &inregs, &outregs, &segregs);


  cout <<"Eingang lesen: Kanal "<<inregs.h.cl<<",wert: "<<buffer<<",Fehler: "<<outregs.x.ax<<endl;


  return buffer;

}

MVG

need-some-blood

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...