レジスタ - みる会図書館


検索対象: IO 1980年3月号
20件見つかりました。

1. IO 1980年3月号

3 と逆に , セグメ , ント・レジスタからメモリ , また は通常のレジスタにデータを転送します . ただし , セグメ ント・レジスタは 16 ピットのため , ディスティネーション のレジスタ , またはメモリは当然 16 ビットになります . 筆者のようなスモール・システムでは , ます使いそうも ないアドレッシング・モードです . 比較的よく使うと考えられるタイプで , メモリやレ ジスタにイミディエート・データを入れる命令群です . の中には , レジスタ間のデータ転送も含まれており , 8080 では , LXI, MVI の 2 命令の機能を合わせています . こでも前の , 第のモードと同じく , mod と r/m を組み合 わせて種々な使い方ができ便利なのですがにやはり面倒 ? ーの命令は , 他のイミディエート・データを持つ命令も そうなのですが , W のピットにより , 8 ピットと指定され ると , データは 1 ノヾイトに 16 ピットのときは 2 ノヾイトに なります . つまり , 3 ~ 4 バイトの可変長の命令です ( 図 6 す . 実に筆者は , 86 を発売後すぐに入手して以来すっと理解 に苦しんできました . とにかく大変なモードです . これは他の C P U でいうと , 6800 または 6809 などのイン デックス修飾または , それに類似したモードにあたります . つまり , LDA n, X の型 , インデックス・レジスタに n のディスプレースメント (displacement) が加わったものと 6 の命令の機能をさらに拡張したもので , 6 ではレ 考えられます . ただ , 86 / 88 では , インデックス 1 本に限ら ジスタ内の値を変える , 言い換えるとレジスタの持っデー す , r/m によって決まるピットで 3 つの種類が与えられて タをプログラマーの欲する値にするためのものだったのが , います . この命令ではレジスタで示されるアドレスのメモリの内容 ・ B P, B X のべース・レジスタによるインデックス をレジスタに転送します . このソースになるメモリをポイ およびそれにディスプレースメントカゞ加わったもの . ントするレジスタは種々の方法で修飾されます . これまで ・ S ーまたは D ーのインデックス・レジスタにディス 挙げたモードにすでに出てきていますが , r/m と mod のピ プレースメントを加算したもの . ットにより , その使用方法は多彩な型を使うことができま ・上記の 2 つの加わったもの . その内容が有効アドレスとして使われ , 一概に 6800 / 09 と 対比しにくいのですが , あえて比較するなら先のようにイ 図 5 レジスタにイミディエート・データをセット ンデックス・モードと比較できるようです . ただ , 大きく M S B 側 異なるのはインデックスのみでなく ( つまり S I , D I の みでなく ) , べース・ポインタ ( Bas e Po i nter (P) カゞ ; 1 のとき 16 ビットのデータを扱う . つまり , ソース・レジスタが 16 ビ 使えること , また 8080 と同じく B x ( H L レジスタ ) が有効 ットのとき 1 にする . それにともないデータは , 2 バイトになる . なことでしよう . さらに異なることとしてはすべてセグメ 0 になっているときは , この命令は , 2 バイトになる . ; ソース・レジスタ名 reg ント・レジスタに左右されること , B P は , C S に左右さ く例 > MOV AL, 10H → BO , 10 れます . もっともこれが 86 / 88 の原則なのですが . MOV AX, 10H → B8 , 10 , 00 とにかくいろいろな , ノヾリエ 図 5 イミディエート・データ→メモリまたはレジスタで示されるエリアに転送 ーションがあります ( 図 6 ) . データ下位′くイト データ上位パイト W ; 1 のとき , ソース・データは 16 ビットとなり , ディスティネーションのエリアは , 16 ビット・ レジスタまたはメモリとなる . ; r/m と合わせてデータ・フォーマットを決める . mod r/m ; 転送されるをベランドを決める . つまり , これも W と関連して 16 ピットのデータか 8 ピット か決まり , 3 バイトまたは , 4 バイトの命令が決まる . MOV BX , 80H ・→ 80 の 1 ノヾイト・データを BX で示すアドレスに転送 . く例 > 図 6 レジスタで示されるアドレスのメモリ内容をレジスタに転送 不要のときもあり アドレスパイト アドレス パ ト 1 . 0 1 ロ wl reg W し 0 . 0 . 1 ロ wl mod ー 0 , 0 , の r/m 0 いが ( 亜 2 い 1 0 0 0 。 1, の d mod r/m reg この命令は , 3 つの機能があります . 1 ) レジスタ→レジスタ ( アドレス部なし ) 注 ) を第・ MC3403 についての間い合わ 2 ) メモリまたはレジスタの示すアドレス - →レジスタ せがありました . M C 3403 についてですが , 3 ) レジスタからメモリまたはメモリのアドレスへ転送 現在 , オリジナルのモ下ロラ以外に T フェアヂキイル卞などセカンド , ソーズが入 ; 1 のとき 16 ビット・データ 手できます . ーまたにどうしても入手できない一 ; ソース・レジスタ名 . W = 1 のとき 16 ビット・レジスタ名が必要 reg 場合は , 供給電圧の最大値が MC3403 では 36 r/m ; 転送先のアドレスまたはレジスタを決める . V ですが , 32 V に制限するなら L M324 が使 : えます、 = 324 は R C A.•ユーをモトローラ , : N d ; 0 のとき , ソースは reg となり , 1 のときは , その逆 . 、 E C なとセカンド・ゾースも多ぐ , 秋葉 , 日 く例 > MOV BX, DX- → mod = 1 となりアドレス部はなし . 本橋などでも入手が容易です . なおピンは , (Mr, 1 CHIP) MOV AX, [BP] [DI] プ、ンイ、チ [ プ ) レです . ー ~ 8B, C3 レ 0 編集部のみなさんコンニチハ / 私は現在 , ある田舎ののどかな風景に包まれた名もない高校 ( それでも レ 0 プラサ 一応県立 ) に通っている者です . 先日 I / 0 1 月号の I / 0 プラサ ( p. 110 ) を見て驚きました . 私の高校にも同し名 前のクラブ ( 電算機クラブ ) があるのです . そしてまた , 私はそのクラブに入っていて , なんとクラブ担任の先 生は教頭目指して頑張っている H 先生だった . H 先生はこの前 , 3 年生の標準偏差の計算に苦しみ , 共通一次対 122 策用標準偏差自動集計プログラムを , なんとクラブ員に作成させ利用しようとしています . ( ガニマタのトチーロの弟子になりたい男 ) W 89 , D7

2. IO 1980年3月号

転送プログラム① ( 正しい出力ハンドシェイク ) M• CODE REM リスト 1 OP C 0 M ADD 1 2 3 4 5 6 7 8 9 0 0 1 0 1 2 3 4 5 6 7 8 9 0 プログラムを使ってみました . 転送プログラム①がそれで ー N S 7 3 F 4 F 4 7 0 F 4 F B F 4 0 E C E 0 F D 4 C F 4 0 E F 7 0 0 E 9 LABEL TENSO リ 1 0 0 P E , E , E , OPERAND P ー A B ・ P ー A B ・ C R P ー A B ・ C R P ー A B ・ D R $ 2 4 MNEMONIC ・ CODE 0 M M E N T P ー A のデータ方向レジスタにすべて出方向を指示する オートマチック・ハンドシェイクでレベル出力を指示 C L R A T S T L D A A S T A A L D A B L D X D E X B N E ー N C A S T A A S T A B B R A L 0 0 P E , ( C B 1 入力は立ち下がりを指定している ) カウンタとして A レジスタを用いる C B 1 のメカ S W は押されているかチェック / ・押されてなければ S W の監視を続けるためループ C R 日 7 のフラグをクリアするため , P ー A のインター タを空読みする L E D の光る時間を見やすくするための道草処理 フェイス・レジス 0 D E L A Y E , E , P ー A B ・ ー R B u Z Z E R L 0 0 P カウンタの歩進を行なう カウンタの値を L E D に出力表示する プサーを 1 回鳴らす 次の入力に備えて繰り返し L 0 0 P にいく 図 1 転送プログラム①のフローチャート これで P I A の B ポートはオートマチック・ハンドシェ ハンドシェイクの実験プログラム すべて繰り返し処理となります . ードウェアによって自動的になされるからです . 以降は のは , CB 1 に次のデータ要求信号が入ったときに P I A の んが , 心配はいりません . CB2 が次に High レベルになる しかし , CB2 は Lo w のままでは困ると思うかもしれませ 正しく行なわれたことになります . B2 を Lo w レベルにします . これで 1 個のデータの送信が ータ・ライン (PBo ~ PB7 ) にデータを送り出してから C ンターフェイス・レジスタに書き込みが行なわれると , デ ス・レジスタに書かなけれは・なりません . P I A では , イ 次に , プログラムは出力したいデータをインターフェイ います . シェイク・シーケンスを進めるという重要な意味を持って トロール・レジスタの CRB7 フラグを 0 F F にしてハンド い空読みで良いのですが , P I A のノ、一ドウェアではコン みます . この処理は , プログラム的に直接の意味は持たな るので , プログラムではインターフェイス・レジスタを読 れば , コントロール・レジスタの CRB7 (M (B) カゞ ON にな もし , CBI に出力装置から - データ送れ / " の信号が来 視し , ループしながら待ちます . っているかをコントロール・レジスタの CRB7 フラグで監 めの操作です . プログラムは , CBI にデータ要求信号が入 イクに初期設定完了です . 次は , いよいよデータ転送のた P I A 学習キットを使って , 170 ハンドシェイクを実験する 転送① PIA ・ B ポートの 方向レジスタ設定 P ー A ・ B ーのコ ントロール・レジスタ にオートマチック・ハ カウント用 定数クリア LOOP データ転送要求を検査 P ー A ・ B ポートの コントロール・レジスタ 要求あるか ? P ー A ・ B ポートの インターフェイス・ レジスタの読み取り 道草ループ カウンタ十一 ( A レジスタ使用 ) P ー A ・日ポートのイ ンターフェイス・レジ スタにデータを書く ・コントロール・レジスタに $ 24 を書くと CBI のセットはネガテイプ・ゴーイングで , CB2 は レベル出力のオートマチック・ハンドシェイ クにすることができる . ・もし一線に信号が入っていると , コントロ ール・レジスタの CRB7 フラグが立っととも に , 82 ラインは Hi レベルになる . ・この動作により P ー A コントロール・レジス タの C 7 フラグは OFF になる ( プログラ ムには直接ないが重要です ). ・学習キットのぃ ( ) 動きを見やす くするために入れてある . ・この動作により P ー A の C ラインは LOW レベルになる .

3. IO 1980年3月号

実行した結果のプログラムをプログラム例 2 に示します . このプログラムは , どういう処理をするかというと , 1 か ら 5 までの数字を順に出力するプログラムです . これを皆 さんの得意な BASIC で書くとプログラム例 3 のようにな ります . BASIC の FOR ・・・ NEXT のように繰り返し処理を CAP-X ではどう書けばよいのでしようか ? 興味ありま すネプログラム例 2 をよく見てください . START 25 日 は , 「 256 番地からプログラムを格納開始してください」と いうことでした . ところで , この 256 という数値は特別な数値なのです . 仕様書より COMP ー X は 1 語 16 ピットの計算機であって , 0 を含めて 256 の整数倍の番地から始まる連続した 256 語を 1 記憶プ ロックとして , 最小 1 記憶プロックから最大 256 記憶プロ ックを実装することができる . N 個の記憶プロックを使用 すると・き , アクセスできるアドレスは , 0 番地から ( 256 >< N ー 1 ) 番地までである . COM P- X は , 256 語を 1 記憶プロックとしているわけで すから , 0 ~ 255 番地は , 0 番目の記憶プロックとなり , 256 ~ 511 番地までは 1 番目の記憶プロックということにな ります . そこで , 256 という値は第 1 記憶プロックの先頭 番地になるわけです . また , この記憶プロックのことを一 般にページと呼んでいます . プログラム例 2 ( CAP - x でのループ処理 ) CAP—XÆROSS aASSYAY OKITAC 43 ロロ B 25 日 、 START を LA I LAI 15 1 ロ WRITE 2 , 251 , 1 LAI JNZ ロ , S H J END ASSEMBLE END ロ 1 ロ 5 3 4 ( m, GR 給ル Zero) 仕様書より 2 進 16 進 モ ーック 読み方 能 表示 表示 表 = ー示 J N Z Jump if GR G R フィールドで指定 する G R の内容が 0 で is Not Zero ないと , 実効アドレ スにジャンプする . 0001 1 プログラム例 3 ( BAS ℃でプログラム例 2 を書いたら・・・ ) 10 FOR ー = 1 TO 5 20 PRINT 30 NEXT 40 END LAI 1 , 1 , 1 というのが新しく出て来ました . 最後の①がなければ , 汎用レジスタ 1 番に数値 1 を入れるのですが , さらに , 1 があります . これは , 汎用レジスタ 1 番を指標レジスタと して使用するという意味です . こで指標レジスタと書け ば , 汎用レジスタと異なったもののようですが , まったく 同しものです . 仕様書より G R ( 汎用レジスタ , general regi ster) は 0 番から 3 番 まで 4 個あり , それぞれ GRO , GRI, GR2, GR3 である . この 4 個のレジスタは算術演算と論理演算に用いる . この うち GRI, GR2 , GR3 は , さらに指標レジスタとしても用 いる . LA I は , 汎用レジスタ 1 番の内容を 0 クリアすることでした . 図 1 指標レジスタ指示がある場合 例 2 例 1 2 1 1 汎用レジスタ③番の内容 汎用レジスタ 1 番の内容 8 5 1 十 十 6 答を汎用レジス名①番にしまう 今汎用レジスタ 3 番の内容が 8 とすると , たとえば , 汎用レジスタ 1 番の内容は , 10 になる . によって , 答を汎用レジスタ . にしまう たとえば , 今汎用レジスタ 1 番の内容が 5 とすると , によって , 汎用レジスタ 1 番の内容は , 6 になる . 1 203

4. IO 1980年3月号

あたっては , 無視されるということです . ただし , これを省 略することはできません / ′また , だけではエラーになります . S は実行開始番地を示します . この命令によって停止した場合 , 再スタートさせると , S の番地 , すなわちここでは 32 番地から再実行することにな ります . さらに この命令は 1 語の記憶場所を取るので注 意してください . 最後の , END あることに注意してください . これを 16 進数で表わすと , X " 20 " になります . さらに この START 命令は記憶場所 を取りません . ですから , 実際は次の命令が 32 番地になり ます . それでは , いよいよ憧れの LAI 命令に入っていきましょ というのは , 汎用レジスタ 0 番の内容を 0 にすることです . オペランド欄の最初の数値が指定する汎用レジスタの番号 ( 0 ~ 3 ) を示し , 後の数値が入れられる値を示します . これは , Move lmmediate という命令に似ています . この ことから , 次の , L 角 1 は , 汎用ジタ①番の内容は@になります . 次 0 行は どうでしよう . LAI 2 , 256 これは , 今までの説明でいくと「汎用レジスタ 2 番の内 容を 256 にする』となりますが , そうではありません . 〃 仕様書に , 「下位 8 ビットの数値だけ入って , 上位 8 ビッ トはすべて 0 になる』とあるでしよう . クもっとわかりや すく説明すると , 256 よりも大きな数値の場合は , 25 6 で 割った余りの値が指定した汎用レジスタに入ることになり ます . このことを法 ( モード ) といいます . 256 十 256 = 1 ・・ つまり , 汎用レジスタ 2 番に ( ⑨が入ることになります . 決して 256 が入るのではありませんから注意してください〃 同様に , 次の は , 今説明したことから , 500 は 256 よりも大きいので , 500 + 256 = 1 ・・ となり , 汎用レジスタ 3 番の内容 ( 244 になります . 次の WRITE 命令は , 第 1 回で述べたように , 指定され た汎用レジスタの内容を 10 進数か 16 進数でプリント出力す る命令です . ただし , この WRIT 命令は , CAP-X には ないので , 試験のときは書かないでください . もっとも入 出力に関する問題は出題されていませんが・・・ これは , 計算機 (COMP-X) を停止させる命令です . 仕様書より 2 進 16 進 モ 読み方 ~ 機 ック 表示表示 表示 0000 H J Halt S C に実行アドレスを 入れて停止する . その JUmP 後 , スタートボタンを 押すと S C の示すアド レスから再び命令の実 行が開始される . この 命令の G R フィールド は無視される . 表中の「 G R フィールドが無視される』とあるのは , 指 定する汎用レジスタは , 0 ~ 3 まで何であっても , 実行に 仕様書より END n プログラムの最後には , これを書かなければならない . n は 10 進数か , またはラベル名であって , プログラムの実行 開始アドレスを指定する . n は省略可能 . はプログラムの最後に必ず書かなければなりません . CAP-X のソース・プログラムは , START から EN D までが 1 つの単位 ( モジュール ) になります . 後で説明し ますが , サプルーチンの場合も同様です . EN D 命令のオペランド欄にある S は , プログラムの実 行開始アドレスを指定するもので , 仕様書では省略可能と なっています . これは , サプルーチンとリンクする場合 , サプルーチンで省略するのが普通だからです . メイン・プログラムのときは必ず書いてください . そう でなければ , プログラムをどこから実行させるのかオペレ ーション・システム (OS) がわからなくなります . 本当のオ ペレータ ( 人間 ) が実行開始アドレスを , コンソールのデ ータ・スイッチにセットしなければならず , その間 , コン ピュータは数秒停止してしまいます . 詳しくは次の機会に 説明します . なお , この END 命令は , START 命令と同様に記憶場 所をとらないので注意してください . 次に とあるのは , 「今入力された , CAP—X のソース・プログ ラムを翻訳完了しました . そしてそのソース・プログラムは , 16 進数で X 28 " 番地まで使っています』という意味です . その後の 4 行の数値は , WRITE 命令によって , 汎用レ ジスタ 0 ~ 3 番までの値をそれぞれ 10 進数で出力させた結 果です . 今までの説明をもう一度読み直して , 正しいこと を調べてください . このように , 実際に CAP-X を実行させることができる と , 無味乾燥な仕様書もなんとか読めそうになってくるで 32 K パイトコア・メモリポード 1 、 25 ロ き , 5 ロロ 4 ASSEMBLE END 0 ロ 29 Hj 0 202

5. IO 1980年3月号

表 1 繰り返し回数とレジスタの内容 GRV の内容 2 引十 ( GRI ) → GR2 繰り返し回数 0 1 2 3 4 5 図 2 プログラム例 2 とそのフローチャート 256 START 初 最 251 十 ( ) → 252 1 25 1 十 ( 2 ) → 253 251 十 ( 3 ) → 254 251 十 ( 4 ) → 255 251 十 ( 5 ) → 0 ( 注 ) 汎用レジスター番が 5 のとき 2 引十 ( 5 ) ー A256 例の 256 を越えると ? 256 十 256 = い これが汎用レジスタ 2 番に入る / ′ 文章で読むよりも図示した方がよく理解していただける と思い , 指標レジスタ指標がある場合の動作を図 1 に示し この指標レジスタ指示が今回のハイライトです . ました . 充分理解してください . 次の WRITE 命令はもういいですネ . LA I というのは , また指標レジスタ指示があるので , 汎用レジ スタ 2 番には , 汎用レジスタ 1 番の内容に 251 を加えた値 が入ることになります . ただし , 汎用レジスタ 1 番の内容 は , ネコの目のようにくるくる変わりますョ / ′御用心 / ′ 卸用心 / ′ S L A I GRI = 0 クリア P LAI GRI= 1 十 (GRI) ( 注 ) GR ーを 1 0 ・ でプリント出力 WRITE 1 , 10 ( 注 ) 2 , 251 , 1 LAI GR2 = 2 引十 ( GRI ) れ 0 GR2 = 0 か ? JNZ 4e5 E 、 D ( 注 ) ( GRI) は汎用レジスタ 1 番の内容を示す . 応募問題を提示しましたので , 注意事項に従って応 募してください . また , ご質問・ご要望などがあれば 編集部宛にお送りください . また , 宿題として練習間題 1 と練習間題 2 の 2 題あげて おきましたので , 次号までに解答を求めておいてくだ さい . それでは 10 月の合格を祈って頑張りましよう . ク ム 251 , 1 jNZ は初めて出て来ましたが , これは「汎用レジスタ 2 が 0 でなけれは P 番地に飛び , 0 のときは次の命令を実行しな さい』という命令です . この P 番地ですが , これはラベル P が付いている番地を意味します . 後の 2 行も , もういい でしよう ? ! EN D の後の S を忘れないでネ . 〃 さて , 実行した結果がプリント出力されていますが , な るはど , うまくいっている / ′しかし , 全体的にもう一度 詳しく考えてみましよう . フローチャートを図 2 に , また , 繰り返しのェッセンス ともいうべきレジスタ 1 番とレジスタ 2 番の変化を表 1 に 示しました . さて , これでプログラム 2 の説明が終わったのですが , 指標レジスタ指示の場合に , 大きな落とし穴があるのです . それは , 『汎用レジスタ 0 番を指標レジスタとして使用で きない〃』 ということです . 2 , P 練習問題 1 GR 0 の内容が 10 , GR 1 の内容力 { ー 10 のとき , 次の CAP—X を実行し , 停止したときの G R 0 , G R 1 の内容は , それぞ れいくらになりますか ? 10 進数で答えなさい . S 丁 A R T ー 3 2 03 1 ! 0 nL Äユ 2 5 5 , ーーユ 第 J 。 E N D ( 類題昭和 47 年 2 種 ) 練習問題 2 次に示す BASIC のプログラムと同し処理をする CAP-X のプ ログラムを作ってください . ただし , プログラム格納開始ア ドレスは 512 番地とします . FOR キ 70 TO 61 STEP— 3 1 0 2 0 、一 PRINT 1 EN D 答は とすると , 汎用レジスタ 0 番に 1 を加える命令のようです が , 実は , 汎用レジスタ 0 番は指標レジスタとして使えな いので , と同し命令になってしまい , 汎用レジスタ 0 番の内容が 1 になるだけの命令になります . これをよく間違えるので注 意してください 0 イ 4 ( 1 7 6 、 0 【 6 1 となるはずです . 204

6. IO 1980年3月号

8088 0 ? アンプ入門圏 ・ Mr. ICH 旧・ 。マ P OP アンプのシリーズ中で , 8088CPU の試作をしてみま したが , 説明が不充分だったところを補足したいと思い ます . なにぶん多機能な CPIJ のため , ごく一部分について 説明してみたいと思います . 8088 については , 今までいろいろな本で説明がされてい ます .. 筆者もそれらの本を読んでみましたが , どうも納得 がいかないところが多く残ってしまいます . 命令でいうと , まず MOV 命令 . 8080 のそれ以外に , LXI, MVI, STA, LDA, SPHL 命令と同し機能を持ち , さらにこれ以外の動 作も持っこの命令をどう使うか , 考えてみたいと思います . とにかく , この一命令を充分に理解して使うには骨が折 れます . まず , MOV 命令の基本的な機能です . 8080 の LDA 命令と同しく , アキュムレータに定数を セットします . ただし , MVI では , アキュムレータが 8 ピ ットのため , 1 つの命令しかなかったのが , 86 / 88 では , れにさらに LDAW とも考えられる 16 ピットの定数をアキュ ムレータにセッ・トします . もちろん , アキュムレータが 16 ピットでも使えることを考えると当然です . これらの命令 mod , reg , r/m についてはセグメント→レジスタ , メモリの転送と同じで は , 1 ノヾイト目のピット 0 を ON, OFF することにより 16 すが , 今回は , reg がソースでなくディスティネーションとなっています . ピット / 8 ピットの切り替えが可能です ( 図 1 ) . また reg は 16 ビットですから必すソースは 16 ビットに限られます . 2 とはまたく逆に , 16 ピ・ , トまたは 8 ピ、 , トのデ 図 4 セグメント・レジスタ→レジスタ , メモリ ータを直接メモリにストアします . 8080 の STA 命令に相当 します . ; 命令に定数の有無を示す . 2 ビット mod これも当然 8 ピットと 16 ピットの切り替えを行なうこと ; 有効アドレスの指定 . EA は・ , mod で示される . r/m 定数とレジスタの値の加算となる . ができます . この 2 つの命令は 8080 のときと同しく , 定数 ; ソース・レジスタ名 . こでは , セグメント・レジスタ reg 部の上位 , 下位が逆順になっていますが , 今まで使い続け たせいか , たいして気にはなりません ( 図 2 ). リアを使うときは必然的に使うことになります . この命令 3 まったく 8080 になかったものです . 8080 にはセグメ のピット・′ヾターンは図 3 のようになっています . この形 ント・レジスタなどなかったから当然なのですが , メモリ 式は 8080 → 8086 にグレードアップしたときに生したアド レッシング・モードの基本的なフォーマットになっています . またはレジスタのオペランドをセグメント・レジスタに送 ります . リセット後の各セグメント・レジスタの内容は , この命令では , reg は当然セグメント・レジスタになりま すが , mod と r/m の組み合わせにより有効アドレスが変わ 図 3 のようになっています . 20 ピットのメモリ・アドレス に複数のプログラムを置いて使うとき , またたぶんないと ります ( 図 4 ) . は思うのですが 64 K バイト以上のプログラム , データ・エ の BREAK 人間 . これは , 大阪府立長野高校 ANS ( 自然科学部 ) に住む悪魔といってもいいでしよう . TK-80 レ 0 プラザ BS にテープをロードしているときはもちろんのこと , プログラムを入力中にも突然現われ , BREAK キーを乱発 . 怒りに狂った Y 氏は POKE83DDH , C9H で BREAK をきかなくすると , なんと CALL F125 H で BREAK をスター トさせるのです . またそれにあきたらず , なんと , なんと私物であるばくちゃんの B S を学校の物として先生と グルで乗っ取ろうとするのです . そして夜ごと , 昼ごとに , 朝ごとに , P-ROM, V-RAM. 8080 が PRINT - ァー 121 ( T T Y こと昇ちゃんで一す ) ”悲鳴と共に消えていくのであった . 図 1 レジスタ←メモリ 1 のときビット 下位バイト 上位パイト 00 ■■■ 000 第■ 000000 にのにの 0 匐 アドレス 1 6 ビット MOV 命令 く例〉 MOV AL, DATA ; 8 ピット MOV AX,DATA ; 16 ピットデータ操作 DATA 番地のメモリ→ AL DATA 番地および十 1 のメモリ→ AX 図 2 レジスタ→メモリ 1 のときビット操作 アドレス上位バイト アドレス下位バイト ; 8 ピット定数操作 く例〉 MOV DATA, AL ; 16 ビット定数操作 MOV DATA, AX AL → DATA AX → DATA 図 3 レジスタ , メモリ→セグメント・レジスタ 1 mod ー reg r/m 1 0 0 0 1 ロいののロロのの mpd 印を e い r/m

7. IO 1980年3月号

図 2 転送プログラム①のハンドシェイク・タイミング・チャ ート ( レベ・ノレ・モ ードを使用 ) システム・リセット時 CRBI = 0 としてネガテイプ・エッジを指定した場合 C 入力信号 ー -- ーー -- - ・メカニカル SW を人間が押して いる時間なので不定 CRB7 フラグ インターフェイス・ レジスタの READ 創 A 学習キットの CB2 表示 ( 緑 ) LED はこの時間 ON となる A 学習キットの CB2 新 LED はこの時間 ON となる CB2 出力信号 インターフェイス・ レジスタの WR 灯 E ハイ・インビーダンス PBo—PB7 の データ・ライン 2 番目 1 番目のデータ 注 ) 本来 P I A のタイムチャートは , イネープル端子 ( の 2 ) に同期する部分があります力轄リ愛してあります . 図 3 転送プログラム②のハンドシェイク・タイミング・チャート ( レベル・モードを使用 ) システム・リセット時 CRBI = 0 としてネガテイプ・エッジを指定した場合 CBI 入力信号 CRB7 フラグ インターフェイス・ レジスタの READ P ー A 学習キットの C 日 2 表示 ( 緑 ) LED は ON のまま つまり正常なハンドシェイクとはなっていないことを示している CB2 出力信号 インターフェイス・ レジスタの WR 灯 E PBo ~ P 日 7 の データ・ライン 2 番目 1 番目のデータ 注 ) 本来 p I A のタイムチャートはイネープル端子 ( の 2 ) に同期する部分がありますが割愛してあります . す ( リスト 1 ) . 使い方は簡単です . 図 4 のように正しくコ ル・スイッチを手で押すと CB2 の緑 L E D が 0 N になり , ネクタを接続し , プログラムを R A M に書き込んで R U N 少したって 0 F F に戻ると L E D の赤がデータを表示しま させれば即座に動作します . 人が操作する部分は PIA 学 す ( 本当は赤 L E D が変化してから CB2 の緑 L E D が OFF 習キットの中に CBI と印刷されたメカニカル・スイッチだ になるのですが , 人間の目には〃 s の差は判別できません ). けです . このスイッチを押すと P I A の CBI にノヾルスが発生し , プログラムに対し - データ要求 ' が通知されるのです . す ると , プログラムの内でカウントが行なわれ , 赤の L E D に 2 進数カウント結果が出力表示されるはずです . CB2 の信号は P I A 学習キットでは緑の 1_, E D で表示さ れますが , プログラムの中で CB2 の動きが目で確かめられ るようにディレイ・ループを行ない , ゆっくりした変化で 示します . 全体の動きはハンドシェイクそのもので , CBI メカニカ 注意 P I A 学習キットの CBI メカニカル・スイッチにはチャタリング防 止回路が組み込まれていますが , スイッチの押し方次第ではすべての チャタリングを除去できないようです . もし , 1 回の操作でカウンタ が 2 回続けて進む場合は , メカニカル・スイッチのチャタリングで , プログラムの異常によるものではありません . このエラーが起こるのは , CB ーに信号が入るとすぐにプログラムで インターフェイス・レジスタを読み取るために CRB7 のフラグが 0 F F になります . しかし , P I A のハードウェアでは CRB7 が 0 F F に なると次の CB レヾルスが受信可能になるため , CB ー信号線のチャタリ 17 ー

8. IO 1980年3月号

リスト 3 正しい出力ハンドシェイクだが実際に使えないプログラム M N E M 0 N ー C ・ C 0 0 E ハ 0 0 0 0 0 0 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 0 0 0 2 0 2 3 4 5 6 7 8 9 0 0 0 3 0 2 3 4 5 6 7 8 9 0 0 4 0 2 3 4 5 6 7 8 9 174 0 2 2 D 8 B 1 6 1 2 8 6 M ・ C 0 0 E R E M ー N S 8 6 F 4 F 4 B 7 F 0 8 D 0 E F 4 F 4 F 日 F 4 F 6 D 4 8 日 0 0 F 0 L A B E L E P S 0 N ー 0 P L D A A S T A A L 0 A A S T A A C L R A S T A A P S H A L S R A L S R A L S R A L S R A 0 R A A C M P A B L T A 0 D A B S R P u L A A N 0 A 0 R A A C M P A B L T A D 0 A 8 S R L D A A B S R B S R L D A A A D D A 日 R A L D A B 日 P L L D A B S T A A R T S 0 P E R A N D P R N E , E , E , P ー A B ・ D R $ 2 C P ー A B ・ C R WO R K $ 3 0 $ 3 A C 0 M M E N T ァータ方向レジスタを全ライン出力として設定する オートマチック・ハンドシェイク ( パルス式 ) をコントロール・レジスタに設定する 発生文字を進数印刷するため文字編集 ( 上位 4 ビット分 ) テスト文字発生用のカウンタに A レジスタを使用 発生文字を進数印刷するため文字に編集 ( 下位 4 ビット分 ) P 1 7 P T $ 3 A $ 3 0 $ 0 F E, WO R K P u T P u T $ 2 E P u T 7 P 2 P R ー N T P u T E, P ー A B ・ C R 文字と文字の間にビリオド 2 個を印刷し , 文字発生用カウンタに一を加えておく 連続印刷のためループさせる データ要求信号は入っているか ? 見やすくする編集 E , E , P ー A B ・ P ー AB C R 日 7 のフラグを 0 F F にしてオートマチック・ハンドシェイクの手順に入る データをインターフェイス・レジスタに書き込むと出力ラインにデータが送出され CB2 線に′くルスカぐ出る

9. IO 1980年3月号

図 4 実験回路の接続方法 NEW LKlT-8 本体ポード べ ( らい \ ま NEW LKlT-8 専用コンソール・キーポード P 学習キット・ポード LED の対応 MSBÄ ・ PB7 赤・ PB6 ・ PB5 ・ PB4 ・ P 日 3 赤・ PB2 ・ PBi ・ PBo 録 ( OC 日 2 ロ リスト 2 転送プログラム② ( 娯りのある出力ハンドシェイク ー NÄÉびイ℃、 00 0 に ~ 、 M を C 0 0 E をい 0 P E R A N 0 JNS L E 日 E A D 0 P ー A B ・ D R 7 3 TENSOU2 COM E , F 4 1 2 0 E 3 4 5 6 F 4 7 C L R A 8 7 D P ー A B ・ C R E , T S T 9 F 4 F B C E 1 2 3 F D 4 C 4 5 ・ F 4 6 0 E 7 8 9 F 7 F 4 0 E E 9 マイクロコンピュータを内蔵したインテリジェント・ター ミナルです . 特徴は , 1 行分に相当するデータ・ / ヾッフア・メモリを 持っているため , ホスト・システム ( 送信を行なう側 ) か ら受信したデータは 1 文字ごとに印字されす , バッフアが いつばいになるまで蓄えられてから , まとめて印刷されま す ( バッフアがいつばいにならなくても改行文字や D C 2 と呼ばれるファンクション・コードが途中に入っても印字 動作をします ) . プリンタに限らず入出力装置をマイコンにつなぐために は , 伝送方式 ( シリアル , パラレルなどの区別 ) , 信号線の 本数および種類 , 信号レベル , 伝送タイミング・チャート などを知る必要があります . これらは仕様書に記載されて いるので , 購入前に検討することができます . E P S 0 N メカニカル・スイッチ C スイッチ $ 2 4 L D A A P ー A B ・ C R S T A A E , ングがひどいときは , あたかも次のデ了タ送信要求がされたかのよう な錯覚を与えてしまうわけです . この種の事故は , 相手がたまたまメカニカル・スイッチであったた めに起こったもので , 一般の出力装置では起こりません . ハンドシェイク実験プログラム② こちらのプログラムは , 実験プログラム①にチャタリン グのトラブルが起こったので改良すべく作成したのですが , あまりにチャタリングに気をとられすぎ , 出力ハンドシェ イクの原則を忘れてしまいました ( リスト 2 ) . 「コントロール・レジスタの CRB7 カ { 0 N になったらイ ンターフェイス・レジスタを読み , CRB7 を OFF にしてか らインターフェイス・レジスタに書く』という原則を外れ たプログラムが , 一体どのように動作するのかを P I A 学 習キットで確かめてください . 悪いプログラムの見本と , 正しいハンドシェイクのプロ グラムを交互に動かすと , その差がはっきりとするでしょ L 0 0 P L D X D E X D E L A Y B N E ー N C A S T A A E , P ー A B ・ ー R E , 日 IJ Z Z E R S T A 日 現実のハンドシェイク E , P ー AB ・一 R L D A B L 0 0 P B R A 出力ハンドシェイクの考え方が理解できたなら , 今度は 実際の出力装置を接続して動かしてみましよう . ちょっと 高級ですが , 信州精器の EPSON 40 / 80 クラスのプリン タを選んでみました . このプリンタは , 制御回路に 80 系の 図 5 EPSON TP -40 / 80 における信号線の種類 ホスト、マシン を EPSON 。 - TP-80F/T- プリッタ データ線 ( 8 本 ) STROBE R EADY ACKNLG 172

10. IO 1980年3月号

表 5 C D4000B シリーズの機能分類 ト BUFF./CONV マルチファンクション マル ~ チパイプレータ類 フリップフロップアステープル NOR/NANP C D4000B dD4000UB CD4001B CD4001U 日 C04002B CD4002UB CD4011B CD4011UB CD4012B CD4012U 日 CD4023B CD4023UB CD4025B CD4025UB OR/AND CD4071B CD4072 日 CD4073B CD40758 CD4081 B CD4082B CD4068B CD4078B インバー CD4007UB CD4009UB CD4010B CD4041UB CD4049U8 CD4050B CD4069UB CD4502 日 CD40107BE レベル シフター CD4009UB CD40 加 8 CD4049UB CD4050B CD40109B タ類 FIFO CD4 田 05B ′くッファ AOI CD4019B CD4030B CD4048B CD4070B ・ CD4077B ・ CD4085B CD4086B ・参照 コン′ヾレータ デコーダみ 工ンコーダ CD4028B CD45148 CD4515B CD4532B C04555 日事 CD4556B 事 ☆参照 デマルチプレクサ ら′ユミット トリガ CD4093B CD40106B CD4013B CD4027B C04042B CD4043B CD4044B 冖参照 CD40174B CD4508B CD4099 日事事 CD4096B CD4095B CD4076B ・本 ストレージレジスタ モノステープル CD4047B CD4098B CD4068 日 CD4078B CD40107B レ シフ、ト C 04006 B CD4014B CD4015B CD40 幻日 CD4031B C D4034B CD4035B CD4094B ジ、ス ストレージ CD40208B ・ CD40108 日・ CD4099B CD4076 日 イスナレイ・ドライ - バ、一類 LCD ☆ドライプ LED ・・ドライプ ウィズ バイナリー CD4020B CD4024B CD4040B CD4060B クロック タイマ CD4045B 同期型 CD4017B CD4018B CD4022B CD4029B CD4510B CD4516B CD4518B CD4520 日 CD40102B CD40103B CD4 60B CD40161B CD4 62B CD40163B CD40 円 2B CD40193B 力、グー . ~ タ CD4026B C04033B CD40110 日 CD4 田 00B CD40104B C04 田 94B ・参照 マルチボート レジスタ CD4054B CD4055B CD4056B ±Liquid CrystaI DispIay CD4511B ・・ Light- Emitting D iode マルチプレクサ デマルチプレクサ アナログ / デジタル データセレクタ CD4 田 6 日△ CD4019 日 CD4051 日 CD4052 日 C D40538 CD4066B △ C D4067 B CD4097B CD4555B ④ CD4556B ① CD40257B アリスマテ、イをッ , ク サ フェーズ・ ロックド・ ループ CD40468 △参照 フォード 双方向 スイッチ ①参照 デコーダ / 工ンコーダ アドレス / コン′くレータ CD4008B CD40308 CD4032B CD4038B CD4063B CD4070B あ CD4077B あ ー参照 AOI マルチファンクション / ALU/RATE ALU/RATE マルチプイア CD4089B CD4527B CD40181B CD40182B パリティ ジェネレータ / チェッカー CD40101B マルチボート レジスタ CD40208B CD40108B 双方向 CD4 田 6B ◆ CD4066B ◆ ド ◆参照 マルチプレクサ このため , C ー M 0 S I C の入力部には必ず図 1 に示す ような入力保護回路が内蔵されています ( ただし , 後述す るように 4049 および 4050 では入力保護回路のうち D3 が内蔵 されていません ). 入力電圧が G N D レベルより低くなると , 保護ダイオード DI , D2 に順方向電流が流れ , ゲート電極に ー 54 大きな負電圧がかかるのを防ぎます . 入力に VDD より大き な電圧が印加されると , D3 に順方向電流が流れ , ゲート電 極に正の高電圧がかかるのを防ぎます . 図 1 に示した入力保護回路により , ほとんどの場合 , 絶 縁破壊を防ぐことができますが , 使用条件などによっては ,