Download presentation
Presentation is loading. Please wait.
Published byAlycia Deville Modified over 9 years ago
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.