Re: Segment override and lldt instruction

Frank Kotler <[email protected]> Wed, 30 May 2007 20:45:58 -0400
Newsgroups org.kernel.vger.linux-assembly
Message-ID <[email protected]>
A D wrote:
> Hi! I have couple of questions regarding gnu assembly. I've heard the word
> segment override. Where segment register can be manually overriden. so 
> how can i
> override say ds register? can segment register be overriden to my preferred
> memory address location?
> 
> mov $0xf800, %ax
> mov %ax, %es
> mov %ds, %bx
> 
> But I get segmentation fault error. How can i do it without error?

Use a valid selector. You appear to have "heard about" some 16=bit real 
mode stuff that is not true in protected mode. Take a look here:

http://my.execpc.com/~geezer/johnfine/segments.htm

In "Linux assembly", there is no reason you'd *want* to use a segment 
override, or alter a segment register.

> 
> Also I was looking at the function of lldt instruction. The manual says 
> that:
> "The source operand (a general-purpose register or a memory location)
> contains a segment selector that points to a local descriptor table (LDT)."
> 
> How can one make segment selector point to ldt?

"lldt ax" or "lldt [mem]" (16-bits)... I guess. But why? The limit is 
0xffffffff and the base is 0. (Windows uses fs in a way that might be 
"interesting"..._

If you're developing your own OS (using Linux), starting from a 
bootsector - or GRUB - these instructions might be useful, but for 
"Linux assembly", forget that segment registers exist! (and be glad! :)

Best,
Frank