Fehler im code aber wo?
-
Hi,
in folgendem code mit inline ASM ist ein fehler aber ich finde ihn nicht :
int open_file(char *name,POSBLOCK *Position)
{
char current;
int eintrag;
int i;
int i2;
int equal;
eintrag = 0;
// Läd die FT an die Stelle 2000h:0000h
asm{
mov ah, 02h
mov al, 1
mov ch, 0
mov cl, 2
mov dh, 0
mov dl, 0
mov dx, 2000h
mov es, dx
mov dx, 0000h
}
// Sucht nach dem File
for(i = 0,i2 = 0,eintrag = 0;eintrag < Eintraege;i+=17)
{
asm mov si,2000h+i
for(i2 = 0;i2 < 11;i2++)
{
current = name[i2];
asm{
lodsb
mov bl,al
mov al,current
cmp bl,al
jne not_equal
}
equal = 1;
}
not_equal:
if(equal == 1)
{
unsigned char *pSI;
i += 13;
asm mov si, 2000h+i
asm mov pSI, si
if(Position != 0)
{
Position->CLYINDER = pSI[0];
Position->SECTOR = pSI[1];
Position->HEAD = pSI[2];
Position->LENGTH = pSI[3];
}
return eintrag;
}
eintrag++;
}
return 0;
}also der Aufbau in der FT(FileTable) ist wie folgt :
NAME 11 CHARS
ATRIBUTE 1 BYTE
PATHID 1 BYTE
CLYINDER 1 BYTE
SECTOR 1 BYTE
HEAD 1 BYTE
LENGTH 1 BYTEso ich such jetzt nur im Namen aber egal ob der Name exisitiert oder net klappt es nicht... weiß einer warum?
MFG
LordHoto
-
ok das mit dem int 13h nach laden und so ist verbessert aber es funzt immer noch net
MFG
LordHoto
-
keiner eine Ahnung?`
Oder kapiert einer etwas nicht ?MFG
LordHoto
-
wahrscheinlich. ich habs mir jetzt nicht näher angeguckt, aber die inline-assembler-anweisungen mitten im C-Code und dann auch noch in schleifen reingemischt, das kann nicht gut gehen. außerdem wird es nicht gehen, da dein compiler für schleifen-indizes mit aller wahrscheinlichkeit regs wie SI und DI benutzt und du die nicht sicherst und auch auf eig. faust änderst:
asm mov si,2000h+i
oder
lodsb
also: entweder alles in asm schreiben (dann siehst du auch, welche regs/vars du für schleifen-indizes benutzt) oder gar nix oder regs sichern und möglichst kein inline-asm in schleifen benutzen
und nochwas: in der regel hat keiner bock sonstwie viele zeilen code durchzusehen (bei dir gehts gerade noch so), um einen fehler zu finden, ganz davon abgesehen, dass bei größeren projekten keiner die geg. umstände kennt. wenn du gar nicht mehr weiter kommst, dann hilfts manchmal alles nix und du solltest alles nochmal schreiben, ohne dabei auf den alten code zu gucken bzw. den als vorlage zu verwenden.
cu todo
[ Dieser Beitrag wurde am 05.06.2003 um 17:10 Uhr von todo editiert. ]