From mboxrd@z Thu Jan 1 00:00:00 1970 To: 9fans@cse.psu.edu Subject: Re: [9fans] calculating the gdt pointer in 32 bit (protected) mode From: andrey mirtchovski MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Message-Id: <20020124011654.DEFF419A1C@mail.cse.psu.edu> Date: Wed, 23 Jan 2002 18:16:29 -0700 Topicbox-Message-UUID: 42d361a6-eaca-11e9-9e20-41e7f4b1d025 the instruction is: BYTE $0x0f BYTE $0x01 BYTE $0x16 LONG $tgdptr-KZERO(SB) when traced it resembles: MOVL ([ESI]+($tgdptr-KZERO(SB))), GDTR (the 0x16 tells it that the address if offset from ESI) if instead one assembles: MOVL $tgdptr-KZERO(SB), GDTR (as it is written in the comments above the original instruction) then the third byte becomes 0x15 and it starts thinking that the pointer is actually a 32 bit displacement, which is even less correct (i think).. i'm going to start debugging using the proven trial- error method and will see which takes me to the correct GDT pointer.. am i correct in my assumption that i am unable to modify the ESI register? otherwise i'd be tempted to put the pointer value in ESI and execute the instruction with 0 displacement from ESI.. i could of course be terribly wrong in everything i've done so far... andrey