• ベストアンサー

z80について

マイコンz80を使って、17H+09Hを16進加算とDAAを用いて10進加算を 行うプログラムをつくったのですが、この場合、 16進加算 20H 10進加算 26 となるのはわかるのですが、同じプログラムで、 「ABH+FFH」をやると 16進加算 AAH 10進加算 10 「EFH-44H」 16進加算 ABH 10進加算 45 となるんですが、この理屈がどうもわかりません。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.5

いまさらですが、 加算後の DAA は、 1. 加算結果の下位4ビットが 0AH 以上か、ハーフキャリーが立っていれば 06H を加算する。 2. さらに A0H 以上か、1 の結果でキャリーが立てば、60H を加算する。 ということだから、 ABH + FFH = AAH となり、そのあとに DAA を実行すれば、 下位4ビットが 0AH 以上だから、06H を加算して B0H となり、A0H 以上だから、さらに 60H を加算して 10H となる。 減算後の DAA は、加算の場合の 06H と 60H の加算が減算になるので、 EFH - 44H = ABH となり、そのあとに DAA を実行すれば、 06H を減算して A5H となり、さらに 60H を減算して 45H となる。 もはや BCD の計算にはなっていないので意味の無い値ですが。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.4

16進加算は、単純に加算してオーバーフローしたビットが切り捨てられるだけです。 (8ビットのAレジスタを使用しているため) この時、キャリーフラグが立つはずです。 17H+09H=20H、ABH+FFH=1AAH=AAH、EFH-44H=ABH でいいですね。 10進加算の場合は、オペランドの各ニブル(4ビット)の値が 0~9(BCD)に なっていなければいけません。 各ニブルが10進数の1桁として演算します。 17H+09H=17+9=26=26H となりますが ABH+FFH や EFH-44Hは、BCDではないのでうまく演算できないのだったと思います。 (詳しいことは忘れました) 下記URLをご参考に。 http://www.cs.shinshu-u.ac.jp/Lecture/SE2/Z80/lecture7.html http://delegate.uec.ac.jp:8081/club/koken/~ubora/z80_9.html

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

本来DAAを用いての計算はBCD同士の計算を行った後、計算結果をBCDに戻すための命令で、ご質問の計算「ABH+FFH」や「EFH-44H」は間違った使用(元の数値BCDではない)をされているため、おかしな結果になっております。 詳細は忘れましたがDAAはアキュムレータ(Aレジスター)に対し、DAA補正フラッグ?をみてBCD補正のための補正を行っているはずで、まともな、入力値では正しく計算されるはずです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

よかったらプログラムリストを見せて貰えないでしょうか? 可能でしたらアセンブリリストもお願いします。 あと、フラグレジスタの内容も。。。。

全文を見る
すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

10進の計算が いまいち うまくいってないように見えますが・・・。 17H+9Hの場合 20H 10進ならば 23+9になるはずです。 17Hが 23ですから。 上記で 26になるということは 17Hでは なく 17として扱われていることになります。 それで A0H以上の値は 正しく処理されてないのでしょう。 ちなみに ABH+FFHは 1AAHと なり、桁あふれした分は 切り捨てられて AAHとなるのでしょう。 どういうプログラムかは わかりませんが、仕様をきちんと決めて作りましょうね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Z80に関しての宿題なのですが、

    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 ↑のようにすればよいのですが、なぜなのかいまいちわかりません。異なるコードで実装せよ。とのことなので理解したいです。おしえてください。

  • Z80

    電子工作の初心者です。マイコンH8を勉強したいのですが、その前にCPUの動作を知りたいので、Z80を勉強したいと思いました。 一応、デジタル回路は出来ます。何か良いZ80の本があれば教えて下さい。ネットで検索したのですが、どうもいい本が無いのです。よろしくお願いいたします。

  • Z-80に詳しい方教えて下さい。

    今Z-80のレポートでかなり困っています。Z-80の事は全く分からないので、ぜひ教えて下さい。PC9801RAを用いたZ80マイコンによるI/Oボードの制御及び計測。  CWR EQU 0D3h PB EQU 0D1h start EQU 8000h こんな感じの言語を使ったもので、問題が (1)SW1を押すとLEDが左にシフトをつずけ、もう一度押すとSTOPするプログラム (2)ステッピングモータを2相励磁で回転させる (3)温度センサーから得られる信号をAD変換して、その内容をLEDに表示する

  • マイコンのZ80プログラムで時報を作る

    マイコンのZ80プログラムで時報を作りたいんですがどうすれば作れますか?時報とはピッピッピッピーと言ったものです。非常に困ってますお願いします。

  • ワンボードマイコンMP-Z80を用いたプログラミング

    今、ワンボードマイコンMP-Z80でプログラミングの勉強をしています。 まだ、基本的なところなんですが、次の問題がわかりません。 1)8100H番地から81FFH番地までの100Hバイト分のRAM領域を0とする プログラムを作成せよ。 2)1から10までの整数の和を求め、8100H番地に格納せよ。 3)8100H番地から810FH番地に格納されているデータを8ビットの符号付 絶対値表現とみなしたとき、各データを2の補数表現に変換し、8200H番地から格納せよ。 この三つの問題なんですが、1)は全部に0を入れるということでしょうか? これらの問題は繰り返し命令の範囲の問題なので、繰り返し命令を 使うそうです。ヒントだけでも教えてください。

  • CPU、Z80からステート数から命令時間を求める

    マイコンボードACTーZIIを用いて実験を行ったのですがステート数を用いて命令時間の求め方がわかりません。 CPUはZ-80、クロック周期4MHzを用いて以下のプログラムの実行回数とステート数を求めたのですがあっているのでしょうか? だれか、教えてください。 まちがっていた場合、詳しく説明していただけるとうれしいです。 ラベル ニーモニック  ステート数 実行回数 小計(命令時間) LD A, 0FFH 7 1 7 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 DEC B       4 3 12 JP NZ, L1 10 10 100 LD A, 00H 4 1 4 OUT (00H), A 10 1 10 LD B, 0EH 4 1 4 L3: LD C, 0B1H 4 1 4 L4: DEC C       4 3 12 JP NZ, L4 10 3 30 DEC B       4 3 12 JP NZ, L3 10 10 100 JP 8000H 10 46 460 合計      119 92 821

  • ロータリエンコーダにZ相が付いているのですが、A相とB相しか使わないと

    ロータリエンコーダにZ相が付いているのですが、A相とB相しか使わないときZ相の配線はどのようにしたら良いのでしょうか?(H8マイコンにはA相とB相しか配線できない使用になっているので)

  • Z80CPUのプログラムバンク切替え回路は?

    マイコン初心者で、今、基礎を勉強しています。 Z80CPUについてですが、プログラムエリアを増やすため、バンク切り替えして使いたいのですが、具体的には、どういった回路にすればいいのでしょうか? 教えて下さい。よろしくお願いします。

  • z変換の伝達関数

    z変換から伝達関数H(z)にするための計算がわかりません。 さらに逆z変換からインパルス応答を求めて 伝達関数H(z)から周波数スペクトルH(Ω)を求めるというものがでてきて 頭が混乱してどうすればいいのか・・・ 色々とサイトを調べたのですが・・・ どれも伝達関数F(z)と出てきます・・・ まず伝達関数すら教えられていないのです。 z変換や逆z変換は理屈だけ説明されでどう使えばいいのか・・・。 自分のためというより今はこの結果を知りたいです。 申し訳ないのですがよろしくお願いします

  • Z68について教えて下さい。

    H67をオンボードチップで選ぼうかと思っていたのですが。 そろそろZ68チップ乗せたマザーボードがでてきています。 展望というような、大まかな質問でもうしわけありませんが、 Z68チップを乗せたマザーボードについて、 この場合であれば、Z68を意識したほうがいいよ、という 回答をお待ちしています。 よろしくおねがいします。