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 BYTE

    so 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. ]


Anmelden zum Antworten