Sender: nate AT cartsys DOT com Message-ID: <370ED3B7.63FE8F3B@cartsys.com> Date: Fri, 09 Apr 1999 21:29:43 -0700 From: Nate Eldredge X-Mailer: Mozilla 4.08 [en] (X11; I; Linux 2.2.5 i586) MIME-Version: 1.0 To: djgpp AT delorie DOT com Subject: Re: Help needed in getting CR0 under DOS References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: djgpp AT delorie DOT com yjtseng wrote: > > Thanks for the reply. > > I don't think it is a privileged instruction based on the following quote > from the Intel Architecture Software Developer's Manual page 2-13: > > In protected mode, the move-to-or-from-control-registers > forms of the MOV instruction allow > the control registers to be read (at any privilege level) or > loaded (at privilege level 0 only). This > restriction means that application programs (running at > privilege levels 1, 2, or 3) are prevented > from loading the control registers; however, application > programs can read these registers. Interesting. The 80386 Programmer's Reference Manual (published by Intel) on page 17-111 describes MOV to/from special registers (CRx, DRx, TRx), and it says: Protected Mode Exceptions: #GP(0) [general protection fault --NE] if the current privilege level is not 0 ... Notes: The instructions must be executed at privilege level 0 or in real-address mode; otherwise, a protection exception will be raised. [end of quote] The SMSW instruction, which exists for 286 compatibility, stores the low 16 bits of CR0 in its operand, and can be executed regardless of privilege. But that may omit some of the bits you want. -- Nate Eldredge nate AT cartsys DOT com