Day 7
The Delay Slot
This thing is so Evil and Cool at the same time, I can't come up
seem to come up with even a good joke for the intro (I said "Slot!", maybe?).
The Info
This information is brought to you by HCS:
The code for this isn't that much different than we've seen before
or that you could have come up with on your own. So here we go (the whole thing):
(It has been slightly edited)(HCS, I hope you don't mind.):
This is the instruction immediately after a jump or branch instruction. It is executed during the jump (actually, while
the instruction at the target is being fetched). For example, if we have
code:--------------------------------------------------------------------------------
jal dest
addi t0,t0,1
--------------------------------------------------------------------------------
Both the jump and the addition will occur. There are some instructions which can't be in
delay slots though (I don't have my manual with me right now and I don't remember what they are)
and asmn64 checks for those. One good application for this is to make loops:
code:--------------------------------------------------------------------------------
li t0,7
loop:
; something to be done 8 times
bnez t0, loop
addi t0,-1
--------------------------------------------------------------------------------
The increment (decrement in this case) is had for free, during time the processor would be
otherwise wasting. It is important, whenever you code a jump, to put a NOP after it until
you intend to use the delay slot, otherwise some other part of the code might execute
accidentally. I believe that asmn64 has a command line switch to do this for you automatically.
The exception to the delay slot execution is several branches called "likely". Actually, they still
execute the instruction in the delay slot, but if the branch is not taken the delay instruction
is skipped. This takes some extra time for the processor to ignore the instruction, so they
should only be used when it is "likely" that the branch will be taken.
This Day In Review
It's always good to get the information from someone who knows what they're talking about!
Important stuff!,
- GbaGuy
Intro - Day 8
Patater GBAGuy Mirror
Contact