Intel IA-32 User Manual

Page 402

Advertising
background image

9-28 Vol. 3A

PROCESSOR MANAGEMENT AND INITIALIZATION

222 MOV ECX, CS_BASE

223 ADD ECX, OFFSET (IDT_EPROM)

224 MOV ESI, [ECX].table_linear

225 MOV EDI,EAX

226 MOVZX ECX, [ECX].table_lim

227 MOV APP_IDT_ram[EBX].table_lim,CX

228 INC ECX

229 MOV APP_IDT_ram[EBX].table_linear,EAX

230 MOV EBX,EAX

231 ADD EAX,ECX

232 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]

233

234 ; fixup IDT pointer in GDT

235 MOV [EDX].bas_0_15+IDT_DESC_OFF,BX

236 ROR EBX,16

237 MOV [EDX].bas_16_23+IDT_DESC_OFF,BL

238 MOV [EDX].bas_24_31+IDT_DESC_OFF,BH

239

240 ; load GDTR and IDTR

241 MOV EBX,RAM_START

242 DB 66H ; execute a 32 bit LGDT

243 LGDT APP_GDT_ram[EBX]

244 DB 66H ; execute a 32 bit LIDT

245 LIDT APP_IDT_ram[EBX]

246

247 ; move the TSS

248 MOV EDI,EAX

249 MOV EBX,TSS_INDEX*SIZE(DESC)

250 MOV ECX,GDT_DESC_OFF ;build linear address for TSS

251 MOV GS,CX

252 MOV DH,GS:[EBX].bas_24_31

253 MOV DL,GS:[EBX].bas_16_23

254 ROL EDX,16

255 MOV DX,GS:[EBX].bas_0_15

256 MOV ESI,EDX

257 LSL ECX,EBX

258 INC ECX

259 MOV EDX,EAX

260 ADD EAX,ECX

261 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]

262

263 ; fixup TSS pointer

264 MOV GS:[EBX].bas_0_15,DX

265 ROL EDX,16

266 MOV GS:[EBX].bas_24_31,DH

267 MOV GS:[EBX].bas_16_23,DL

268 ROL EDX,16

269 ;save start of free ram at linear location RAMSTART

270 MOV free_mem_linear_base+RAM_START,EAX

Advertising