PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : INT 13 im C Programm


Format C:
18.08.2002, 02:12
moin

Ich möchte in meinen C Programm eine Assembler Routine mit einbauen, zum Physikalischen lesen von der Diskette

hier die Assembler Routine


__asm
{
push es

//mov ES:BX, test ????

mov ah, 2
mov al, 1 ; Anzahl Sectoren
mov ch, 0 ; Spur
mov cl, 1 ; Sector
mov dh, 0 ; Seite
mov dl, 0 ; Laufwerk
int 13h

pop es

}


in ES:BX werden die Daten reingeschrieben (512 Byte)
mit Push/Pop habe ich versucht das Register ES zu sichern, funzt aber nicht so.......es gibt da einen Schweren Fehler

hat jemand eine Idee wie ich die Daten in den Buffer cBuffer[600]=""; reingeschrieben bekomme ?

MfG


Felix Kaiser
18.08.2002, 10:59
Du hast den Zeiger ES:BX nicht inizialisiert. Erzeuge einen Zeiger auf deinen Puffer:

char *Buffer = &cBuffer;

Danach sollte dieser Opcode problemlos funktionieren:

LES BX,Buffer

Format C:
18.08.2002, 12:35
__asm
{
push es

les bx, cBuffer

mov ah, 2
mov al, 1 ; Anzahl Sectoren
mov ch, 0 ; Spur
mov cl, 1 ; Sector
mov dh, 0 ; Seite
mov dl, 0 ; Laufwerk
int 13h

pop es
}



es kommt ein Blue Screen, Fehler 0D an 175:00007A8, bla bla

Felix Kaiser
18.08.2002, 15:08
cBuffer ist kein Zeiger! Ich habe nicht ohne Grund gesagt, konvertiere zuerst temporär über eine char * Variable in einen Zeiger.

Format C:
24.08.2002, 14:05
Geht alles nicht so Richtig :(

Aber mit DeviceIoControl gehts :)

Felix Kaiser
24.08.2002, 15:07
Sag doch dass du es in einer Windowsanwendung brauchst, da ist nix mit Interrupts.