• ベストアンサー

8085系プログラミングについて

ついこの前、同じを質問したのですが、私の理解不足と説明不足により質問の仕方が悪いと回答され、自分なりにアセンブラ言語について学習してみました。学習してみるとたしかに私は何も理解しておらず、8085系のプログラミングということも書き忘れていました。ここでのスレでまずお詫びしたいと思います。誠に申し訳ありませんでした、こんな私ですが、もしよければアセンブリ言語での8085系のプログラミングでこの質問に対する回答と解説のご教授お願いします。 9000H番地の1バイトデータをa、9001H番地の1バイトデータをbとしたとき、axbを16ビットで求め、下位1バイトを9002H番地、上位1バイトを9003H番地に格納するプログラムを作りなさい。またこのプログラムの実行時間をデータがA=65H、B=0AEHのときに計算しなさい。実行時間の計算では各命令の実行回数を示し、計算式を詳しく書くこと。 8085系のプログラミングでは、掛け算の関数がないので、掛け算についての表わし方だけでもいいので教えてください、お願いします

  • yui01
  • お礼率13% (2/15)

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

私が駆け出しの頃は、下っ端仕事でよくやらされました。 30年くらい前の経験なので、ニモニックが違ってたらゴメン。     LXI H,9000H ;HL←9000H     MOV E,M   ;E←a     MVI D,0   ;D←0 要するにDEレジスタにaをセット     INX H    ;次のアドレス(9001H)     MOV A,M   ;A←b     LXI H,0   ;HL←0 これが積になる LABEL1:     CMC      ;Cyをクリア     RRC      ;CyとAを右にローテイトする     JNC LABEL2  ;Cyが出なければ加算しない     DAD D    ;積に加算     PUSH H    ;積を退避     PUSH D    ;HL←DEとするための処理     POP H    ;ここでHL=DEとなる     DAD D    ;HLを2倍する(HL←HL+DE)     XCHG     ;DEとHLを交換     POP H    ;積を復帰 LABEL2:     ORA A    ;A(乗数)が0かどうかを確認する     JNZ LABEL1  ;乗数が0でなければ繰り返す LABEL3:     SHLD 9002H  ;積を格納 例えば、b=0AEH=174を2進値で表すと、10101110です。 これを掛けるということは(a×128)+(a×32)+(a×8)+(a×4)+(a×2)ということです。 aの値を1倍、2倍、4倍、8倍・・・とし、上記bのビットが1の時だけ加算してゆけば答えが得られます。 処理時間は (1)LABEL1までと、LABEL3以降は1回しか実行されないので、各命令のクロックを加算します。 (2)LABEL1直後のCMCとRRCは8回実行されますので、クロック数合計×8を加算します。 (3)次の条件分岐は2回分岐し、6回は分岐しません。分岐時と非分岐時のクロックをそれぞれ加算します。 (4)DAD~POP H(LABEL2の直前)は6回実行されます。各命令のクロック数合計×6を加算します。 (5)LABEL2以下はORAが8回、JNZは分岐が7回、非分岐が1回です。各クロック数、分岐時と非分岐時のクロックをそれぞれ加算します。 クロック数が求められたらクロックレートから時間を計算できます。 但し、割り込みが無いとしての理論値ですが・・・ P.S. aとbの値は符号なし(0AEH=174)ですよね?符号付だと、符号の判断、2の補数化という操作が入ります。

yui01
質問者

お礼

すごく丁寧に教えてくださってありがとうございます。自分なりにやったものとは少し違いましたけど、すごく参考になりました。本当にありがとうございます。

その他の回答 (1)

noname#65902
noname#65902
回答No.1

前の質問も拝見しました。 課題ということですよね。丸投げは禁止されてます、 さっぱりわからないということでしょうか。 大まかなフローチャートくらいは考えて提示し、 こう考えたんだけど ここをどうやって表現するのかわからないので教えて、 ということなら質問内容に問題ないと思いますが。 因みに、8085 のニーモニックは知っているので (忘れかけてますが) お力になれるかも知れません。 > 掛け算についての表わし方 プログラミングの方が経験殆どないのできれいな回答は 出来ないかもしれませんが... 単純に「被乗数を[乗数の値]回だけ加算する」という方法があります。 これはプログラムとしては「美しくない」ですが、方法はとても解りやすいと思いますが。 さっぱり解らないならこの辺から着手してみたらいかがでしょう。 8085 のレジスタ構成、ニーモニック、出来る演算、条件分岐は 一通り勉強したんですよね? 他にも方法はありますが、とりあえず今は省略します。

関連するQ&A

  • アセンブリ言語でのプログラミングの質問です

    私は、現在情報工学科の学生です。現在学校でアセンブリの授業を受講しているのですが、どうしてもこの問題の掛け算の仕方のプログラミングがわかりません。私も自分でできる限り考え、教科書や書物を読んでみましたが掛け算というものが、どうすれば表せるのかがわからず、ここで質問しました。問題の回答と解説を教えてください、お願いします。 9000H番地の1バイトデータをA、9001H番地の1バイトデータをBとしたとき、AxBを16ビットで求め、下位1バイトを9002H番地、上位1バイトを9003H番地に格納するプログラムを作りなさい。またこのプログラムの実行時間をデータがA=65H、B=0AEHのときに計算しなさい。実行時間の計算では各命令の実行回数を示し、計算式を詳しく書くこと。

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

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

  • 簡単なプログラミングだと思うのですが・・・

     自然数m,nの掛け算を足し算の繰り返しで計算するプログラムを作成したいのですが、プログラミングの本を見ても全く分かりません。 悩みの種です・・・

  • プログラミングの問題です。c言語でお願いします。

    プログラミングの質問です。 c言語でお願いします。 以下の結果が得られるようなプログラムを書いてください。 期末試験では必ずフローチャートを書いてください。また、フローチャートが 書けない場合は、どういう順番でプログラムを書けば よいかを書いてください。 100個のデータを入力させ、プログラム実行者が定めるある値以上のものの個数 を表示する。 プログラミングわからないのでお願いします。

  • プログラミング言語Cとプログラミング言語C++

    プログラミング言語Cとプログラミング言語C++の違いって何ですか? あと、プログラミング言語C++についていくつか質問があります。 #include <iostream> using namespace std; void main(){ cout << "Hello world!" << endl; } このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか? using namespace stdって何ですか? あと、 cout <<"Hello world!"って何ですか?

  • 新しいプログラミング言語の作り方について

    こんにちは、Visual Basic 2010を使ってプログラミング学習中の中2です。 最近疑問に思ったのは、どうすれば新しいプログラミング言語が作れるのかということです。 先週その疑問に対し、「新たに作りたい言語のコンパイラーを作ればよいではないか。」とひらめいたのですが、本当にこれであっているのかと思い質問を投稿しました。

  • プログラミングについて。

    プログラミング初心者です。 ちょっと興味があり、プログラミングの勉強をしています。 テキストベースでプログラムを書いていったとして、どうやってGUIベースにすればいいのでしょうか? Linux上で簡単なプログラムをつくってコンパイルしましたが、コマンドから実行するともちろんCUIでの実行になります。 どうすれば、GUIベースで作れるのでしょうか。 言語以外の知識(専用ソフトウェア等)を必要とするのですか。 それとも、htmlのように画像などを読み込ませ完成させるのでしょうか。 iPhoneアプリ製作などは XCodeなどがありますが、プログラマーとして仕事をしている人は基本的にそのような専用ソフト上でプログラミングしているのでしょうか。

  • プログラミング | そもそも・・・・

    超ド級の初心者がPythonというプログラミング学習を始めているのですが・・・ 言語に関係なく、そもそものところで、プログラムに関する用語をまとめているサイトとかないのでしょうか? たとえばコンパイルとかインタープリターとか。英訳して大体の感じはつかめますが、正確にどういったものかってのが、ド級の初心者には「?」「??」「???」です。 初心者用のサイトや書籍などをみても、そういったワードがぽんっとでてたりします。 勉強不足は棚に上げますが、完全な初学者を対象にしているのに、そんなのひどい。と思います。 プログラムに必要な基礎知識みたいなのがわかるといいのに。 どうすれば学べますか?ご回答お願いします。

  • 猫でもわかるC++プログラミングについて

    猫でもわかるC++ プログラミングで学習している初心者です。 そこで質問です。 Visual C++ 2010 Expressを使って学習していて、 自分では本に書かれている通りやっているつもりなのですが ビルドが問題なく成功しているのに デバッグをしてプログラムを実行すると そのプログラムが勝手に一瞬で終了してしまいます。 プログラムの実行結果が確認できず困っています。 何が間違っているのか自分では分かりません。 問題点が分かれば指摘していただけると嬉しいです。 よろしくお願いします。

  • プログラミングをマスターすると何ができる?

    大学でfortranの授業があります。とても面白いのでプログラミングを趣味としてはじめたいのですが、プログラミングで何ができるのですか?ゲームを作ったりとかきくけれど、そういうのでなく、日常で役に立つプログラムとか作るんですか? 授業では演習(主に数値計算)を解くのを目標に勉強しますが、趣味で数値計算はあまりやらないでしょう。 また、どの言語がおすすめですか?

専門家に質問してみよう