Suchroutine fehlerhaft...?



  • Hallo,
    habe eine Suchroutine geschrieben, die feststellen soll, ob der BIOS32 Service (_32_) vorhanden ist, die funktioniert auch und sieht wie folgt aus:

    pushad
      mov edx, 0x5F32335F
      mov esi, (0xE0000 - 1)
    .repete:
      inc esi
      mov eax, [esi]
      cmp eax, edx
      je near .get_out
      cmp esi, 0xFFFF0
      jbe near .repete
      jmp near .no_32
    .get_out:
      mov [.location], esi
      popad
      ret
    .no_32
      ;Fehlermeldung
      ret
    

    Weil diese Routine funktioniert habe ich gedacht ich modifiziere sie leicht, um mit ihr auch nach PMID zu suchen (Ja ich habe eine VESA 3 Karte und ich habe auch schonmal mit einem HEX Editor im SPeicher geschaut PMID ist da und an der richtigen Stelle):

    pushad
      mov edx, 0x44494D50
      mov esi, (0xC0000 - 1)
    .repete_p:
      inc esi
      mov eax, [esi]
      cmp eax, edx
      je near .get_out_p
      cmp esi, 0xFFFF0
      jbe near .repete_p
      jmp near .no_pmid
    .get_out_p:
      mov [.location], esi
      popad
      ret
    .no_pmid
      ;Fehlermeldung
      ret
    

    Tja und das funktioniert komischerweise nicht. PMID wird nicht gefunden, der PC Speaker ertönt (und geht erst nach Reset wieder aus), aber das Programm crasht net oder so. Was mache ich falsch? habe auch schonmal versucht den Speicherbereich vorher zu kopieren, sowie es in der VBE 3 Doc steht, aber Fehlanzeige, selbes Resultat.

    Könnt ihr mir helfen 😕



  • Du suchst den Bereich von C0000h bis FFFFFh.
    Es könnte sein das dort Hartware eingeblendet ist die
    bei mov eax, [esi] einen en Absturz verursacht.

    Oder es ist ein Speicherbereich nicht von der MMU eingeblendet.


Anmelden zum Antworten