Truncated match.
PICList
Thread
'Challenge? restoring from byte mask 10000000..0000'
2000\06\07@115621
by
Dmitry Kiryashov
Hi guys.
As I recall we have discussions in the past the situation with numbers 0..7
conversion into 00000001..10000000 byte mask.
Here is reverse task. It is required to convert byte mask back into number.
I suggest that somebody else probably has successfully researched this before.
This is what I've discovered... It takes 12 clocks/words
; W before -> W after
; abcdefgh -> 00000ABC
; 10000000 -> 7 = 4+2+1
; 01000000 -> 6 = 4+2+0
; 00100000 -> 5 = 4+0+1
; 00010000 -> 4 = 4+0+0
; 00001000 -> 3 = 0+2+1
; 00000100 -> 2 = 0+2+0
; 00000010 -> 1 = 0+0+1
; 00000001 -> 0 = 0+0+0
movwf temp ;save abcdefgh
swapf temp,W ;efghabcd
xorwf temp,F ;........
andlw 0xF ;0000abcd
skpz
movlw 4 ;load A=0/4
btfss temp,3
btfsc temp,2
iorlw 2 ;add B=0/2
btfss temp,3
btfsc temp,1
iorlw 1 ;add C=0/1
;W holds 7..0 of result
WBR Dmitry.
2000\06\11@203519
by
Marc
> This is what I've discovered... It takes 12 clocks/words
You can make it a table-read, and fill the gaps with other sub functions.
Under the presumption that you can make use of any area of 3+ words in size,
this method uses 6 cycles (incl call/ret) and 11 words.
addwf pc,f
(1 wasted word)
retlw 0
retlw 1
(1 wasted word)
retlw 2
(3 spare words)
retlw 3
(7 spare words)
retlw 4
(15 spare words)
retlw 5
...
(I'm a bit rusty in PIC asm, so I hope that I got it all right)
2000\06\16@113005
by
Marc
> This is what I've discovered... It takes 12 clocks/words
You can make it a table-read, and fill the gaps with other sub functions.
Under the presumption that you can make use of any area of 3+ words in size,
this method uses 6 cycles (incl call/ret) and 11 words.
addwf pc,f
(1 wasted word)
retlw 0
retlw 1
(1 wasted word)
retlw 2
(3 spare words)
retlw 3
(7 spare words)
retlw 4
(15 spare words)
retlw 5
...
(I'm a bit rusty in PIC asm, so I hope that I got it all right)
More... (looser matching)
- Last day of these posts
- In 2000
, 2001 only
- Today
- New search...