20170711 (20170630) 問.プログラムを作れ。 (1)16bitの(符号なし)整数2個の和を求める。 (2)8bitの(符号なし)整数2個の積を求める。 乗算のヒント(1) Aレジスタの内容を10倍する。 ただし、Aレジスタの内容は25以下であるものする (積は250以下なので,8ビットに納まる)。 ーーーーー ーーーーー ーーーーー ーーーーー ーーーーー ーーーーー ーーーーー ーーーーー 【方法1】 ; seki01 2017.07.10 ; 2001.09.04 ; by M.Yanaka ; 乗算の基礎(10倍) ; 方法1 LIST P=16F877 ; マイコンはPIC16F877 INCLUDE P16F877.INC ; インクルードファイルを指定(STATUSやC等の記号定数が使用可能になる) CBLOCK 20H ; ファイルアドレス20H番地から変数を割り当てる Areg ; Aレジスタ(被乗数->積) ENDC ; CBLOCK の終わり ORG 0 CLRW ; 積(Wレジスタ)を0で初期化する. ; RLF Areg,F ; Aレジスタの被乗数を左シフトして2倍にする. ADDWF Areg,W ; Wレジスタ ← Wレジスタ(0) + 被乗数の2倍. RLF Areg,F ; Aレジスタ ← 被乗数の4倍. RLF Areg,F ; Aレジスタ ← 被乗数の8倍. ADDWF Areg,W ; Wレジスタ ← Wレジスタ(被乗数の2倍)+ 被乗数の8倍. MOVWF Areg ; Aレジスタ ← Wレジスタ(被乗数の10倍). GOTO $ END ーーーーー ーーーーー ーーーーー ーーーーー ーーーーー ーーーーー ーーーーー ーーーーー 【方法2】 ; seki02 2017.07.10 ; 2001.09.04 ; by M.Yanaka ; 乗算の基礎(10倍) ; 方法2 LIST P=16F877 ; マイコンはPIC16F877 INCLUDE P16F877.INC ; インクルードファイルを指定(STATUSやC等の記号定数が使用可能になる) CBLOCK 20H ; ファイルアドレス20H番地から変数を割り当てる Areg ; Aレジスタ(被乗数->積) ENDC ; CBLOCK の終わり ORG 0 MOVF Areg,W ; Aレジスタの被乗数をWレジスタへコピーする. ; RLF Areg,F ; Aレジスタの被乗数を左シフトして2倍にする. RLF Areg,F ; Aレジスタ ← 被乗数の4倍. ADDWF Areg,F ; Aレジスタ ← 被乗数の5倍 = Aレジスタ(4倍) + Wレジスタ(被乗数). RLF Areg,F ; Aレジスタ ← 被乗数の10倍. GOTO $ END