2013-02-22 2 views
0

저는 사용자가 Y를 입력하는 동안 (예를 들어) 반복하는 프로그램이 있습니다. 그런 다음 long float 유형의 데이터를 입력합니다. 또한 카운터에 r14가 있는데,이 카운터는 긴 float을 입력 할 때마다 카운트됩니다. 루프가 끝난 후 평균을 계산하고 싶습니다. 내가 이렇게하면 :longfloat와 int를 어셈블리로 나눕니다. x86-64

fld tword [r14] 

표시하고 세그먼트 오류가 발생합니다. Ive는 다른 것들도 시도했지만 항상 나에게 seg를줍니다. 결함을 표시하고 나눕니다. 문제는 r14가 int이고 FPU 스택에 넣을 수 없다는 것입니다. 그러나 나는 다른 방법을 이해할 수 없다.

누군가가 도와 줄 수 있습니까? 미리 감사드립니다.

+0

가능한 [x86 ASM에서 정수를 부동 소수점 값으로 변환하는 방법] (http://stackoverflow.com/questions/3027424/how-to-convert-an-integer-to-a-floating -point-value-x86-asm) –

답변

0

FPU 명령어는 메모리 또는 FPU 레지스터에서 인수를 가져 오지만 범용 CPU 레지스터에서 인수를 가져 오지 않습니다.

fld tword [r14]r14에 포함 된 주소의 메모리 위치에서 tword을 가져 와서 FPU 스택 맨 위에 푸시합니다.

r14이 10 바이트 부동 소수점 값을 읽을 수있는 메모리 위치를 가리 키지 않으면 세그먼트 화 오류가 발생합니다.

따라서 플로트를 메모리에 저장하고 거기에서 fld으로 읽습니다.

+0

나는 꽤 이해하지 못한다. 루프 내에서 이미 float에 fld를로드했습니다. 카운터와 나누기 연산을 수행하지 않습니다. 내가로드해야하는 fild와 같은 또 다른 방법이 있습니까? – vap

+0

단일 명령뿐만 아니라 코드를 보여주십시오. –