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 2004 Chapter 11, Slide 2 Learning Objectives Different.

Similar presentations


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

1 Chapter 11 Interfacing C and Assembly Code

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

3 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2004 Chapter 11, Slide 3Introduction This chapter shows how to interface C and assembly and how to use intrinsics. 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. 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. 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: 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 2004 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 share the same resources (e.g. registers). The C and assembly functions may exchange data. 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. 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 2004 Chapter 11, Slide 5 Calling Assembly from C Use _ underscore in assembly for all variables or functions declared in C. Use _ underscore in assembly for all variables or functions declared in C. Labels also need to be global. 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 2004 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. 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 arg

7 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2004 Chapter 11, Slide 7 Passing Arguments between C and Assembly Before assembly call. Before assembly call. 0x40000x AB 0x80000x After return from assembly call. After return from assembly call.

8 Dr. Naim Dahnoun, Bristol University, (c) Texas Instruments 2004 Chapter 11, Slide 8 Passing Arguments between C and Assembly Problem: The C code will use some or all of the registers. The C code will use some or all of the registers. The assembly code may also require the use of some or all 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. 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 2004 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. Both the C code and assembly code are responsible for saving some registers if they need to use them AB 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 2004 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: 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 14 - Finite Impulse Response Filters \Code\Chapter 16 - Adaptive 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: 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 15 - Infinite Impulse Response Filters \Code\Chapter 17 - Goertzel Algorithm \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 2004 Chapter 11, Slide 2 Learning Objectives Different."

Similar presentations


Ads by Google