![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
Z80に関しての宿題なのですが、
「コール命令を使った電子オルガン」
キーを入力したら対応する音が鳴るようにプログラミングする。(入力を
常に監視し、FFHでなかったらサウンド出力をする。)プログラムは4400H番地から書く。
キー入力:CALL 2018Hと呼ぶとAレジスタに押されたキーの内容が入ってくる。
押されないとFFHが入っている。(いずれかのキーが押されるとAレジスタには00Hから17Hまでの対応する値が格納される。)
サウンド出力:Aレジスタに00Hから17Hを入力してCALL 201BHと呼ぶと対応する音が鳴る。
(1)キー入力を行った.Aレジスタにキーの内容が入る。
(2)AレジスタがFFHの場合は(1)に戻る。そうでないときは(3)へ行く。
(3)Aレジスタの内容により、サウンド出力を行った。
(4)(1)に戻る。
ニーモニック
CALL , 2018H
SUB FFH
JP Z , (4400H) ・・・・(ゼロフラグZが1の時、4400番地にジャンプする。)
ADD FFH
CALL , 201BH
JP 4400H
↑のようにすればよいのですが、なぜなのかいまいちわかりません。異なるコードで実装せよ。とのことなので理解したいです。おしえてください。
No.4
- 回答日時:
> 3行目の命令にゼロフラグが1のとき・・とありますが、
> それはAレジスタの演算結果が00Hのとき1になって4400番地に
> ジャンプするとのことですが、それがどんなキー入力
> (00H~17H)のときにおこるのですか?
質問文の中に
> 押されないとFFHが入っている。
> (いずれかのキーが押されるとAレジスタには00Hから17Hまでの対応する値が格納される。)
とありますので、2018Hにあるサブルーチンはキーが押されている間は00H~17Hを
Aレジスタに入れて、キーを離した時はFFHを入れるように作られているのでしょう。
折角なら2018Hのサブルーチン側でキー押下有無をキャリーフラグに立てるような
修正をしたいところですが、サブルーチン側のソースがないので、自ずと修正できる
範囲は限られてくると思います。
(CALL命令の問題というよりも条件分岐の問題でしょうか。)
僕ならSUB FFHとADD A,FFHの2つを両方ともXOR Aに変えるくらいでしょうか。
(Z80のニーモニック表久し振りに見ましたが、Z80は比較命令ってなかったんですね)
No.2
- 回答日時:
CPUは人間と違って出来る「判断」が非常に少ないんだ。
判断というよりも条件分岐といった方が分かり易いかな。
その課題の場合、FFhとFFh以外で条件分岐しないといけないことは分かるよね。
その分岐のために「条件付ジャンプ命令」を使っているのだが、その条件(今回の場合Zフラグの内容)を立てるには“その条件を立てる命令を実行する”必要があるんだ。
Z80の命令表をよく見てみよう。
フラグについて「変化する」とか「変化しない」とかが必ず書かれているから。
【参考】
http://www.systemax.jp/doc/Z80_inst.html#inst_comp
http://www.systemax.jp/doc/Z80_inst.html#inst_jump
No.1
- 回答日時:
懐かしいなあ、Z80だあ。
…宿題と言うことですのでヒントだけ出しておきますね。
んと、それぞれのコマンドのい意味が分かっていますか?
CALL , 2018H ・・・・(キー入力監視のためのコール)
SUB FFH ・・・・(FFHからAレジスタの値を引く)
JP Z , (4400H) ・・・・(ゼロフラグZが1の時、4400番地にジャンプする。)
ADD FFH ・・・・(Aレジスタに FFHを入力)
CALL , 201BH ・・・・(音を鳴らす)
JP 4400H ・・・・(4400H番地へジャンプ)
この中でイレギュラーな処理というか、質問文の内容と違いところを探せばOK。
そこを他に置き換えてやれば良いです。
この回答への補足
3行目の命令にゼロフラグが1のとき・・とありますが、それはAレジスタの演算結果が00Hのとき1になって4400番地にジャンプするとのことですが、それがどんなキー入力(00H~17H)のときにおこるのですか?すごく浅いとこから理解してませんで、すみません;
補足日時:2010/04/29 15:40お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- マウス・キーボード 不良表示キー(キーボード) 3 2022/04/27 10:53
- マウス・キーボード キーボード Oキーを押すとプルダウンメニューが出る 4 2022/09/08 14:48
- その他(コンピューター・テクノロジー) PIC16F1シリーズマイコンのNCO機能について 1 2023/04/18 08:41
- マウス・キーボード パソコンの外付けキーボードについて ノートパソコンて外付けキーボードを使用すると、入力うまく行きませ 4 2023/01/04 23:02
- iOS これは日本語入力の大発明ですか? 7 2022/12/21 07:17
- Word(ワード) IMEパッドがショートカットキーで開かないのですが。。。 5 2023/06/11 09:23
- その他(IT・Webサービス) Google日本語入力の操作方法 一度確定した後の訂正方法 1 2023/06/17 16:03
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- マウス・キーボード キーボードのキー入力の際キーの反応が悪く困っています。 DとYキーなのですがDはゲームで押し潰してお 2 2023/04/11 22:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
回答が貰えるように質問文の添...
-
マシン語が表す動作について
-
PC-G830
-
シーケンサのデータレジスタD...
-
Z80に関しての宿題なのですが、
-
レジスタの数
-
エクセルVBAのIf,Then 構...
-
0xffffとは?
-
成人してから
-
アセンブラの参考書(初心者)
-
ライン数とステップ数の違いは?
-
C言語で128bitの2進数のビット...
-
アセンブリ言語について。
-
アセンブラからC言語に変換する...
-
7セグメントLEDの点灯について
-
アセンブラエディタ
-
シーケンス制御についての質問...
-
delph5 ボタンの色を変更するに...
-
昔のゲーム製作に使用する言語...
-
PDP-11のアセンブラ課題
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レジストってなんですか?
-
シーケンサのデータレジスタD...
-
SRAMとレジスタの違いは何でし...
-
レジスタの数
-
PC-G830
-
Z80、6502、i8086、MC68000につ...
-
CPUは何故、16bit→32bit→64bit...
-
回答が貰えるように質問文の添...
-
非常に限定された条件での8バイ...
-
biosとは人の体でいえば脳のよ...
-
パソコン内部の仕組みについて
-
CPUのビット数と、メモリ(主記...
-
トリムレジスタ
-
PICの命令 ADDWF f,d のメモリ...
-
PICでUSARTのフレーミングエラ...
-
専用レジスタ 汎用レジスタ
-
Z80に関しての宿題なのですが、
-
CASL LDの考え方
-
命令
-
レジスタとメモリについて
おすすめ情報