我试图将两个 8 位数字相乘并将它们存储在 16 位位置以获得大于 255 的结果。完成此操作的最快方法是通过移位,我试图通过 rrcf 函数实现它并使用 bcf 清除不需要的进位。
这就是我想出的。我试图评论所有代码,以便您能够看到我的思考过程。总的来说,我对 PIC18 和 ASM 编程都很陌生。在(希望)提供帮助时请记住这一点。我需要放在一个比现在更好的位置,当我运行 MPLAB SIM 时,我得到的只是计数器递减......?
我认为这是由于乘法器的最后一位被反复测试,这将是零,因此每次都跳过我的加法指令。你能帮我创建一个循环以从 0-7 位逐步移动 BTFSC 吗?我认为这是问题所在,但我无法弄清楚代码。我基本上可以写 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