8086: Segment und Offset einer Adresse im Programmcode

29/11/2010 - 23:29 von Martin Eckel | Report spam
Hallo,

meine 8086er-Assemblerkenntnisse sind ziemlich eingerostet, aber ab und
an braucht man die doch noch mal.

Ich muß für einen embedded PC eine bestimmte BIOS-Funktion über int 15h
aufrufen. Das bekomme ich hin.
Eine Tabelle muß resident im Speicher verbleiben nach Programmende - das
frickel ich mir auch noch aus einem anderem Sourcecode zusammen.

Aber für den int 15h muß ich in CX das Segment dieser Tabelle und in DX
den Offset dieser Tabelle schreiben - der ganze Segment- und Offsetkram
war mir schon immer suspekt. Also, wie komme ich an die Adresse
innerhalb meines Codes ran?
Es handelt sich um ein COM-File, also gibts doch eh nur ein Segment,
wenn ich mich richtig erinnere?
Verdammt lang her das alles.

Gruß,
Martin
 

Lesen sie die antworten

#1 Vinzent Hoefler
30/11/2010 - 00:23 | Warnen spam
Martin Eckel wrote:

Aber für den int 15h muß ich in CX das Segment dieser Tabelle und in DX
den Offset dieser Tabelle schreiben - der ganze Segment- und Offsetkram
war mir schon immer suspekt. Also, wie komme ich an die Adresse
innerhalb meines Codes ran?



Ich gehe mal von DOS (.COM-Datei) als Betriebssystem aus.

Da es meiner Erinnerung nach keine Möglichkeit gibt, in DOS Speicher
so anzufordern, daß er nicht nach Beendigung des Programms wieder freigegeben
wird, müsstest Du diese Tabelle direkt in der COM-Datei unterbringen und
das ganze als T&SR bauen.

Damit wàre Segment dann Dein CS bzw. DS und der Offset halt der Offset
innerhalb der COM-Datei.

mov cx, ds
mov dx, OFFSET Table

sollte also ungefàhr das Gewünschte für den int 15h tun.

(Wobei ich mich gerade frage, welche Funktion das sein soll, irgendwie
klingelt da nix bei mir. Im ersten Moment dachte ich an Zeichentabelle,
aber die müßte doch mit dem Video-BIOS, also int10h zusammenhàngen.
Egal.)

Es handelt sich um ein COM-File, also gibts doch eh nur ein Segment,
wenn ich mich richtig erinnere?



Ja. (Wobei das natürlich niemanden daran hindert, zusàtzlich Speicher
von DOS anzufordern und über andere Segmentregister als CS und DS zu
adressieren.)

Verdammt lang her das alles.



Ja. Und ich werde auch nicht jünger. Von daher: Alle Angaben ohne Gewehr.


Vinzent.

Beaten by the odds since 1974.

Ähnliche fragen