;RCX: 1st integer argument
;RDX: 2nd integer argument
;R8: 3rd integer argument
;R9: 4th integer argument

;I should probably start converting to inrinsics

_TEXT SEGMENT 'CODE'
PUBLIC getCS
getCS:
	mov ax,cs
	ret

PUBLIC getSS
getSS:
	mov ax,ss
	ret
	
PUBLIC getDS
getDS:
	mov ax,ds
	ret
	
PUBLIC getES
getES:
	mov ax,es
	ret	
	
PUBLIC getFS
getFS:
	mov ax,fs
	ret
	
PUBLIC getGS
getGS:
	mov ax,gs
	ret	
	
PUBLIC GetTR
GetTR:
	STR AX
	ret	
	
PUBLIC GetLDT
GetLDT:
	SLDT ax
	ret
	
PUBLIC GetGDT
GetGDT:
	SGDT [rcx]
	ret
	
PUBLIC _fxsave
_fxsave:
    fxsave [rcx]
    ret
	
PUBLIC getRSP
getRSP:
	mov rax,rsp
	add rax,8 ;undo the call push
	ret	
	
PUBLIC getRBP
getRBP:
    push rbp
    pop rax	
	ret	
	
PUBLIC getRAX
getRAX:	
	ret							
	
PUBLIC getRBX
getRBX:
	mov rax,rbx
	ret	
	
PUBLIC getRCX
getRCX:
	mov rax,rcx
	ret	
	
PUBLIC getRDX
getRDX:
	mov rax,rdx
	ret		
	
PUBLIC getRSI
getRSI:
	mov rax,rsi
	ret		
	
PUBLIC getRDI
getRDI:
	mov rax,rdi
	ret		
	
PUBLIC getR8
getR8:
	mov rax,r8
	ret		
	
PUBLIC getR9
getR9:
	mov rax,r9
	ret		
	
PUBLIC getR10
getR10:
	mov rax,r10
	ret		
	
PUBLIC getR11
getR11:
	mov rax,r11
	ret		
	
PUBLIC getR12
getR12:
	mov rax,r12
	ret		
	
PUBLIC getR13
getR13:
	mov rax,r13
	ret		
	
PUBLIC getR14
getR14:
	mov rax,r14
	ret		
	
PUBLIC getR15
getR15:
	mov rax,r15
	ret				
	
PUBLIC getAccessRights										
getAccessRights:
  xor rax,rax
  lar rax,rcx
  jnz getAccessRights_invalid
  shr rax,8
  and rax,0f0ffh
  ret
  getAccessRights_invalid:
  mov rax,010000h
  ret


PUBLIC getSegmentLimit										
getSegmentLimit:
  xor rax,rax
  lsl rax,rcx
  ret

_TEXT   ENDS
        END

