avr 2313 asm, skifta godt. antal bitar?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

avr 2313 asm, skifta godt. antal bitar?

Inlägg av Rymdninja »

Hejsan.
Jag stötte på ett litet problem när jag programmerade min 2313 nyss.
Det jag har är ett register med värdet 0x01 i, alltså bara bit 0 är satt.
Det jag skulle vilja göra är att skifta den biten ett antal steg, nämligen så många som det står i ett annat register.
De shift och rotations operationer som finns shiftar bara konstant antal steg.

Så, vad kan man göra då? Jo, en enkel liten loop kanm an juh snickra ihop, men ack vad fult och onödigt det känns...finns det inget annat sätt?

Tack o hej
Användarvisningsbild
Melker
Inlägg: 410
Blev medlem: 26 maj 2003, 22:17:34
Ort: Umeå

Inlägg av Melker »

tror inte det finns något bättre sätt, så länge inte uC har multiplikationsinstruktionen.
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

Tänkte vissa några alternativ
f1 typ case satsen
f2 är lock up table typ
f3 är den vanliga

f1 och f2 kan det behövas a push och popa register som man inte vill förlora (r30, r31 samt r0 för f2)

Kod: Markera allt

;Exempel 1
; size 13 words
; cyckler 6-13 + ret
f1:
	ldi r30, low(hopp+7)
	ldi r31, high(hopp+7)
	
	sub r30, R16
	sbci r31,0
	
	ijmp
hopp:
	lsl r17
	lsl r17
	lsl r17
	lsl r17
	lsl r17
	lsl r17
	lsl r17

	ret	
;Slut på funktionen 


;Exempel 2
; size 13 word
; cyckler 1-10 + ret
f2:
	sbrs r17, 0
	ret
	ldi r30, low(table<<1)
	ldi r31, high(table<<1)
	
	add r30, R16
	sbci r31,0
	
	lpm
	mov r17, r0
	ret
	
table:
	.dw 0x0201
	.dw 0x0804
	.dw 0x2010
	.dw 0x8040


;Exempel 3
; size 5 word
; cyckler 3-38 + ret
f3:
	dec r16
	brmi f3_hopp
	lsl r17
	rjmp f3
f3_hopp:
	ret
Dock de inte är bättre... utan lite anorlunda :)

multplikation hjälper dock inte i det här falet....
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

coolness :)
hade tagit en stund att fudnera ut sånt själv..dock i det här fallet behöver jag varken fundera på antalet intruktioner eller åtgångna cykler, så det lär juh bli loopen :)
Skriv svar