 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Tor Okt 11, 2011 1:30 pm Naslov sporočila: Obračaje spremenljivke |
|
|
Iskal sem a nisem našel logično funkcijo, ki bi obrnila bite v bytu.
Imam spremenljivko npr. 10011110 jaz pa bi jo rad obrnil se pravi da bi dobil 01111001 .
V bascomu nisem našel nobenega ukaza ki bi to naredil, nimam pa ideje katera logična funkcija bi pomagala . _________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.67 Kraj: KOPER
|
Objavljeno: Tor Okt 11, 2011 1:55 pm Naslov sporočila: |
|
|
Tako naredi:
Koda: |
Dim A As Byte
Dim B As Byte
Dim I As Byte
Dim X As Byte
A = &B10011110
X = 7
For I = 0 To 7
If A.i = 1 Then Set B.x Else Reset B.x
Decr X
Next I |
_________________ Lep pozdrav iz Kopra Rudi
Nazadnje urejal/a rudiP Tor Okt 11, 2011 2:09 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Tor Okt 11, 2011 2:00 pm Naslov sporočila: |
|
|
Ukaz B = NOT A invertira bite, jaz pa bi rad zamenjal vrednosti prvega in osmega bita, drugega in sedmega itd. Tako bi obrnil vrstni red X=ABCD / Y=DCBA. _________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Okt 11, 2011 2:04 pm Naslov sporočila: |
|
|
assemblerski "swap" v registru menja zgornje bite s spodnimi. Verjetno bo v bascomu kak podoben ukaz. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Tor Okt 11, 2011 2:24 pm Naslov sporočila: |
|
|
Ne poznam assemblerja ... lahko pa v bascom vključim asm kodo. Ali bi nekaj takega delovalo?
Koda: |
Dim A As Byte
Loadadr A , X
$asm
Swap X
$end Asm
|
@Rudi ... rešitev je res enostavna vendar časovno malo požrešna. Tudi sam sem razmišljal o tem da bi vsak bit posebej uporabil. Če ne bom našel boljše rešitve pa uporabim to  _________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Tor Okt 11, 2011 2:30 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
Vlado Član

Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 563 Aktiv.: 2.38 Kraj: Ljubljana
|
Objavljeno: Tor Okt 11, 2011 2:33 pm Naslov sporočila: |
|
|
Poskusi SHIFT, ali ROTATE |
|
Nazaj na vrh |
|
 |
S53DZ Član



Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 5.52 Kraj: Ljubljana
|
Objavljeno: Tor Okt 11, 2011 3:50 pm Naslov sporočila: |
|
|
V ARM asemblerju bi bila lahko rešitev s shiftom taka (na hitro spisana in ne preizkušena koda):
Koda: |
; vhod r0=x
; izhod r0=y
mov r1, #0
mov r2, #0x80; maska in index
mov r0, r0, LSL #7
loop:
and r3, r0, r2
orr r1, r1, r3
mov r0, r0, LSR #2
movs r2, r2, LSR #1
bne loop
mov r0, r1; vrne obrnjen byte v r0 |
EDIT: koda je preizkušena in deluje
Nazadnje urejal/a S53DZ Čet Okt 13, 2011 10:54 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Okt 11, 2011 4:56 pm Naslov sporočila: |
|
|
Šele sedaj sem videl, da ne menjaš bite 7-3,6-2,5-1,4-0 ampak 7-0,6-1,5-2,4-3
V assemblerju bi potem 8x shiftnil en register v eno drugega pa v drugo stran.
Vrednost v R16 bo po tej kodi "zrcalna"
Primer :
Koda: |
ldi r17,1
Zanka:
lsr r16
rol r17
brcc Zanka
mov r16,r17 |
Kako to "vtaknit" v Bascom kodo pa ne vem. (če prevajalnik dopusti direkten dostop do registrov potem ne bi smelo biti problema) _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Tor Okt 11, 2011 6:56 pm Naslov sporočila: |
|
|
To je najlažje direktno s preverjanjem in nastavljanjem posameznih bitov narediti, pa naj se prevajalnik potem ukvarja s kodo. Pri tako enostavnih "if" pogojih je verjetno .hex kode vsega 15 vrstic.
Koda: |
spr2=0 // najprej je nova spremenljivka 0
if spr1.0=1 then // če je bit 0 v spr1 enak 1
spr2.7 = 1 // se tudi bit 7 v spr2 postavi na 1
endif
if spr1.1=1 then
spr2.6 = 1
endif
if spr1.2=1 then
spr2.5 = 1
endif
if spr1.3=1 then
spr2.4 = 1
endif
if spr1.4=1 then
spr2.3 = 1
endif
if spr1.5=1 then
spr2.2 = 1
endif
if spr1.6=1 then
spr2.1 = 1
endif
if spr1.7=1 then
spr2.0 = 1
endif |
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|