Page 1 of 1

32 bit

Posted: Sat Jan 20, 2007 7:47 am
by Jabus
heres just a quick question. If i want to use the 32 bit registers do i have to be in protected mode?

Posted: Sat Jan 20, 2007 7:48 am
by bubach
No, but you better check so that it's a 386 or higher first.

Posted: Sat Jan 20, 2007 7:51 am
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.

Posted: Tue Jan 30, 2007 8:26 am
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! :)

Posted: Tue Jan 30, 2007 11:44 am
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