Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 11 Interfacing C and Assembly Code. Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 2 Learning Objectives 

Similar presentations


Presentation on theme: "Chapter 11 Interfacing C and Assembly Code. Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 2 Learning Objectives "— Presentation transcript:

1 Chapter 11 Interfacing C and Assembly Code

2 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 2 Learning Objectives  Different methods exist for interfacing C and assembly code:  Calling assembly from C.  Interrupt calling assembly routine.  Intrinsics.  Programming requirements when interfacing code.

3 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 3Introduction  This chapter shows how to interface C and assembly and how to use intrinsics.  As a general rule the code written in C is used for initialisation and for non-critical (in terms of speed or size) code.  Critical code (in terms of speed/size) can be written in assembly or linear assembly.  There are three different ways to interface C and assembly code: (1)C code call to the assembly function. (2)An interrupt can call an assembly function. (3)Call an assembly instruction using intrinsics.

4 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 4 Calling Assembly from C  The C and assembly functions share the same resources (e.g. registers).  The C and assembly functions may exchange data.  Therefore code interfacing requires a means of handing-off data and control info and some rules of handling shared registers. main () { y = asmFunction (a, b); } _asmFunction bb3

5 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 5 Calling Assembly from C  Use “_” underscore in assembly for all variables or functions declared in C.  Labels also need to be global. main_c.c int asm_Function (short, short); short x = 0x4000, y = 0x2000; int z; void main (void) { z = asm_Function (x, y); } asm_Function.c int asm_Function (short a, short b) { int y; y = (a * b) << 1; return y; }asm_Function.asm.global _asm_Function

6 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 6 Passing Arguments between C and Assembly  The following registers are used to pass and return variables when calling an assembly routine from C. AB arg1/r_val arg3 arg5 arg7 arg9 ret addr arg2 arg4 arg6 arg8 arg10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 150

7 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 7 Passing Arguments between C and Assembly  Before assembly call. 0x40000x20004 5 6 7 8AB 0x80000x200045 6 7 8  After return from assembly call.

8 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 8 Passing Arguments between C and Assembly Problem:  The C code will use some or all of the registers.  The assembly code may also require the use of some or all registers.  If nothing is done then on return to the C code some of the values may have been destroyed by the assembly code.

9 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 9 Passing Arguments between C and Assembly Solution:  Both the C code and assembly code are responsible for saving some registers if they need to use them. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0AB C code automatically saves these registers Assembly code must save these registers - responsibility of the programmer

10 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 10 Interfacing C and Assembly Examples  Setup code written in C and interfaced with critical code written in assembly can be found in the following chapters:  \Code\Chapter 14 - Finite Impulse Response Filters  \Code\Chapter 16 - Adaptive Filters  Setup code written in C and interfaced with critical code written in linear assembly can be found in the following chapters:  \Code\Chapter 15 - Infinite Impulse Response Filters  \Code\Chapter 17 - Goertzel Algorithm

11 Chapter 11 Interfacing C and Assembly Code - End -


Download ppt "Chapter 11 Interfacing C and Assembly Code. Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2002 Chapter 11, Slide 2 Learning Objectives "

Similar presentations


Ads by Google