私は 2 つの 8 ビット数を乗算し、それらを 16 ビットの場所に格納して 255 より大きい結果を得ようとしています。これを達成する最速の方法は、シフトを使用することです。これは、rrcf 関数を介して実装し、bcf を使用して不要なキャリーをクリアしようとしました。
これがアイブが思いついたものです。すべてのコードにコメントを付けてみたので、私の思考プロセスを確認できます。私はPIC18とASMでのプログラミングの両方に一般的にかなり慣れていません。(うまくいけば)助けを提供するときは、そのことを覚えておいてください。MPLAB SIM を実行すると、カウンターが減少するだけです...?
これは、乗数の最後のビットが繰り返しテストされているためだと思います。これはゼロになるため、毎回追加命令をスキップします。BTFSC をビット 0 ~ 7 から段階的に移動するループの作成を手伝ってもらえますか? これが問題だと思いますが、コードがわかりません。私は本質的にmainを8回書くことができましたが、コードスペースを節約しようとしています
LIST P=18F4550
#include <P18F4550.INC>
;equates
counter equ 0x00 ;set counter
multiplicand equ 0x01 ;set multiplicand
multiplier equ 0x02 ;set multiplier
resultHigh equ 0x03 ;set resultHigh
resultLow equ 0x04 ;set resultLow
;test program
movlw d'100' ;move literal d'100' to wreg
movwf multiplicand ;set multiplicand
movlw d'400' ;move literal d'400'
movlw multiplier ;set multiplier
movlw d'8' ;counter
movwf counter ;set counter
main:
btfsc multiplier, 0 ;test LSB if 0,skip next if 0
addwf multiplier, resultLow ;add if 1 to resultLow
bcf STATUS,C ;clear carry flag
rlcf multiplier ;rotate multiplier left
bcf STATUS,C ;clear carry
rlcf resultLow ;rotate resultLow w/ carry
rlcf resultHigh ;rotate resultHigh
;w/carry from resultLow
decf counter ;dec counter
goto main ;repeat for 8 bits
end