Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

hi guys I need help to make this assembly code work I dont know why using persay

ID: 3677836 • Letter: H

Question

hi guys I need help to make this assembly code work I dont know why using persay 1 and 2 as my input I get back

Enter two integer numbers : 1 2
1.000000 + 2.000000 = 0.007813
1.000000 - 2.000000 = -0.007813
1.000000 * 2.000000 = 0.000000
1.000000 / 2.000000 = 0.000000

#include <stdio.h>

int main() {

   float arg1, arg2, add, sub, mul, div ;

   printf( "Enter two integer numbers : " );
   scanf( "%f%f", &arg1, &arg2 );

   __asm__ ( "fldl %1 "
           "fldl %2 "
           "faddp "
           : "=&t" (add) : "m" (arg1), "m" (arg2) ) ;

   __asm__ ( "fldl %2 "
           "fldl %1 "
           "fsubp "
           : "=&t" (sub) : "m" (arg1), "m" (arg2) ) ;

   __asm__ ( "fldl %1 "
           "fldl %2 "
           "fmulp "
           : "=&t" (mul) : "m" (arg1), "m" (arg2) ) ;

   __asm__ ( "fldl %2 "
           "fldl %1 "
           "fdivp "
           : "=&t" (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 ;
}

Explanation / Answer

c program

#include <stdio.h>

int main()
{


    float arg1, arg2, add, sub, mul, div ;

    printf( "Enter two integer numbers : " );
    scanf( "%f%f", &arg1, &arg2 );

    __asm__ (        "fldl %1 "
              "fldl %2 "
              "faddp "
               : "=&t" (add) : "m" (arg1), "m" (arg2) ) ;

    __asm__ (        "fldl %2 "
              "fldl %1 "
              "fsubp "
               : "=&t" (sub) : "m" (arg1), "m" (arg2) ) ;

    __asm__ (         "fldl %1 "
              "fldl %2 "
              "fmulp "
               : "=&t" (mul) : "m" (arg1), "m" (arg2) ) ;

    __asm__ (         "fldl %2 "
              "fldl %1 "
              "fdivp "
               : "=&t" (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 ;

}

output:

Enter two integer numbers : 1 2                                                                                                                               

1.000000 + 2.000000 = 0.007813                                                                                                                                

1.000000 - 2.000000 = -0.007813                                                                                                                               

1.000000 * 2.000000 = -0.000000                                                                                                                               

1.000000 / 2.000000 = -0.000000

Assembly Code to generate