- n = 転送するワード(32bit)の数
- m = 乗算命令のオペランドの最上位バイトに依存
命令 | サイクル | 備考 |
---|---|---|
ALU | 1S | +1S+1N if R15 loaded, +1I if SHIFT(Rs) |
MSR,MRS | 1S | -- |
LDR | 1S+1N+1I | +1S+1N if R15 loaded |
STR | 2N | -- |
LDM | nS+1N+1I | +1S+1N if R15 loaded |
STM | (n-1)S+2N | -- |
SWP | 1S+2N+1I | -- |
BL (THUMB) | 3S+1N | -- |
B,BL | 2S+1N | -- |
SWI,trap | 2S+1N | -- |
MUL | 1S+ml | -- |
MLA | 1S+(m+1)I | -- |
MULL | 1S+(m+1)I | -- |
MLAL | 1S+(m+2)I | -- |
{cond} false | 1S | -- |
前のサイクルで使用されたアドレスと連続していないアドレスへのアクセスを要求した場合にかかる時間です。
GBAではこのアクセスのことをファーストアクセスといいます。
1Nの実行時間は
- 通常: 1(クロックサイクル)
- カートリッジ: 1 + WaitStateN
です。
前のサイクルで使用されたアドレスの直後に位置するアドレスへのアクセスを要求した場合にかかる時間です。
GBAではこのアクセスのことをセカンドアクセスといいます。
1Sの実行時間は
- 通常: 1(クロックサイクル)
- カートリッジ: 1 + WaitStateS
です。
単純にCPUのクロックサイクルのことです。
つまり、1Iの実行時間は 1(クロックサイクル)です。
メモリのアクセスには、本来WaitStateがない方が望ましいです。 つまり、1Nと1Sはそれぞれ1クロックサイクルに等しくなるべきです。
しかし、時間のかかるカートリッジへのアクセスやデータバス幅が小さいメモリ領域に対しての(32bit)アクセスは、1クロックサイクルでは完了しません。
その場合には、アクセスできるまでWaitState(待機状態)である必要があります。
ここではWaitStateという言葉を
- アクセスできるようになるまでの時間(サイクル)
- アクセスできるまでの待機状態
の2つの意味で用います。(経験上はほとんど前者です。)