20170711_a (20170630) 問.プログラムを作れ。 (1)16bitの(符号なし)整数2個の和を求める。 (2)8bitの(符号なし)整数2個の積を求める。 ; seki 2017.07.18 ; 2001.09.04 ; by M.Yanaka ; 乗算 ; 8bitの(符号なし)整数2個の積を求める LIST P=16F877 ; マイコンはPIC16F877 INCLUDE P16F877.INC ; インクルードファイルを指定(STATUSやC等の記号定数が使用可能になる) CBLOCK 20H ; ファイルアドレス20H番地から変数を割り当てる Areg ; Aレジスタ(被乗数) Breg ; Bレジスタ(乗数) Hreg ; Hレジスタ(積の上位バイト) Lreg ; Lレジスタ(積の下位バイト) COUNT ; 繰り返し用カウンタ ENDC ; CBLOCK の終わり ORG 0 CLRF Hreg ; 積をゼロクリア CLRF Lreg ; 積をゼロクリア MOVLW 8 ; 繰り返し用のカウンタを MOVWF COUNT ; 8で初期化する. MOVF Areg,W ; Aレジスタの被乗数をWレジスタへコピーする. LOOP BCF STATUS,C ; Carry をクリア(ローテートシフトの準備) RLF Lreg,F ; Lレジスタの被乗数を左シフトして2倍にする. RLF Hreg,F ; Hレジスタの被乗数を左シフトして2倍にする. RLF Breg,F ; Bレジスタの乗数を左シフトして, BTFSS STATUS,C ; Carry = 1 ならば,次の命令をスキップ GOTO NEXT ; Carry = 0 ならば,次の繰り返しへ ADDWF Lreg,F ; Lレジスタ ← Lレジスタ(積の下位)+ Wレジスタ(被乗数). BTFSC STATUS,C ; Carry = 0 ならば,次の命令をスキップ INCF Hreg,F ; Carry = 1 ならば,Hレジスタ ← Hレジスタ(積の上位)+ 1 NEXT DECFSZ COUNT,F ; COUNT(カウンタ)を1つ減らして,COUNT = 0 でなければ, GOTO LOOP ; LOOP から繰り返す. GOTO $ END