Kein Zugriff auf Register des PM - MASM32
-
Hallo mal wieder,
nachdem der Versuch eines Bootloaders als .com Datei funktioniert, wollte ich mal versuchsweise in den PM schalten.
Tabellen hab ich erstellt und Interrupts deaktiviert. Aber schon beim Assemblieren mit ml.exe erhalte ich den Fehler das ein Zugriff auf die PM Register nicht möglich ist.Mir ist bewusst das MS das auch nicht unbedingt vorgesehen hat aber mit welchem Format aus MASM kann ich eine Datei mit Registerzugriff erstellen?
Herr Henkes nutzt FASM um .bin Dateien zu erstellen. Ich habe mich halt sehr an MASM gewöhnt und auch eine recht gute IDE dafür, auf die ich nicht verzichten möchte (WinASM).
Gibt es eine Möglichkeit (andere Parameter beim Assemblieren oder anderes Format) in MASM oder muss ich für diesen Schritt auf FASM zurückgreifen?
Gruß, Nicky
-
.686 -> .686p
-
masm schrieb:
.686 -> .686p
Na toll..
Enables assembly of all instructions (including privileged) for the 80486 processor.
also nur ein "p" dahinter und dann kann meine .com Datei die Tabellen in die Register laden...
Danke
Nicky
-
und nochmal ich..
Der Befehl lgdt [wert] wird bestreikt.
"Immediate Operand not allowed".
Operand nicht erlaubt. Wie übergebe ich MASM den richtigen Wert?.MODEL tiny .CODE .486p ORG 100h start: push ds pop es xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx xor esi, esi xor edi, edi cli LGDT [gdtr] mov eax, cr0 or eax, 01h mov cr0, eax jmp pmode ;jmp 08h:pmode wird verweigert pmode: mov ax, 0000000000010000b ;Index 2 der GDT nach AX mov ds, ax mov es, ax mov fs, ax mov ss, ax mov gs, ax mov esp, 0A00000h mov esi, offset string1 mov edi, 0A000h add edi, 160d mov ecx, 35d rep movsb ;Ende mov ax, 4C00h int 21h null_eintrag: dd 0 dd 0 code_segment: dw 0A00h ;Limit 0-15bit = 2560 dw 0 ;Basis 0-15bit = 0 wir beginnen am Anfang des RAM db 0 ;Basis 16-23bit flag1 db 10010010b ;Typ des Segments flag2 db 1100000b db 0 daten_segment: dw 0A00h ;Limit 0-15bit = 2560 dw 0 ;Basis 0-15bit = 0 wir beginnen am Anfang des RAM db 0 ;Basis 16-23bit flag3 db 10010010b ;Typ des Segments flag4 db 1100000b db 0 gdtr: dw 24d dd offset null_eintrag string1 db "Supernicky ist im Protected Mode...",0 END Start
Nicky
-
Also so schluckt es MASM:
LGDT fword ptr [gdtr]
Ob Dein Code sinnvoll ist, habe ich nicht überprüft, z.B.: Da MASM weiter im 16-Bit-Modus assembliert, muss auch der PM im 16-Bit-Modus laufen, sonst gibt es unliebsame Überraschungen. Außerdem musst Du Dir sicher sein, dass DS auf gdtr zeigt - vielleicht ist besser:
LGDT fword ptr [cs:gdtr]
viele grüße
ralph
-
rkhb schrieb:
Also so schluckt es MASM:
LGDT fword ptr [gdtr]
Ob Dein Code sinnvoll ist, habe ich nicht überprüft, z.B.: Da MASM weiter im 16-Bit-Modus assembliert, muss auch der PM im 16-Bit-Modus laufen, sonst gibt es unliebsame Überraschungen. Außerdem musst Du Dir sicher sein, dass DS auf gdtr zeigt - vielleicht ist besser:
LGDT fword ptr [cs:gdtr]
viele grüße
ralphDie Überraschung ist der interne Prozessorfehler
Ich habe mir mal NASM geladen und werde mich mal damit beschäftigen. Sieht ja fast gleich aus wie bei MASM.Trotzdem Danke
Nicky
-
START: DB 0EAh ; die folgenden Zeilen DW (OFFSET PMODE) ; erzeugen: DW 8 ; JMP FAR CS:PMODE ;--------------------------------------------- org START + ((($-START)/32)*32)+32 ; Code-Alignment ;--------------------------------------------- PMODE:
Dirk