ついこの前、同じを質問したのですが、私の理解不足と説明不足により質問の仕方が悪いと回答され、自分なりにアセンブラ言語について学習してみました。学習してみるとたしかに私は何も理解しておらず、8085系のプログラミングということも書き忘れていました。ここでのスレでまずお詫びしたいと思います。誠に申し訳ありませんでした、こんな私ですが、もしよければアセンブリ言語での8085系のプログラミングでこの質問に対する回答と解説のご教授お願いします。
9000H番地の1バイトデータをa、9001H番地の1バイトデータをbとしたとき、axbを16ビットで求め、下位1バイトを9002H番地、上位1バイトを9003H番地に格納するプログラムを作りなさい。またこのプログラムの実行時間をデータがA=65H、B=0AEHのときに計算しなさい。実行時間の計算では各命令の実行回数を示し、計算式を詳しく書くこと。
8085系のプログラミングでは、掛け算の関数がないので、掛け算についての表わし方だけでもいいので教えてください、お願いします
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の補数化という操作が入ります。
すごく丁寧に教えてくださってありがとうございます。自分なりにやったものとは少し違いましたけど、すごく参考になりました。本当にありがとうございます。
No.1
- 回答日時:
前の質問も拝見しました。
課題ということですよね。丸投げは禁止されてます、
さっぱりわからないということでしょうか。
大まかなフローチャートくらいは考えて提示し、
こう考えたんだけど
ここをどうやって表現するのかわからないので教えて、
ということなら質問内容に問題ないと思いますが。
因みに、8085 のニーモニックは知っているので
(忘れかけてますが) お力になれるかも知れません。
> 掛け算についての表わし方
プログラミングの方が経験殆どないのできれいな回答は
出来ないかもしれませんが...
単純に「被乗数を[乗数の値]回だけ加算する」という方法があります。
これはプログラムとしては「美しくない」ですが、方法はとても解りやすいと思いますが。
さっぱり解らないならこの辺から着手してみたらいかがでしょう。
8085 のレジスタ構成、ニーモニック、出来る演算、条件分岐は
一通り勉強したんですよね?
他にも方法はありますが、とりあえず今は省略します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
8ビットのデータの、先頭ビット...
-
0xffffとは?
-
ビットシフトってどんな時使うの?
-
エクセルVBAのIf,Then 構...
-
符号無し整数xを右にnビット回転
-
算術右シフトの結果が1/2になる...
-
命令について
-
IEEE規格浮動小数点について
-
MIPSアセンブラの問題です。
-
整数除算の意味とは?
-
DirectXでSIMD命令セットについて
-
verilog 符号付加減算(最上位...
-
ビット演算子
-
浮動小数点数の内部表現につい...
-
文字参照は10進数と16進数では...
-
1の補数
-
上位ビットと下位ビットの入れかえ
-
一般のソフトで画像を扱う場合...
-
アルゴリズムの計算量とオーダ
-
ライン数とステップ数の違いは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
エクセルVBAのIf,Then 構...
-
一般のソフトで画像を扱う場合...
-
ビットシフトってどんな時使うの?
-
シーケンス制御についての質問...
-
文字参照は10進数と16進数では...
-
C言語で128bitの2進数のビット...
-
Python: 数値を反転させたい
-
2の補数
-
verilog 符号付加減算(最上位...
-
アクセス(2003)のVBAでビット...
-
命令について
-
符号無し整数xを右にnビット回転
-
算術シフト演算が成り立つ理由...
-
03分22秒36のような時間の単位...
-
16進数でのAND演算
-
[VBS] 素早くローテート演算したい
-
整数除算の意味とは?
-
Javaの問題について
おすすめ情報