我試圖乘以兩個8位數字,並將它們存儲在一個16位的位置,以獲得大於255的結果。最快速的方法是通過移位,我嘗試通過rrcf函數實現並使用bcf清除不需要的運載。快速8x8bit乘法程序集pic18
這就是我想出的。我試着評論所有的代碼,以便能夠看到我的思維過程。對於PIC18和一般的ASM編程,我都相當陌生。當(希望)提供幫助時請記住這一點。當我運行MPLAB SIM時,我需要比我進入一個更好的位置,我得到的是計數器遞減......?
我認爲這是由於乘法器的最後一位被重複測試,這將是零,因此每次跳過我的加法指令。你能幫我創建一個循環,從位0-7逐步移動BTFSC嗎?我認爲這是問題,但我無法弄清代碼。我可以essentailly寫主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
你從不添加乘數和被乘數,雖然,你只需要添加的結果。尤其是二進制。如果你有1001X1101 – matt
你只能將1101 + 00000 + 110100 + 110100加在一起 – matt
我確實犯了一些巴斯卡錯誤,但我不知道該怎麼轉移!!!! – matt