가 다음 코드 조각을 등록하여 분할 : 나는 그것을 컴파일하려고하면fidiv : 잘못된 피연산자 유형 오류
void calculate(int int_number) {
__asm {
fld1
mov eax, 5
fidiv eax ; A
}
}
의 선은 error C2415: improper operand type
와 함께 실패합니다. eax
을 정수 상수로 바꾸면 같은 문제가 발생합니다. 나는 fidiv
매개 변수로 int_number
를 통과 할 경우, :
void calculate(int int_number) {
__asm {
fld1
fidiv int_number
}
}
코드가 제대로 컴파일합니다.
그래서 레지스터로 나누는 것이 잘못된 이유는 무엇입니까?
Windows 8.1 64 비트에서 Visual Studio를 사용하고 있습니다.
기계 명령어 'fidiv'는 레지스터에 적용 할 수 없습니다. 간접 어드레싱을 사용하여 메모리에서 피연산자를로드해야합니다. 유일한 인수는'dword ptr CONSTANT [REGISTER]'형식이어야합니다. 'fidiv '를 쓸 때 컴파일러는 함수의 스택 프레임의 레이아웃에 따라'fidiv dword ptr OFFSET [ebp]'로 바꿉니다. –
ach