32 bit

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
Jabus
Member
Member
Posts: 39
Joined: Sun Jan 07, 2007 7:54 am

32 bit

Post by Jabus »

heres just a quick question. If i want to use the 32 bit registers do i have to be in protected mode?
User avatar
bubach
Member
Member
Posts: 1223
Joined: Sat Oct 23, 2004 11:00 pm
Location: Sweden
Contact:

Post by bubach »

No, but you better check so that it's a 386 or higher first.
"Simplicity is the ultimate sophistication."
http://bos.asmhackers.net/ - GitHub
User avatar
Candy
Member
Member
Posts: 3882
Joined: Tue Oct 17, 2006 11:33 pm
Location: Eindhoven
Contact:

Post by Candy »

bubach wrote:No, but you better check so that it's a 386 or higher first.

or register an invalid opcode handler (which then errs out) or just expect a crash.
Jules
Member
Member
Posts: 30
Joined: Mon Jan 08, 2007 3:19 am
Location: UK

Post by Jules »

The invalid opcode exception was only introduced on 386, IIRC. I once wrote a 386 detection routine that was small enough to fit in my boot sector, alongside the routine to load my stage 2 boot loader from a file in the root directory of a FAT filesystem, AND intelligible error messages for when stuff went wrong. I thought that was pretty cool at the time! :)
User avatar
JAAman
Member
Member
Posts: 877
Joined: Wed Oct 27, 2004 11:00 pm
Location: WA

Post by JAAman »

if you want the code for this, it is quite simple:

Code: Select all

MOV AX, 0xF000           ; set all the high bits to 1
PUSHF                    ; save state of flags register before modifying
PUSH AX
POPF                     ; move AX into FLAGS
PUSHF
POP AX                   ; move it back -- anything in flags forced to a specific value is changed
POPF                     ; restore previous flags
AND AH,0xF0              ; mask out the bottom part, and move it into flags for checking
JS no386                 ; the sign bit is only set on 8086/8
JZ no386                 ; bits 12:15 0 on start, and cannot be changed in RMode on 286,
                                                ; but can on 386


:386code                 ; if you get here you have a 386

standard disclaimer:
this code is public domain, and can be used by anyone for any reason, and modified in any way -- im not responsible for any problems with this code
Post Reply