176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; ----------------------------------------------------------------------- 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; Copyright 2005-2008 H. Peter Anvin - All Rights Reserved 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; This program is free software; you can redistribute it and/or modify 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; it under the terms of the GNU General Public License as published by 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; the Free Software Foundation, Inc., 53 Temple Place Ste 330, 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; Boston MA 02111-1307, USA; either version 2 of the License, or 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; (at your option) any later version; incorporated herein by reference. 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; ----------------------------------------------------------------------- 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; stack.inc 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; How to reset the stack pointer 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman%ifndef _STACK_INC 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman%define _STACK_INC 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; This macro resets the stack pointer (including SS), and sets 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; DS == ES == 0, interrupts on, DF = 0. 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; It takes a 16-bit register that can be safely clobbered as parameter. 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman; 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman%macro RESET_STACK_AND_SEGS 1 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman xor %1,%1 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mov ds,%1 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mov es,%1 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman lss esp,[BaseStack] 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mov dword [PMESP],__stack_end ; Reset PM stack 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman sti 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman cld 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman%endmacro 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman section .data16 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman alignz 4 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman global BaseStack:data hidden 4276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanBaseStack dd StackHome ; ESP of the "home" stack pointer 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman dw 0 ; SS of the "home" stack pointer 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman section .text16 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman%endif ; _STACK_INC 48