please help get this to work in linux, when I run it I get a message rft.c: Asse
ID: 3677827 • Letter: P
Question
please help get this to work in linux, when I run it I get a message rft.c: Assembler messages: rft.c:10: Error: operand type mismatch for `fld' rft.c:10: Error: operand type mismatch for `fld' rft.c:10: Warning: translating to `faddp' rft.c:10: Error: operand type mismatch for `fstp' rft.c:15: Error: operand type mismatch for `fld' rft.c:15: Error: operand type mismatch for `fld' rft.c:15: Warning: translating to `fsubp' rft.c:15: Error: operand type mismatch for `fstp' rft.c:20: Error: operand type mismatch for `fld' rft.c:20: Error: operand type mismatch for `fld' rft.c:20: Warning: translating to `fmulp' rft.c:20: Error: operand type mismatch for `fstp' rft.c:25: Error: operand type mismatch for `fld' rft.c:25: Error: operand type mismatch for `fld' rft.c:25: Warning: translating to `fdivp' rft.c:25: Error: operand type mismatch for `fstp' #include <stdio.h> int main() { float arg1, arg2, add, sub, mul, div ; printf( "Enter two integer numbers : " ); scanf( "%f%f", &arg1, &arg2 ); __asm__ ( "fld %1;" "fld %2;" "fadd;" "fstp %0;" : "=g" (add) : "g" (arg1), "g" (arg2) ) ; __asm__ ( "fld %2;" "fld %1;" "fsub;" "fstp %0;" : "=g" (sub) : "g" (arg1), "g" (arg2) ) ; __asm__ ( "fld %1;" "fld %2;" "fmul;" "fstp %0;" : "=g" (mul) : "g" (arg1), "g" (arg2) ) ; __asm__ ( "fld %2;" "fld %1;" "fdiv;" "fstp %0;" : "=g" (div) : "g" (arg1), "g" (arg2) ) ; printf( "%f + %f = %f ", arg1, arg2, add ); printf( "%f - %f = %f ", arg1, arg2, sub ); printf( "%f * %f = %f ", arg1, arg2, mul ); printf( "%f / %f = %f ", arg1, arg2, div ); return 0 ; }
Explanation / Answer
#include <stdio.h>
int main() {
float arg1, arg2, add, sub, mul, div ;
printf( "Enter two integer numbers : " );
scanf( "%f%f", &arg1, &arg2 );
__asm__ ( "fld %1;"
"fld %2;"
"fadd;"
"fstp %0;" : "=m" (add) : "m" (arg1), "m" (arg2) ) ;
__asm__ ( "fld %2;"
"fld %1;"
"fsub;"
"fstp %0;" : "=m" (sub) : "m" (arg1), "m" (arg2) ) ;
__asm__ ( "fld %1;"
"fld %2;"
"fmul;"
"fstp %0;" : "=m" (mul) : "m" (arg1), "m" (arg2) ) ;
__asm__ ( "fld %2;"
"fld %1;"
"fdiv;"
"fstp %0;" : "=m" (div) : "m" (arg1), "m" (arg2) ) ;
printf( "%f + %f = %f ", arg1, arg2, add );
printf( "%f - %f = %f ", arg1, arg2, sub );
printf( "%f * %f = %f ", arg1, arg2, mul );
printf( "%f / %f = %f ", arg1, arg2, div );
return 0 ;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.