|
发表于 2009-9-22 09:22:44
|
显示全部楼层
我也想知道呀。我看了源程序,对应那个中断程序和乘法程序还没有看明白。
乘法是使用一个MULT宏:
; T0 = int8(EL) x .uint8(EH), 32clks
.macro MULT
mov T0H, EL
sbrc EL, 7
neg EL
clr T0L
sbrc EH, 0
add T0L, EL
lsr T0L
sbrc EH, 1
add T0L, EL
lsr T0L
sbrc EH, 2
add T0L, EL
lsr T0L
sbrc EH, 3
add T0L, EL
clr T0L
sbrc EH, 4
add T0L, EL
lsr T0L
sbrc EH, 5
add T0L, EL
lsr T0L
sbrc EH, 6
add T0L, EL
lsr T0L
sbrc EH, 7
add T0L, EL
lsl T0H
mov T0H, _0
brcc PC+3
neg T0L
sbc T0H, T0H
.endm
我搞不明白到底是什么回事,我调试时候总是得不到正确的结果。后来我编写了一个,不知道功能是否和原来的一样?
.macro MULT
PUSH AL
PUSH AH
PUSH EH
MOV AL,EL
CLR AH
CLR T0L
CLR T0H
SBRC EH,0
ADD T0L,AL
SBRC EH,0
ADC T0H,AH
LSL AL
ROL AH
LSR EH
CPI EH,0
BRNE PC-8
POP EH
POP AL
POP AH
.endm |
|