Chương trình nhân 16 bit với 16 bit, kết quả lưu vào thanh ghi 16 bit
Code:
org 0x020
;Cac thanh ghi của biến nhân và hệ số nhân
mulcH Res d'1' ; MSB of multiplicand.
mulcL Res d'1' ; LSB of multiplicand.
mulpH Res d'1' ; MSB of multiplier.
mulpL Res d'1' ; LSB of multiplier.
;Các thanh ghi lưu kết quả nhân
prodH Res d'1' ; MSB of product.
prodL Res d'1' ; LSB of product.
index Res d'1' ; temporary counter
;Chuong trinh chinh
start MOVLW d'0' ; Problem: multiply
MOVWF mulcH
MOVLW 0x0B ; 0Bh by 1016h
MOVWF mulcL
MOVLW 0x10
MOVWF mulpH
MOVLW 0x16
MOVWF mulpL
CALL multiply
GOTO $ ; Endless loop
Multiply
CLRF prodH ; Clear product to make
CLRF prodL ; way for new calculation.
MOVLW d'16' ; Number of bits to calc.
MOVWF index
Multiply_loop
BCF status,c
RLF prodL ; Shift product left.
RLF prodH
BCF status,c
RLF mulcL ; Shift multiplicand left.
RLF mulcH
BTFSS status,c ; If carry, add multiplier
GOTO Multiply_skip
MOVF mulpL,w ; to the product. Else skip.
ADDWF prodL
BTFSC status,c ; 16-bit addition: prod+mulp
INCF prodH
MOVF mulpH,w
ADDWF prodH
Multiply_skip
DECFSZ index
GOTO Multiply_loop
RETLW 0h
end
Nếu bạn nào làm VHDL hoặc PLC, muốn thực hiện phép cộng thì dùng phép toán nào? Vậy nguyên tắc của phép nhân chính là cộng rồi cộng mãi, nếu như hệ số nhân tại điểm đó là 1.
Chỉ vậy thôi