[旋風][6502匯編][16位乘法]

;[Multiplication][16_16_32]
;FlameCyclone 20181120
FactorA_L = $00 ;因數(shù)A低位
FactorA_H = $01 ;因數(shù)A高位
FactorB_L = $02 ;因數(shù)B低位
FactorB_H = $03 ;因數(shù)B高位
Product_LL = $04 ;乘積低位
Product_LH = $05 ;乘積高位
Product_HL = $06 ;乘積低位
Product_HH = $07 ;乘積高位
Product_Temp_LL = $08 ;臨時積低位
Product_Temp_LH = $09 ;臨時積高位
Product_Temp_HL = $0A ;臨時積低位
Product_Temp_HH = $0B ;臨時積高位
BitTest_L = $0C
BitTest_H = $0D
;65535*65535耗時1466
;255*255耗時1226
;1*1耗時967
?.ORG $8000
?LDA #255
?STA FactorA_L
?LDA #255
?STA FactorA_H
?LDA #255
?STA FactorB_L
?LDA #255
?STA FactorB_H
?JSR Multiplication
?RTS
?
Multiplication: ;乘法計算
?LDA #00
?STA Product_LL
?STA Product_LH
?STA Product_HL
?STA Product_HH
Set_Max:
?LDA FactorA_L
?STA Product_Temp_HL
?LDA FactorA_H
?STA Product_Temp_HH
?LDA #$00
?STA Product_Temp_LL
?STA Product_Temp_LH
?
Set_Max_Beg: ;計算最大位的乘數(shù)積
?LSR Product_Temp_HH
?ROR Product_Temp_HL
?ROR Product_Temp_LH
?
?LDY #15
?LDA #$80
?STA BitTest_H
?LDA #$00
?STA BitTest_L
Multiplication_BitTest: ;檢測乘數(shù)B的單獨位
?LDA BitTest_H
?BIT FactorB_H
?BNE Addition
?LDA BitTest_L
?BIT FactorB_L
?BEQ Addition_End
Addition: ;將臨時積于最終積累加得出結果
?LDA Product_Temp_LL
?CLC
?ADC Product_LL
?STA Product_LL
?LDA Product_Temp_LH
?ADC Product_LH
?STA Product_LH
?LDA Product_Temp_HL
?ADC Product_HL
?STA Product_HL
?LDA Product_Temp_HH
?ADC Product_HH
?STA Product_HH
Addition_End: ;測試位繼續(xù)右移, 準備下次位測試
?LSR Product_Temp_HH
?ROR Product_Temp_HL
?ROR Product_Temp_LH
?ROR Product_Temp_LL
?LSR BitTest_H
?ROR BitTest_L
?DEY
?BPL Multiplication_BitTest
Multiplication_End: ;乘法計算結束
?RTS