Blackfin Syntax Stores Jumps Calls and Conditional Jumps
Blackfin Syntax Stores, Jumps, Calls and Conditional Jumps 1) 2) What we already know and have to remember to apply What we need to learn Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada
Assembly code “stub” Each function written in assembly code has the same general look n 1. 2. 3. 4. 5. 6. 1/6/2022 The necessary #include files and Section name Declaration of the function as “global” combined with labels for start and end of function Setting size of link operation and using LINK instruction to save the return address Unlink used with JUMP(P 0) instruction to cause the function to return “to calling program” R 0 used for return parameter Required code with Documentation of code Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 2
Example 1 -- stub code 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 3
Example 2 – Stub code 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 4
Store/Write code 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 5
Store/write error messages 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 6
Load /read 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 7
Jump 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 8
If CC jump If !CC jump 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 9
Jump predicted taken (bp) IF CC JUMP WHILE [--SP] = (R 7: 0); // Save to stack WHILE: R 0 = R 1; R 2 = R 3; CC = R 1 < R 4; IF CC JUMP WHILE; R 6 = R 7; R 5 = R 4; n 1/6/2022 IF CC JUMP WHILE [--SP] = (R 7: 0); // Save to stack WHILE: R 0 = R 1; R 2 = R 3; CC = R 1 < R 4; n IF CC JUMP WHILE R 6 = R 7; R 5 = R 4; Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada (BP); 10
Processor fetches S before execution instruction 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 11
Processor fetches 9 new instructions before execution of 1 st instruction is complete UP to 10 instructions being executed in paraller 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 12
Jump predicted taken (bp) IF CC JUMP WHILE [--SP] = (R 7: 0); // Save to stack WHILE: R 0 = R 1; R 2 = R 3; CC = R 1 < R 4; IF CC JUMP WHILE; R 6 = R 7; R 5 = R 4; n 1/6/2022 IF CC JUMP WHILE [--SP] = (R 7: 0); // Save to stack WHILE: R 0 = R 1; R 2 = R 3; CC = R 1 < R 4; n IF CC JUMP WHILE R 6 = R 7; R 5 = R 4; Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada (bp); 13
Jump example code 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 14
Call instruction 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 15
C++ code void Example. ASM(void) { Convert. Temp. ASM(100, 200, 1); // declared as extern “C” } n n Assembly code 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 16
C++ code void Example 2 ASM(void) { Calculate. Temperature(100, 200, 1); // C++ function } n Assembly code 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 17
Move Register 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 18
Conditional move register 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 19
Practice Exercise Translate in Blackfin Assembly Code extern “C” unsigned long int Wait. Till. Low(void); extern “C” unsigned long int Wait. Till. High(void); unsigned short int Measure. Time. High_ASM(void) { unsigned long int value; Wait. Till. Low( ); Wait. Till. High( ); value = Wait. Till. Low( ); } return value; 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 20
Practice Exercise 2 Translate in Blackfin Assembly Code extern “C” unsigned long int Wait. Till. Low(void); extern “C” unsigned long int Wait. Till. High(void); unsigned long int Measure. Time. High_ASM(void) { unsigned long int value 1, value 2; Wait. Till. Low( ); Wait. Till. High( ); value 1 = Wait. Till. Low( ); Wait. Till. High( ); value 2 = Wait. Till. Low( ); } return (value 1 + value 2); 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 21
Practice Exercise 3 Translate in Blackfin Assembly Code extern “C” unsigned long int Wait. Till. Low(void); “C” unsigned long int Wait. Till. High(void); unsigned long int value 1; unsigned long int value 2; unsigned long int Measure. Time. High_ASM(void) { Wait. Till. Low( ); Wait. Till. High( ); value 1 = Wait. Till. Low( ); Wait. Till. High( ); value 2 = Wait. Till. Low( ); } return (value 1 + value 2); 1/6/2022 Timer Control -- Lab. 3, Copyright M. Smith, ECE, University of Calgary, Canada 22
- Slides: 22