(since 2006/12)(更新 2009/07/12)

TNO:メール・マガジン[CASLII]サンプル2

©Copyright 2006,2009 小野智章(小野情報設計)
無断転載を禁止します。
情報系/IT系の広告を掲載しています。(広告一覧)
まぐまぐ版の、 CASLII有料メール・マガジンの、サンプル誌。
各月5回配信の内、第2回相当分。

メール・マガジンの説明

各月第2回分の主な内容。

サンプル誌

配信メールのサンプルです。
図表などは、等角フォントを前提としています。
個々のメールやテーマを区別するための識別情報は、 変更になる可能性があります。

各月第2回相当分
(各回の内容は、サンプル内の記述を参照して下さい。)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      TNO2 CASLII試験対策

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
著作権は、小野智章(小野情報設計)が保有します。
お客様ご本人の利用のため以外の複写・複製や
第三者への公開、配布、譲渡は禁止します。

小野智章(小野情報設計)
  試験情報 http://ww3.tiki.ne.jp/~tno2/shikaku.htm
  登録解除 http://ww3.tiki.ne.jp/~tno2/mag/mag.htm
  連絡先   http://ww3.tiki.ne.jp/~tno2/profile/mail.htm
  マイページ(解除、メール・アドレスの変更等)
           https://mypage.mag2.com/Welcome.do
-------------------------------------------
テーマ記号;B1
テーマ;パリティ
テーマ分類;bit演算-変換-1

テーマ発行番号;2
発行;2005年4月
メール番号;2-2
-------------------------------------------
[プログラムの説明]
指定された語にパリティ・ビットを設定する副プログラムPARITYである。
中略
-------------------------------------------
エラー処理と例外処理はありません。
-------------------------------------------
[全体]
RS.作業用レジスタの内容の退避
MP.主要処理
RR.作業用レジスタの内容の復旧
FN.終了

[全体-フローチャート作成]
    / ̄\
   (start )
    \__/
┌──┴───┐
│レジスタ退避│
└──┬───┘
  ┌─┴──┐
  │主要処理│
  └─┬──┘
┌──┴───┐
│レジスタ復旧│
└──┬───┘
    / ̄\
   ( end  )
    \__/

[全体-命令作成]
RS.作業用レジスタの内容の退避
!RPUSH
!!GR1〜GR7を退避しているが、必要なレジスタだけにすることも出来る。
MP.主要処理
!!詳細化が必要
RR.作業用レジスタの内容の復旧
!RPOP
FN.終了
!RET
-------------------------------------------
[詳細化-第1段階]
MP.主要処理
MP-1.下位15ビット中の1の数を数える
MP-2.奇数パリティになる様に、パリティ・ビットを設定する

[詳細化-第1段階-フローチャート作成]
!!このフローで、「全体」のフロー中の「主要処理」を置き換えれば良い。
!!以下の各フローも同様に、置き換える。
┌───────┴───────┐
│下位15ビット中の1の数を数える │
└───────┬───────┘
  ┌──────┴──────┐
  │奇数パリティになる様に、  │
  │パリティ・ビットを設定する│
  └──────┬──────┘

[詳細化-第1段階-命令作成]
!!フローと同様、「全体」の命令中の「主要処理」を置き換えれば良い。
!!以下の各命令も同様に、置き換える。
!!詳細化が必要
MP.主要処理
MP-1.下位15ビット中の1の数を数える
!!詳細化が必要
MP-2.奇数パリティになる様に、パリティ・ビットを設定する
!!詳細化が必要
-------------------------------------------
[詳細化-第2段階-1]
MP-1.下位15ビット中の1の数を数える
MP-1-1.チェック対象のビット列データを設定
MP-1-2.ビット1数を0にする
MP-1-3.残り反復回数を15にする
MP-1-4.最下位ビット(LSB)が1の時、ビット1数を+1
MP-1-5.ビット列全体を1ビット分右へシフトする
MP-1-6.残り反復回数を−1
MP-1-7.残り反復回数が+の時、MP-1-4へ

[詳細化-第2段階-1-フローチャート作成]
      ┌─┴──┐
      │GR1←GR0│
      └─┬──┘
  ┌───┴───┐
  │ビット1数←0 │
  └───┬───┘
  ┌───┴────┐
  │残り反復回数←15│
  └───┬────┘
┌───→│
│       /\
│     /    \ N
│    < GR1 &1 >──┐
│     \  =1/     │
│       \/Y      │
│┌───┴───┐│
││ビット1数+1││
│└───┬───┘│
│        │←───┘
│  ┌──┴───┐
│  │GR1←GR1>>1 │…[1ビット分右へシフト
│  └──┬───┘
│┌───┴────┐
││残り反復回数−1│
│└───┬────┘
│       /\
│     /    \
│ Y /        \
└─<残り反復回数>
     \      >0/
       \    /
         \/N
          │

!!フローチャート中の「>>」は、右シフトを表す演算子(計算用の記号)で、
!!C言語など多くの言語で使用されている。
!!左シフトは、「<<」となる。

[詳細化-第2段階-1-命令作成]
MP-1.下位15ビット中の1の数を数える
MP-1-1.チェック対象のビット列データを設定
!LD GR1,GR0
MP-1-2.ビット1数を0にする
!LAD GR2,0
MP-1-3.残り反復回数を15にする
!LAD GR3,15
MP-1-4.最下位ビットが1の時、ビット1数を+1
!LD GR4,GR1
!AND GR4,=1
!JZE MP-1-5
!LAD GR2,1,GR2
MP-1-5.ビット列全体を1ビット分右へシフトする
!SRL GR1,1
!!このプログラムでは、最上位ビットがコピーされても良いので、SRAでも良い。
MP-1-6.残り反復回数を−1
!SUBA GR3,=1
!!SUBAなので、次の命令で使うフラグが設定される。
!!「LAD GR3,-1,GR3」はフラグが設定されないので、駄目。
MP-1-7.残り反復回数が0で無い時、MP-1-4へ
!JPL MP-1-4

!!MP-1-4は、フローチャートと異なるが、次の方法でも実現出来る。

[詳細化-第2段階-1-命令該当部分-変更]
MP-1-4.最下位ビットが1の時、ビット1数を+1
!LD GR4,GR1
!AND GR4,=1
!ADDA GR2,GR4
!!GR4が、足す場合は1、足さない場合は0となることを利用している。

!!分岐命令が無くなって効率が良いこの方法で、置き換えることにしよう。
!!(実行命令数は、足さない場合は減らないが、足す場合は減る。)
!!ただし開発実務では、
!!顧客に承認されたフローチャートに基づいてプログラムを作成する場合、
!!変更出来ない場合もある。

!!フローチャートの該当部分も変更しておこう。

[詳細化-第2段階-1-フローチャート該当部分-変更]
│  ┌──┴───┐
│  │GR4←GR1 & 1│
│  └──┬───┘
│┌───┴────┐
││ビット1数+GR4 │
│└───┬────┘
-----------------------------
[詳細化-第2段階-2]
MP-2.奇数パリティになる様に、パリティ・ビットを設定する
MP-2-1.元のビット列のパリティ・ビットを消去
MP-2-2.ビット1数が偶数の時、パリティ・ビットを設定
!!奇数の時は奇数のまま、偶数の時は奇数に変わる。

[詳細化-第2段階-2-フローチャート作成]
  ┌───┴────┐
  │GR0←GR0 & #7FFF│
  └───┬────┘
          │
         /\
       /    \
     /        \
   /            \ N
  < ビット1数 & 1 >─┐
   \          =0/   │
     \        /     │
       \    /       │
         \/Y        │
┌────┴────┐│
│GR0←GR0 or #8000 ││
└────┬────┘│
          │←────┘

[詳細化-第2段階-2-命令作成]
MP-2.奇数パリティになる様に、パリティ・ビットを設定する
MP-2-1.元のビット列のパリティ・ビットを消去
!AND GR0,=#7FFF
MP-2-2.ビット1数が偶数の時、パリティ・ビットを設定
!AND GR2,=1
!!2進数で最下位ビットが0の時、その数は偶数。
!!最下位ビットが1の時、その数は奇数。
!JNZ MP-2-3
!OR GR0,=#8000
MP-2-3.
!!飛び先用ダミー

!!orを表す演算子として、
!!本来は、前に使っている「&」に対応した「|」を使うべきである。
-------------------------------------------
以下、全体を纏め、定数データや作業領域等を追加し、
ラベル等を適切に設定すれば良いです。
又、適宜コメントを付け加えます。

次回、全体を纏めたものとプログラムの清書を示しますが、
自分でも考えておいて下さい。
又、作成したプログラムを呼出してテストするプログラムである、
テスト用ドライバも考えてみましょう。
テスト用データも考えてみましょう。

次のバナーから申込ページへ移動して、申込んでください。
まぐまぐバナー

他の回のサンプル。
概要と第1回分
第3回分
第4回分
第5回分

学習室
トップ・ページへ

お問い合せ等、お待ちしております。
小野智章(小野情報設計) 
Mail連絡先