2014-03-03 1 views
0

나는 이상한 상황에 처해있다. 나는 갇혀있다. 우리가 비 선점 형 스케쥴러를 작성하는 OS 과정을 택하고 있습니다. 컨텍스트 스위치에서 시간 측정에 대한 간단한 계산을해야하는 상황에 처해 있습니다.changig x87 레지스터없이 십진수로 나누기

내 평균 계산에서

나는 소수와 부문을 필요로 오전, 내 코드는 지금 계산을위한 어셈블러에서 C 함수를 호출하고 화면하는 결과를 출력,이 C 함수는 나중에 내가 이중 실현, 더블를 사용 나누기는 get_time (C 함수) 함수가 컨텍스트 전환 바로 전에 호출되기 때문에 x87 레지스터가 변경됩니다. x87 레지스터에 대한 변경을 피하는 십진수 나누기를 할 수있는 방법이 있습니까? 나는 약간의 조언과 도움이 필요하다.

+0

오버플로없이 입력을 원하는 정밀도로 조절할 수있는 한 정수로 고정 소수점 나누기를 수행 할 수 있습니다. – pat

+1

컨텍스트 스위치 주위에 x87 레지스터를 저장/복원하지 않으면 스레드에서 사용하지 않아야하므로 운영 체제가 해당 항목을 지울 수 있어야합니다. – pat

+0

컨텍스트 스위치는 x87 레지스터를 저장하고 복원하며 4 개의 스레드가 Monte Carlo Pi를 계산하는 데 사용됩니다. Bochs는 math_abort를 제공합니다 : MSDOS 호환성 FPU 예외! – user265767

답변

0

나는 ASM에서 많은 기술을 보유하고 용도를 ​​등록하지 않지만 어쩌면 :

  • 당신이 당신의 레지스터를 밀어 마지막에 팝업 경우?
  • x87 레지스터로 이중 분할이 변경되었다고 가정하면 float은 무엇입니까?
+0

실제로 GNU 어셈블러를 사용합니다. float도 x87 레지스터를 변경합니다. ( – user265767

+1

이것은 답변이 아니라 제안 사항입니다. 주석 사용을 고려해보십시오. – BillyBigPotatoes