- 締切済み
電気回路とソフトウェアの連携
電気回路とソフトウェアの連携 以下のプログラムのフローチャートどういう風に書けばいいですか? 00H MOV C, #00H ;「c」の状態の初期化 01H MOV B, #00H ;「B」カウント値のリセット 02H OUT B ;出力ポートの状態を変更 03H IN A ;入力ポートの状態を取得 04H MOV D, A ;入力ポートの状態をDに退避 05H AND A, #02H ;2ビット目の情報を取得 06H JNZ L00H ;リセットボタンが押されている場合,0行目にジャンプ 07H MOV A, D ;入力ポートの状態をAにロード 08H AND A, #01H ;1ビット目の情報を取得 09H JNZ L0CH ;カウントボタンが押されている場合,C行目にジャンプ 0AH MOV C, #00H ;「C」の状態を0に設定 0BH JMP L02H ;2行目にジャンプ 0CH MOV A, C ;「C」の状態をAにロード 0DH CMP A, #00H ;「A」の状態は0か 0EH JNZ L02H ;ボタンが押されたままなので,2行目にジャンプ 0FH INC B ;Bの値を1カウントアップ 10H MOV C, ;「C」の状態を1に設定 11H JMP L02H ;2行目にジャンプ
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- weavaest
- ベストアンサー率15% (157/1020)
No.4です > フローチャートは高級言語で書けばいいですか?それともCPUが不明だからもう書けないということですか 高級言語で書くの意味がわかりません。そもそもアセンブラのコードしか無いものと思って話をしていましたが、高級言語のコードもあるのですか。 CPUが不明だと、何のためのコードか不明な部分が出てくると思います。コメントも書かれてますから大枠の流れは、大体はわかると思います。そういう意味ではフローチャートを書くことは可能だと思います。 ただ、No.1の回答への補足コメントを見る限り、質問者様はアセンブラにコードが殆ど読めないと認識しております。そう考えると、フローチャートを書くことは難しいかと思います。
- weavaest
- ベストアンサー率15% (157/1020)
No.3です。 「Electronic Lab 500 in 1」で検索してみました。 http://www.noobowsystems.org/kits/el500/el500.html 上記のサイトに「アセンブリ言語インタプリタ」との項目があり、そこには「仮想的なマイコンをエミュレートしている」と記載があります。 このエミュレートしているものが実在するCPUであれば、それを調べて、手が出せそうですが、「仮想的なマイコン」ってよくわからん表現がされていますから、実在しない仮想のCPUかもしれないですね。
- weavaest
- ベストアンサー率15% (157/1020)
No.2です コードの流れがわからないということですが、各行毎の処理内容はコメントを見ればわかると思います。また、CPUのアークテクチャを調べれば、コメントの意味もわかると思います。 ちょっと調べようと思いましたが、このコードのCPUって何ですか? 8086あたりかとも思いましたが、コードではカウンタレジスタがBとなっているので、どうも違うようですね。CPUが不明なので、その先はやめました。
補足
Electronic Lab 500 in 1でMPUが内蔵されてるらしいのですがそれのことでしょうか
- weavaest
- ベストアンサー率15% (157/1020)
質問の意味が、不明瞭です。 このアセンブラのコードの流れが理解できないから、フローチャートが書けないのか、フローチャートの記述方法がわからないから書けないのか。どちらでしょうか。 それ以前の問題として、このコードのCPUのアーキテクチャは理解されてますよね。コード内にあるコメントの意味は理解されてますよね。
補足
フローチャートの書き方は大体わかりますが、コードの流れがわかりません
intel系のニモニックでしょうか。大昔の記憶がよみがえってきました。 条件分岐は ひし形 代入処理などは四角などをかいて、線を引っ張っていけばいいのではないでしょうか。 ・ジャンプ先のラベルは使わないのですか? ・このCPUはアドレスが1つずつ増えている所を見ると1ワード=1命令でOKですか?
補足
開始の下から全然わかりません。。 00H MOV C, #00H ;「c」の状態の初期化は c<--00ってことですか? 以下のプログラムを参考にしてもわかりません 00 MOV B,#10H;レジスタBへ初期値をセット 00 MOV A #00H;Accへ初期値をセット 02 OUT A ;L1-L4を消灯 03 TM2 #01H ;1秒間ウェイト 04 INC A ;Accに1を加算 05 CMP B,A ;Accと上限値を比較 06 JZ L01H ;カウンタ=上限値のとき#01へ 07 JNZ L02H ;カウンタ=:=上限値のとき#02へ 開始 | B<--10 | A<--00 | Accを出力 | 1秒間ウェイト | A=A+1 | B:A
補足
そうですか・・・ フローチャートは高級言語で書けばいいですか?それともCPUが不明だからもう書けないということですか