beautypg.com

Branches, calls, and returns, Unconditional branches, Unconditional calls – Texas Instruments TMS320C2XX User Manual

Page 107

background image

Branches, Calls, and Returns

5-8

5.3

Branches, Calls, and Returns

Branches, calls, and returns break the sequential flow of instructions by trans-
ferring control to another location in program memory. A

branch only transfers

control to the new location. A

call also saves the return address (the address

of the instruction following the call) to the top of the hardware stack. Every
called subroutine or interrupt service routine is concluded with a

return instruc-

tion, which pops the return address off the stack and back into the program
counter (PC).

The ’C2xx has two types of branches, calls, and returns:

-

Unconditional. An unconditional branch, call, or return is always
executed. The unconditional branch, call, and return instructions are de-
scribed in subsections 5.3.1, 5.3.2, and 5.3.3, respectively.

-

Conditional. A conditional branch, call, or return is executed only if certain
specified conditions are met. The conditional branch, call, and return
instructions are described in detail in Section 5.4,

Conditional Branches,

Calls, and Returns, on page 5-10.

5.3.1

Unconditional Branches

When an unconditional branch is encountered, it is always executed. During
the execution, the PC is loaded with the specified program-memory address
and program execution begins at that address. The address loaded into the
PC may come from either the second word of the branch instruction or the low-
er sixteen bits of the accumulator.

By the time the branch instruction reaches the execute phase of the pipeline,
the next two instruction words have already been fetched. These two instruc-
tion words are flushed from the pipeline so that they are not executed, and then
execution continues at the branched-to address. The unconditional branch
instructions are B (branch) and BACC (branch to location specified by accu-
mulator).

5.3.2

Unconditional Calls

When an unconditional call is encountered, it is always executed. When the
call is executed, the PC is loaded with the specified program-memory address
and program execution begins at that address. The address loaded into the
PC may come from either the second word of the call instruction or the lower
sixteen bits of the accumulator. Before the PC is loaded, the return address
is saved in the stack. After the subroutine or function is executed, a return
instruction loads the PC with the return address from the stack, and execution
resumes at the instruction following the call.