アセンブラで掛け算

 

 MPLABのアセンブラで掛け算をします。例として42×57を計算します。
コンピュータは直接掛け算できません。2進数でシフト演算と加算の組合せで行います。

1 
まず準備として20番地から25番地を定義します。被乗数の1バイトを20番地、乗数の上位バイトを21番地、下位バイトを22番地、結果の上位バイトを23番地、下位バイト24番地を置きますがクリアしておきます。25番地にはカウント値8を入れます
トップページへ戻る

 被乗数である20番地の0x42の0ビット目を調べ0ですので、と同様に22番地、
21番地を左シフト、20番地を右シフト、25番地を1減算します。

 被乗数である20番地の0x42の0ビット目を調べ0ですので、と同様に22番地、
21番地を左シフト、20番地を右シフト、25番地を1減算します。

 被乗数である20番地の0x42の0ビット目が0ですので、22番地、21番地を左シフト
、20番地を右シフト、25番地を1減算します。

プログラムの全貌です。

 被乗数である20番地の0x42の0ビット目を調べ0ですので、と同様に22番地、
21番地を左シフト、20番地を右シフト、25番地を1減算します。

 被乗数である20番地の0x42の0ビット目を調べ0ですので、と同様に22番地
、21番地を左シフト、20番地を右シフト、25番地を1減算します。

 被乗数である20番地の0x21の1ビット目を調べ1ですので、3と同様に24番地に
22番地を加算し23番地に21番地を加算。22番地21番地を左シフト、20番地を右シフ
ト、25番地を1減算します。

 被乗数である20番地の0x42の0ビット目を調べ0ですので、と同様に22番地、
21番地を左シフト、20番地を右シフト、25番地を1減算します。

 被乗数である20番地の0x21の1ビット目が1ですので、24番地に22番地を加算し
24番地に21番地を加算。22番地21番地を左シフト、20番地を右シフト、25番地を1減
算します。

10 以上で演算のルーチンが完了し無限ループに入ります。結果は166Eとなりました。
16進の42×57は10進の66×87で5742です。これを16進で表わすと166E
になります。