우리의 학습 과제는 GNU 어셈블리에서 delta = b2 - 4ac 함수를 생성하고 C에서 액세스하도록 요청합니다. 이것은 컴파일러에 관한 과정이므로 어셈블리가 아니기 때문에 교수 정수 기능을 보여 주기만하고 정수 기능을 기대합니다.어셈블리 함수의 부동 소수점 복귀 액세스
그러나 저는 개인적인 학습이 의무를 넘어서고 정수가 아닌 부동 소수점을 반환하는 유용한 함수를 만들고 싶습니다.
# include <stdio.h>
extern float delta();
float a, b, c;
int main() {
a = 3;
b = 5;
c = 4;
printf("δ = %f\n", delta());
return 0;
}
이 GNU 가스 :
.globl a
.globl b
.globl c
.globl delta
.f4: .float 4.0 # constante 4
.text
delta:
fld b # b sur la pile
fmul b # b2 sur la pile
fld .f4 # 4 sur la pile
fmul a # 4a sur la pile
fmul c # 4ac sur la pile
fsubp # b2 - 4ac sur la pile
ret
내가이 C를 내놓았다 (하지 말자 전역 마음, 다음 연습의 목적은 적절한 매개 변수 기능을하는 것입니다)
Google에서 나는 부동 소수점 스택 맨 위에 부동 소수점 결과를 남겨 두어야한다고 생각하게되었지만 작동하지 않으며 C 호출자에 인쇄 된 결과는 항상 0.0000000입니다.
나는 아주 작은 것을 놓치지 만, 인터넷 검색 량이 없다면 누가 올바른 방향으로 나를 가리킬 수 있습니까? 감사합니다.
감사합니다. m32 옵션은 내가 놓친 것입니다. 지금은 덜 유용한 방법으로 나머지 유용한 설명을 읽을 것입니다. 고맙습니다. – pouzzler
어셈블 할 때'as'를 사용하면 해당 플래그는'as32 -o delta.o delta.s' 명령과 같이'--32'입니다. – Edward