aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/segmentation.rs35
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::*;