欢迎光临散文网 会员登陆 & 注册

[旋风][6502汇编][16位乘法]

2019-04-05 00:31 作者:FlameCyclone  | 我要投稿

;[Multiplication][16_16_32]

;FlameCyclone 20181120

FactorA_L = $00 ;因数A低位

FactorA_H = $01 ;因数A高位

FactorB_L = $02 ;因数B低位

FactorB_H = $03 ;因数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: ;计算最大位的乘数积

 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: ;检测乘数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: ;测试位继续右移, 准备下次位测试

 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


[旋风][6502汇编][16位乘法]的评论 (共 条)

分享到微博请遵守国家法律