diff options
-rw-r--r-- | src/segmentation.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/segmentation.rs b/src/segmentation.rs index 8757add..1d61476 100644 --- a/src/segmentation.rs +++ b/src/segmentation.rs @@ -568,6 +568,41 @@ pub fn cs() -> SegmentSelector { SegmentSelector::from_raw(segment) } +/// Returns the current value of the extra segment register. +pub fn es() -> SegmentSelector { + let segment: u16; + unsafe { asm!("mov %es, $0" : "=r" (segment) ) }; + SegmentSelector::from_raw(segment) +} + +/// Returns the current value of the stack segment register. +pub fn ss() -> SegmentSelector { + let segment: u16; + unsafe { asm!("mov %ss, $0" : "=r" (segment) ) }; + SegmentSelector::from_raw(segment) +} + +/// Returns the current value of the data segment register. +pub fn ds() -> SegmentSelector { + let segment: u16; + unsafe { asm!("mov %ds, $0" : "=r" (segment) ) }; + SegmentSelector::from_raw(segment) +} + +/// Returns the current value of the FS segment register. +pub fn fs() -> SegmentSelector { + let segment: u16; + unsafe { asm!("mov %fs, $0" : "=r" (segment) ) }; + SegmentSelector::from_raw(segment) +} + +/// Returns the current value of the GS segment register. +pub fn gs() -> SegmentSelector { + let segment: u16; + unsafe { asm!("mov %gs, $0" : "=r" (segment) ) }; + SegmentSelector::from_raw(segment) +} + #[cfg(test)] mod test { use super::*; |