of 23 /23
High-Level Language Interface Chapter 17 S. Dandamudi

High-Level Language Interface Chapter 17 S. Dandamudi

Embed Size (px)

Text of High-Level Language Interface Chapter 17 S. Dandamudi

  • Slide 1
  • High-Level Language Interface Chapter 17 S. Dandamudi
  • Slide 2
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 2 Outline Why program in mixed- mode? Focus on C and assembly Overview of compiling mixed-mode programs Calling assembly procedures from C Parameter passing Returning values Preserving registers Globals and externals Illustrative examples Calling C functions from assembly Inline assembly code AT&T syntax Simple inline statements Extended inline statements Inline examples
  • Slide 3
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 3 Why Program in Mixed-Mode? Pros and cons of assembly language programming Advantages: Access to hardware Time-efficiency Space-efficiency Problems: Low productivity High maintenance cost Lack of portability As a result, some programs are written in mixed- modem (e.g., system software)
  • Slide 4
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 4 Compiling Mixed-Mode Programs We use C and assembly mixed-mode programming Our emphasis is on the principles Can be generalized to any type of mixed-mode programming To compile nasm f elf sample2.asm Creates sample2.o gcc o sample1.out sample1.c sample2.o Creates sample1.out executable file
  • Slide 5
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 5 Compiling Mixed-Mode Programs
  • Slide 6
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 6 Calling Assembly Procedures from C Parameter Passing Stack is used for parameter passing Two ways of pushing arguments onto the stack Left-to-right Most languages including Basic, Fortran, Pascal use this method These languages are called left-pusher languages Right-to-left C uses this method These languages are called right-pusher languages
  • Slide 7
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 7 Calling Assembly Procedures from C (contd) Example: sum(a,b,c,d)
  • Slide 8
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 8 Calling Assembly Procedures from C (contd) Returning Values Registers are used to return values Return value typeRegister used 8-, 16-, 32-bit valueEAX 64-bit valueEDX:EAX Floating-point values are discussed in the next chapter
  • Slide 9
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 9 Calling Assembly Procedures from C (contd) Preserving Registers The following registers must be preserved EBP, EBX, ESI, and EDI Other registers If needed, should be preserved by the calling function
  • Slide 10
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 10 Calling Assembly Procedures from C (contd) Globals and Externals Mixed-mode programming involves at least two program modules One C module and one assembly module We have to declare those functions and procedures that are not defined in the same module as external See Section 5.10 Those procedures that are accessed by another modules as global
  • Slide 11
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 11 Illustrative Examples Example 1 hll_ex1c.c hll_test.asm Example 2 hll_minmaxc.c hll_minmaxa.asm Example 3 hll_arraysumc.c hll_arraysuma.asm
  • Slide 12
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 12 Calling C Functions from Assembly Stack is used to pass parameters (as in our previous discussion) Similar mechanism is used to pass parameters and to return values Since C makes the calling procedure responsible for clearing the stack of the parameters, make sure to clear the parameters after the call instruction as in add ESP,4 on line 31 in the example program on page 494
  • Slide 13
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 13 Inline Assembly Assembly language statements are embedded into the C code Separate assembly module is not necessary Assembly statements are identified by placing the keyword asm We can use ( ) to compound several assembly statements asm( assembly statement assembly statement... );
  • Slide 14
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 14 Inline Assembly (contd) AT&T Syntax GCC uses this syntax Register naming Prefix with % as in %eax Source and destination order Reversed mov eax,ebx is written as movl %ebx,%eax Operand size Explicit using b, w, l for byte, word, and longword operands
  • Slide 15
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 15 Inline Assembly (contd) AT&T Syntax (contd) Immediate and constant operands Prefix the operands with $ movb $255,%al movl $0xFFFFFFFF,%eax Addressing Use ( ) rather then [ ] mov eax,[ebx] is written as movl (%ebx),%eax Full protected-mode addressing format imm32(base,index,scale) Computed as imm32 + base + index*scale
  • Slide 16
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 16 Inline Assembly (contd) Simple Inline Statements asm(incl %eax); Multiple statements asm(pushl %eax); asm(incl %eax); asm(popl %eax); Can be Written as asm(pushl %eax; incl %eax; popl %eax); Or as (to add structure) asm(pushl %eax; incl %eax; popl %eax);
  • Slide 17
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 17 Inline Assembly (contd) Extended Inline Statements Format asm(assembly code :outputs :inputs :clobber list); Assembly code Add keyword volatile after asm if no compiler optimizations are needed
  • Slide 18
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 18 Inline Assembly (contd) Outputs Format =op-constraint (C-expression) Example =r(sum) Output constraints r = register m = memory i = immediate rm = register or memory, ri = register or immediate g = general
  • Slide 19
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 19 Inline Assembly (contd) Register letters LetterRegister set aEAX register bEBX register cECX register dEDX register SESI register DEDI register rAny of the 8 general registers (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP)
  • Slide 20
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 20 Inline Assembly (contd) Register letters LetterRegister set qAny of four data registers (EAX, EBX, ECX, EDX) AA 64-bit value in EAX and EDX fFloating-point registers tTop floating-point register uSecond top floating-point register
  • Slide 21
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 21 Inline Assembly (contd) Inputs Similar to how the outputs are specified (with no = sign) Operands specified in the output and input parts are assigned sequence numbers 0, 1, 2, Can be a total of 10 operands Example asm(movl %1,%0 :=r (sum) /* output */ :r (number1) /* input */ ); %0 refers to sum %1 to number1
  • Slide 22
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 22 Inline Assembly (contd) Clobber list List of registers modified by the assembly code Lets gcc know of this Example asm(movl %0,%eax : /*no output */ :r (number1) /* inputs */ :%eax /* clobber list */ );
  • Slide 23
  • 2005 To be used with S. Dandamudi, Introduction to Assembly Language Programming, Second Edition, Springer, 2005. S. Dandamudi Chapter 17: Page 23 Inline Assembly (contd) Inline examples Example 1 hll_ex1_inline.c Example 2 Array sum example hll_arraysum_inline.c Example 3 Second version of the last example hll_arraysum_inline2.c Last slide