diff options
-rw-r--r-- | src/task.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/task.rs b/src/task.rs index a7637f2..e71ea8f 100644 --- a/src/task.rs +++ b/src/task.rs @@ -3,7 +3,14 @@ pub use crate::segmentation; -/// Load the task state register. +/// Returns the current value of the task register. +pub fn tr() -> segmentation::SegmentSelector { + let segment: u16; + unsafe { asm!("str $0" : "=r" (segment) ) }; + segmentation::SegmentSelector::from_raw(segment) +} + +/// Loads the task register. pub unsafe fn load_tr(sel: segmentation::SegmentSelector) { asm!("ltr $0" :: "r" (sel.bits())); } |