현재 간단한 C 컴파일러를 작성 중이며 .c 파일을 입력으로 사용하고 어셈블리 코드 (X86, AT & T 구문)를 생성합니다. Everyting은 좋지만 IDIVQ 명령어를 실행하려고하면 부동 소수점 예외가 발생합니다. 여기 내 입력이다 : 여기X86 어셈블리 - IDIV 명령 처리
int mymain(int x){
int d;
int e;
d = 3;
e = 6/d;
return e;
}
되어 내 생성 된 코드 :
mymain:
.LFB1:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
movq %rdi, -40(%rbp)
movq $3, -8(%rbp)
movq $6, %rax
movq -8(%rbp), %rdx
movq %rdx, %rbx
idivq %rbx
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1:
.size mymain, .-mymain
따르면 http://www.cs.virginia.edu/~evans/cs216/guides/x86.html에, idivq % RBX%의 RAX 6/D (몫)을 생성한다. 하지만 부동 소수점 예외가 발생하고 문제를 찾을 수 없습니다.
도움이 될 것입니다.
,하지만 당신은'movq의 %의 RDI, -40 (%의 RBP)을 일을해야 '하지 않고는'등록 esp' 조정 한? 아니면 x64 '레드 존'때문에 괜찮습니까? –