Intel IA-32 User Manual

Page 400

Advertising
background image

9-26 Vol. 3A

PROCESSOR MANAGEMENT AND INITIALIZATION

126

127 ; scratch areas for LGDT and LIDT instructions

128 TEMP_GDT_SCRATCH TABLE_REG <>

129 APP_GDT_RAM TABLE_REG <>

130 APP_IDT_RAM TABLE_REG <>

131 ; align end_data

132 fill DW ?

133

134 ; last thing in this segment - should be on a dword boundary

135 end_data LABEL BYTE

136

137 STARTUP_DATA ENDS

138 ; ------------------------------------------------------------

139

140

141 ; ------------------------- CODE SEGMENT----------------------

142 STARTUP_CODE SEGMENT ER PUBLIC USE16

143

144 ; filled in by builder

145 PUBLIC GDT_EPROM

146 GDT_EPROM TABLE_REG <>

147

148 ; filled in by builder

149 PUBLIC IDT_EPROM

150 IDT_EPROM TABLE_REG <>

151

152 ; entry point into startup code - the bootstrap will vector

153 ; here with a near JMP generated by the builder. This

154 ; label must be in the top 64K of linear memory.

155

156 PUBLIC STARTUP

157 STARTUP:

158

159 ; DS,ES address the bottom 64K of flat linear memory

160 ASSUME DS:STARTUP_DATA, ES:STARTUP_DATA

161 ; See Figure 9-4

162 ; load GDTR with temporary GDT

163 LEA EBX,TEMP_GDT ; build the TEMP_GDT in low ram,

164 MOV DWORD PTR [EBX],0 ; where we can address

165 MOV DWORD PTR [EBX]+4,0

166 MOV DWORD PTR [EBX]+8, LINEAR_PROTO_LO

167 MOV DWORD PTR [EBX]+12, LINEAR_PROTO_HI

168 MOV TEMP_GDT_scratch.table_linear,EBX

169 MOV TEMP_GDT_scratch.table_lim,15

170

171 DB 66H ; execute a 32 bit LGDT

172 LGDT TEMP_GDT_scratch

173

174 ; enter protected mode

Advertising