KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q68805: How to Reboot Your Machine Within a MASM Application

Article: Q68805
Product(s): Microsoft Macro Assembler
Version(s): 5.0,5.1,5.1a,6.0,6.0a,6.0b
Operating System(s): 
Keyword(s): 
Last Modified: 06-MAY-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Macro Assembler (MASM), versions 5.0, 5.1, 5.1a, 6.0, 6.0a, 6.0b 
-------------------------------------------------------------------------------

SUMMARY
=======

You can perform a complete reboot (cold boot) on an 8086-based machine by
jumping to the address FFFF:0000. This action also reboots many 80286 and 80386
machines. The address contains a jump instruction that leads to the machine's
initialization code. For this method to succeed, your machine must be in
real-mode operation.

MORE INFORMATION
================

To prevent a memory check on IBM and many compatibles (warm boot), you should
store the value 0 x 1234 in the memory location at 0040:0072. On 100-percent IBM
BIOS compatible machines, an alternative method is to call int 19h instead of
jumping to the address mentioned above.

Sample Code
-----------

  ; Assemble options needed: none

  .MODEL small

  .CODE

  Start:
      mov ax, @data                 ; Load ds with data segment
      mov ds, ax

      mov ax, 40h                   ; These three lines cause a memory
      mov es, ax                    ; test NOT to be performed. To
      mov WORD PTR es:[72h], 1234h  ; do a memory test, remove them.

      jmp DWORD PTR b_vec           ; Jump to the reboot address

  .DATA
  b_vec   DW 00000h                 ; Offset of reboot vector
          DW 0FFFFh                 ; Segment of reboot vector

  .STACK

  END Start

Additional query words: 5.10 5.10a 6.00 6.00a 6.00b

======================================================================
Keywords          :  
Technology        : kbMASMsearch kbAudDeveloper kbMASM510 kbMASM600 kbMASM500 kbMASM600a kbMASM510a kbMASM600b
Version           : :5.0,5.1,5.1a,6.0,6.0a,6.0b

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.