アプリ版:「スタンプのみでお礼する」機能のリリースについて

マイコンボードACTーZIIを用いて実験を行ったのですがステート数を用いて命令時間の求め方がわかりません。
CPUはZ-80、クロック周期4MHzを用いて以下のプログラムの実行回数とステート数を求めたのですがあっているのでしょうか?
だれか、教えてください。
まちがっていた場合、詳しく説明していただけるとうれしいです。

ラベルニーモニック  ステート数 実行回数小計(命令時間)
LD A, 0FFH717
OUT (00H), A10110
LD B, 0EH717
L1:LD C, 0B1H717
L2:DEC C      4312
JP NZ, L210330
DEC B      4312
JP NZ, L11010100
LD A, 00H414
OUT (00H), A10110
LD B, 0EH414
L3:LD C, 0B1H414
L4:DEC C      4312
JP NZ, L410330
DEC B      4312
JP NZ, L31010100
JP 8000H1046460
合計     11992821

A 回答 (2件)

Z80 ですか。

気付いた点を。

数字がくっついていて見づらい(HTMLで半角スペースは画面に出ません)ので手を加えると

LD A, 0FFH  7 1 7   ←(1)
OUT (00H), A 10 1 10
LD B, 0EH   7 1 7
L1:LD C, 0B1H 7 1 7
L2:DEC C   4 3 12
JP NZ, L2  10 3 30   ←(2)
DEC B    4 3  12
JP NZ, L1  10 10 100   ←(3)
LD A, 00H  4  1 4    ←(4)
OUT (00H), A 10 1 10
LD B, 0EH   4  1 4   ←(5)
L3:LD C, 0B1H 4 1 4    ←(6)
L4:DEC C   4 3  12
JP NZ, L4   10 3 30   ←(7)
DEC B     4 3  12
JP NZ, L3   10 10 100    ←(8)
JP 8000H    10 46 460

というところでしょうか。

>LD A, 0FFH 7 1 7   ←(1)
とは、「Reg.A に値0FFHをロード」、ステート数 7、
実行回数1、計7ステート数7
ということですね。
因みにマシンコードは 3E,FF(計2Byte) の方だと思います。

>JP NZ, L2  10 3 30   ←(2)
>JP NZ, L1  10 10 100   ←(3)
>JP NZ, L4   10 3 30   ←(7)
>JP NZ, L3   10 10 100    ←(8)

は、回数が変です。
(2)(7)は事前に Reg.C に値 0B1H をセットしてるので 0B1H=177回、
(3)(8)は同様に Reg.B に値 0EH をセットしてるので 0EH=14回のはず。

>LD A, 00H  4  1 4    ←(4)
>LD B, 0EH   4  1 4   ←(5)
>L3:LD C, 0B1H 4 1 4    ←(6)
はステート数は4じゃないでしょ。
命令第1バイトは読込むだけで4ステート、第2バイト以降は3ステート要ります。
一部例外ありますが。
(ここでは蛇足でしょうが、ハードがウェイトステートを挿入してればその分プラス)

それ以上の合計数などは検証してません。

話のついでに。
Reg.A に値00Hをセットする場合に限り、
XOR A
を使う手があります。これだと1Byte命令でその分「高速」で「メモリ節約」になります。
ただしフラグが影響受けます。
    • good
    • 0

>LD A, 0FFH717


は多分
LD A,(nn) コード 3A×××× クロック13
の事を言っているんだと思います、4MHzですから1/4μSでクロック13ですから13/4μSが命令時間です717って何なのか判りません。
Z80が出た時にしばらく使っていただけなのでだいぶ忘れています、こちらを参照したほうが良いと思います。
http://www.alles.or.jp/~thisida/nd3setumeisyo/nd …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!