| | |
protected mode
Please support our Assembly advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Oct 2007
Posts: 19
Reputation:
Solved Threads: 1
Now i have been able to create the gdt's and when i change to pmode, will a short JMP flush the instruciton prefetch queue? here is a sample of my code and the gdt and gdtr content,
whta am i suppose to do to make my pmode correct, i mean be able to use the descriptors without rebooting? writing to the RAM? pleeeeeeeeeeeeeeeeaaaaaaaaaaaase help. Sam
Assembly Syntax (Toggle Plain Text)
mov ax,07c00h mov ds,ax lgdt [ds:descr] ;switch to pmode by setting bit 0 of CR0 ;after switching to pmode jmp pmode; when i use JMP 0:7c00h+pmode ir reboots, the 1st 0 is code gdt pmode: ;here when i try to write to RAM, it will reboot mov ax,8h;the data segment mov ds,ax;it reboots here mov ax,0f44h mov [0h],ax descr: db 0ffh,0ffh,00h,00h,07ch,gdt gdt: db 0ffh,0ffh,0,0,0,8a,0cfh,0;code segment db 0ff,0ffh,0,0,0,82,0cfh,9;data segment
Last edited by Ancient Dragon; Dec 2nd, 2007 at 10:04 am. Reason: add code tags
•
•
Join Date: Dec 2007
Posts: 34
Reputation:
Solved Threads: 4
Looked at Fine's stuff, good in itself, doesn't help you, though.
Here's from http://en.wikipedia.org/wiki/Protected_mode
The point here is to force the assembler to use a far jump. For some assemblers, unfortunately, this requires:
For the Pentium and later processors, clearing the prefetch queue is no longer necessary.
Here's from http://en.wikipedia.org/wiki/Protected_mode
Assembly Syntax (Toggle Plain Text)
; set PE bit mov eax, cr0 or eax, 1 mov cr0, eax ; far jump (cs = selector of code segment) jmp cs:@pm @pm: ; Now we are in PM.
The point here is to force the assembler to use a far jump. For some assemblers, unfortunately, this requires:
Assembly Syntax (Toggle Plain Text)
db 0eah ;far jump
For the Pentium and later processors, clearing the prefetch queue is no longer necessary.
•
•
Join Date: Dec 2007
Posts: 34
Reputation:
Solved Threads: 4
My first thought was "Well, you're probably rebooting because of a triple-fault. Have you defined your interrupt descriptor table (IDT)?"
But now I really see the 7c00, and suppose you're writing a bootloader. It's a lot easier, nowadays, to let grub do the bootloader stuff, but if you insist, there's a lot to go wrong.
What's the nature of your project? Are you just experimenting to learn a lot?
But now I really see the 7c00, and suppose you're writing a bootloader. It's a lot easier, nowadays, to let grub do the bootloader stuff, but if you insist, there's a lot to go wrong.
What's the nature of your project? Are you just experimenting to learn a lot?
•
•
Join Date: Mar 2008
Posts: 2
Reputation:
Solved Threads: 0
•
•
•
•
Assembly Syntax (Toggle Plain Text)
; far jump (cs = selector of code segment) jmp cs:@pm @pm: ; Now we are in PM.
The point here is to force the assembler to use a far jump. For some assemblers, unfortunately, this requires:
Sorry that I've posted a similar question on another thread here. I found this thread after I posted that.
So, how can "jmp cs: @pm" jumps to "@pm"? Isn't it supposed to jump to the physical address "cs * 16 + @pm"?
Last edited by koyi; Mar 8th, 2008 at 1:37 am.
![]() |
Similar Threads
- protected mode programming guide (Assembly)
- Protected mode reboots (Assembly)
- Help needed for a project concerning protected mode (Assembly)
- 32 BIt Flat Real mode (Community Introductions)
- Protected Mode Memory Map (C)
Other Threads in the Assembly Forum
- Previous Thread: Far jump to a label?
- Next Thread: Converting this code to support Windows 98
| Thread Tools | Search this Thread |





