NASM gcc C/C++ Puffer speichern - wie?

02/04/2009 - 18:35 von Jens Kallup | Report spam
Hallo,

mal angenommen ich habe eine interrupt routine die
ab einer bestimmten Position Daten in den Speicher
einliest.
Wie kann ich dann aus gcc heraus die Parameter so
anzapfen, das in der nasm routine ES:BX der Puffer
übergeben wird?
Oder/und anders, wie kann ich in nasm es:bx im 32-
Bit bereich Daten hin- und her reichen?

; Beispiel ...
AX = 0000h
CX = length
ES:BX -> buffer

Danke für Infos
Jens
 

Lesen sie die antworten

#1 Markus Wichmann
02/04/2009 - 20:12 | Warnen spam
Jens Kallup wrote:
Hallo,

mal angenommen ich habe eine interrupt routine die
ab einer bestimmten Position Daten in den Speicher
einliest.
Wie kann ich dann aus gcc heraus die Parameter so
anzapfen, das in der nasm routine ES:BX der Puffer
übergeben wird?



Mit einem Wrapper, der der C Calling Convention entspricht. Aber: Im
16 bit-Modus besteht ein far pointer aus Segment und Offset. Du musst
also herausbekommen, wie diese Informationen von deinem Compiler
enkodiert werden. Wenn er beispielsweise 32 bit auf den Stack kopiert,
wobei dann [sp+2] das Offset ist und [sp+4] das Segment, dann ist die
Sache ja geritzt:

mov bx, [sp+2]
mov es, [sp+4]

Aber es kann ja auch irgendwie das Ergebnis von Shift und Or sein. Der
gcc ist recht gut dokumentiert, sieh mal nach, was du über den
16 bit-Modus finden kannst.

Oder/und anders, wie kann ich in nasm es:bx im 32-
Bit bereich Daten hin- und her reichen?




32 bit-Bereich? Dafür reicht ein Register aus. Oder meinst du den
32-Bit-Modus? Dann hast du eher Pages als Segmente, und die Situation
vereinfacht sich dramatisch: Ein Pointer ist nàmlich nur noch eine
einfache Zahl, nicht eine doppelte. Ach, und es:bx entfàllt dann, das
wird eher zu einem einfachen Pointer in ebx.

; Beispiel ...
AX = 0000h
CX = length
ES:BX -> buffer




Was soll passieren? Daten von es:bx sollen wohin/woher?

Danke für Infos
Jens



HTH,
Markus

GUI - ein Hintergrundbild und zwölf XTerms

vim -c "exec \"norm iwHFG#NABGURE#IVZ#UNPXRE\"|%s/#/ /g|norm g??g~~"

Ähnliche fragen