2013-07-28 4 views
0

두 개의 정수를 나누고 부동 소수점 숫자를 얻으려는 경우 부동 결과를 결과 섹션에 표시하려고합니다. 문제는 그것이 정말로 큰 정수로 표시된다는 것입니다. 그리고 제가 제대로하고 있는지 잘 모르겠습니다.큰 정수 값으로 바뀌는 MASM 부동 소수점 결과

코드 :

정의 : 문제

floatVal   REAL4 0.0f 
numCount   SDWORD 0 
nextNum   SDWORD 0 
totalSum   SDWORD 0 
averageNum  SDWORD ? 

코드 :

fild totalSum 
fidiv numCount 
fstp floatVal 

나중에 디스플레이 :

mov  edx, OFFSET average_1 
call WriteString 
mov eax, floatVal 
call  WriteDec 
call  CrLf 

나는 irvine32 라이브러리를 사용하고, 그리고 이게 내 첫 번째 어셈블리 언어로 float를 사용하려고 시도하는 중 ttempt.

답변

1

실수로 32 비트 부동 소수점이 eax 레지스터에 들어가는 반면, WriteDec 함수는 정수를 예상하므로 의도하지 않은 출력을 생성하는 비트 패턴을 해석합니다. 수레는 그런 식으로 정수에 직접 매핑하지 않습니다.

결과를 정수로 변환하거나 수레를 인쇄하는 방법을 찾아야합니다.

만약 당신이 옳은 일을하고 있다면, 바로 디버거를 사용하십시오. 그런데 게시 한 코드가 정확하다고 보입니다.

+0

내가 찾고있을 때 놓친 irvine 함수 WriteFloat가 있습니다. 고맙습니다 –

관련 문제