2018/7/23(MON) 【後方排気】SI:やっぱり16ビット計算
やっぱり、いろいろ検討すると
16ビットでの計算が必要そう
この前の5倍して割り算して2倍じゃやっぱ足りない。
ということで16ビットの計算を実装する。
アセンブラで・・・

まずは簡単なところで10倍するロジックを考える
73を10倍してみる。
73を16進数、2進数で表現すると
8ビットだとこんな感じ。
フォト

これを16ビットで表現すると
こんな感じで上位8ビットと下位8ビットで表す
フォト

で、これを10倍するには
左に1ビットシフトした値(2倍)
フォト


左に3ビットシフトした値(8倍)
フォト


足して10倍の値を求めます。
フォト

で、アセンブラだと1ビットずつしかシフトできないのと
レジスタが8ビットなので
上位と下位ごとに計算する必要があります。
まず3ビットシフトした値(8倍)を求めるロジック
フォト

たかだか3ビットシフトするだけで
こんだけステップ数がかかるのか?
下位をシフトしたときに桁あふれしたら
上位に+1しています

73を10倍するロジックはこんな感じ
フォト

3ビットシフトした値と1ビットシフトした値を足してます
特筆することはもないですけど
上位と下位を別々にあつかうところですかね?

シミュレーターで動かしてみると
フォト

反転しているところ
上位と下位は
さきほどの机上計算の上位と下位と一致しています
フォト

73の10倍の730となっていますので
合ってそうですね。

だぁ〜アセンブラ面倒くせぇ〜
次は割り算かな???
これだけステップ数掛かると
システムの成立性のために
処理時間をちゃんと計算した方がよさそう。。。

まだまだつづく。。。