Presentation is loading. Please wait.

Presentation is loading. Please wait.

TMS320C6713 Assembly Language (cont’d). Module 1 Exam (solution) 1. Functional Units a. How many can perform an ADD? Name them. a. How many can perform.

Similar presentations


Presentation on theme: "TMS320C6713 Assembly Language (cont’d). Module 1 Exam (solution) 1. Functional Units a. How many can perform an ADD? Name them. a. How many can perform."— Presentation transcript:

1 TMS320C6713 Assembly Language (cont’d)

2 Module 1 Exam (solution) 1. Functional Units a. How many can perform an ADD? Name them. a. How many can perform an ADD? Name them. b. Which support memory loads/stores? b. Which support memory loads/stores?.M.S.D.L six;.L1,.L2,.D1,.D2,.S1,.S2

3 2. Conditional Code a.Which registers can be used as cond’l registers? b.Which instructions can be conditional? A1, A2, B0, B1, B2 All of them

4 3. Coding Problems a. Move contents of A0-->A1 a. Move contents of A0-->A1 MV.L1A0, A1 orADD.S1A0, 0, A1 orMPY.M1A0, 1, A1 (what’s the problem with this?)

5 3. Coding Problems a. Move contents of A0-->A1 a. Move contents of A0-->A1 b. Move contents of CSR-->A1 b. Move contents of CSR-->A1 c. Clear register A5 MV.L1A0, A1 orADD.S1A0, 0, A1 orMPY.M1A0, 1, A1 ZERO.S1A5 orSUB.L1A5, A5, A5 orMPY.M1A5, 0, A5 orCLR.S1A5, 0, 31, A5 orMVK.S10, A5 orXOR.L1A5,A5,A5 (A0 can only be a (A0 can only be a 16-bit value) MVCCSR, A1

6 3. Coding Problems (cont’d) d. A2 = A0 2 + A1 d. A2 = A0 2 + A1 e. If (B1  0) then B2 = B5 * B6 e. If (B1  0) then B2 = B5 * B6 f. A2 = A0 * A1 + 10 g. Load an unsigned constant (19ABCh) into register A6. MPY.M1A0, A0, A2 ADD.L1A2, A1, A2 [B1] MPY.M2B5, B6, B2 mvkl.s10x00019abc,a6 mvkh.s10x00019abc,a6 value.equ0x00019abc mvkl.s1value,a6 mvkh.s1value,a6 MPYA0, A1, A2 ADD10, A2, A2

7 3. Coding Problems (cont’d) h.Load A7 with contents of mem1 and post- increment the selected pointer. h.Load A7 with contents of mem1 and post- increment the selected pointer. x16 mem mem1 10h A7 load_mem1:MVKL.S1mem1,A6 load_mem1:MVKL.S1mem1,A6 MVKH.S1mem1,A6 LDH.D1*A6++,A7

8 Pipeline & NOP Pipeline stages Multiply: One NOP (NOP) Load: four NOPs (NOP 4) Branch: five NOPs (NOP 5)

9 Pipeline & NOP MVK.S140, A2; A2 = 40, loop count loop:LDH.D1*A5++, A0; A0 = a(n) LDH.D1*A6++, A1; A1 = x(n) NOP 4 NOP 4 MPY.M1A0, A1, A3; A3 = a(n) * x(n) NOP NOP ADD.L1A3, A4, A4; Y = Y + A3 SUB.L1A2, 1, A2; decrement loop count [A2]B.S1loop; if A2  0, branch [A2]B.S1loop; if A2  0, branch NOP 5 NOP 5 STH.D1A4, *A7; *A7 = Y

10 Interface C and Assembly  As a general rule the code written in C is used for initialization and for non-critical (in terms of speed or size) code.  Critical code (in terms of speed/size) can be written in 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.

11 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

12 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

13 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

14 Passing Arguments between C and Assembly  Before assembly call. 0x40000x20004 5 6 7 8AB 0x80000x200045 6 7 8  After return from assembly call.

15 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.

16 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

17 An example of ASM function.global_sum _sum: ZERO.L1A9 MV.L1B4,A2 loop: LDH.D1*A4++, A7 NOP4 ADD.L1A7,A9,A9 [A2] SUB.L1A2,1,A2 [A2] SUB.L1A2,1,A2 [A2]B.S1loop [A2]B.S1loop NOP5 MV.L1A9,A4 B.S2B3 NOP5


Download ppt "TMS320C6713 Assembly Language (cont’d). Module 1 Exam (solution) 1. Functional Units a. How many can perform an ADD? Name them. a. How many can perform."

Similar presentations


Ads by Google