Auttakaa avutonta assemblerkoodaajaa..Miten saan tehtyä ohjelman joka ottaa rekisteristä ER3 pareittain vierekkäiset bitit ja tekee niiden AND-funktion ja laittaa saadut 16bittiä R3-rekisteriin...? :/
assembleria..
8
615
Vastaukset
- adaga
Siis no en ole tuolle vermeelle (H8) assembly vetänyt mutta tässä on x86 ratkaisu:
cx=data res cl
mov ax,cx
mov bx,cx
and ax,0x5555
and bx,0xaaaa
rol ah,1
and al,ah
ror bl,1
and bl,bh
and al,bl
mov cl,al
eli selitys
cx=x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7
josta siirron ja and kautta
ax=00,y0,00,y1,00,y2,00,y3,00,y4,00,y5,00,y6,00,y7
bx=x0,00,x1,00,x2,00,x3,00,x4,00,x5,00,x6,00,x7,00
josta rotaten ja and:n kautta
al=y0,y4,y1,y5,y2,y6,y3,y7
bl=x0,x4,x1,x5,x2,x6,x3,x7
jonka jälkeen al AND bl on tulos joka sijoitetaan cl:ään. Toivottasti selvisi perusajatus. Bittien järjestys vaihtuu mutta se nyt vaan on tässä tapauksessa niin.- Punikki & 7 hyypiötä
vaikka mitä arvoja antaisi? kopsin koodin suoraan...
oma versio:
http://www.jippii.fi/jsp/forum/thread.jsp?b=tietokone&t=17461 - Sinivuokko
Punikki & 7 hyypiötä kirjoitti:
vaikka mitä arvoja antaisi? kopsin koodin suoraan...
oma versio:
http://www.jippii.fi/jsp/forum/thread.jsp?b=tietokone&t=17461Adagan idea on hyvä ja palvelee sellaisenaan tarkoitustaan. Vain toteutus hieman ontuu.
Lopputulos on todellakin aina nolla, koska maskaus on mennyt väärin. Esimerkiksi tilanne, jossa ax-rekisterin kaikki bitit ovat ykkösiä (ax=0xFFFF):
..
and ax,0x5555 ;ax=0x5555
..
rol ah,1 ;ax=0xAA55
and al,ah ;al=0x00
Esimerkissä oli myös puolet liikaa rivejä ;-)
In: ax
Out: al
mov dx,ax
add ax,ax
and ax,dx
and ax,0xAAAA
shr al,1
or al,ah
Erona versioosi (http://www.jippii.fi/...), maskaus ja 'and' kannattaa tehdä kuten edellä on esitetty, ei loopissa. Looppi aiheuttaa väistämättä ylimääräistä työtä ja ajanhukkaa, mitä tottakai yritämme välttää silloin harvoin kun assyyn turvaudumme.
Adagan ideassa kuten yo. versiossakin lopputuloksen bitit ovat vaihtaneet paikkaa ikävästi. Tämän korjaaminen, jos se on tarpeen, onkin jo helpommin tehtävissä esim. loopilla tai jos nopeus on tilankäyttöä tärkeämpää, vaikkapa xlat-käskyllä.
Tarve juuri tällaiselle maskaukselle voi tulla vastaan esim. jonkin raudan i/o-porttiin liittyen. Jos kyseessä olisi puhdas softaratkaisu, bittien koodausta kannattaisi miettiä uudelleen. - adaga
Sinivuokko kirjoitti:
Adagan idea on hyvä ja palvelee sellaisenaan tarkoitustaan. Vain toteutus hieman ontuu.
Lopputulos on todellakin aina nolla, koska maskaus on mennyt väärin. Esimerkiksi tilanne, jossa ax-rekisterin kaikki bitit ovat ykkösiä (ax=0xFFFF):
..
and ax,0x5555 ;ax=0x5555
..
rol ah,1 ;ax=0xAA55
and al,ah ;al=0x00
Esimerkissä oli myös puolet liikaa rivejä ;-)
In: ax
Out: al
mov dx,ax
add ax,ax
and ax,dx
and ax,0xAAAA
shr al,1
or al,ah
Erona versioosi (http://www.jippii.fi/...), maskaus ja 'and' kannattaa tehdä kuten edellä on esitetty, ei loopissa. Looppi aiheuttaa väistämättä ylimääräistä työtä ja ajanhukkaa, mitä tottakai yritämme välttää silloin harvoin kun assyyn turvaudumme.
Adagan ideassa kuten yo. versiossakin lopputuloksen bitit ovat vaihtaneet paikkaa ikävästi. Tämän korjaaminen, jos se on tarpeen, onkin jo helpommin tehtävissä esim. loopilla tai jos nopeus on tilankäyttöä tärkeämpää, vaikkapa xlat-käskyllä.
Tarve juuri tällaiselle maskaukselle voi tulla vastaan esim. jonkin raudan i/o-porttiin liittyen. Jos kyseessä olisi puhdas softaratkaisu, bittien koodausta kannattaisi miettiä uudelleen.and al,ah
and bl,bh
pitäisi olla
or al,ah
or bl,bh - adaga
Punikki & 7 hyypiötä kirjoitti:
vaikka mitä arvoja antaisi? kopsin koodin suoraan...
oma versio:
http://www.jippii.fi/jsp/forum/thread.jsp?b=tietokone&t=17461Ei ollut ajatus antaa kysyjälle valmista koodia suoraan. Eikä tuo olisi toiminutkaan kun käskykanta kysyjällä on eri. Ajatus oli lähinnä näyttää yksi lähestymistapa ongelman ratkaisuun.
- Punikki & 7 hyypiötä
adaga kirjoitti:
Ei ollut ajatus antaa kysyjälle valmista koodia suoraan. Eikä tuo olisi toiminutkaan kun käskykanta kysyjällä on eri. Ajatus oli lähinnä näyttää yksi lähestymistapa ongelman ratkaisuun.
Juu, mielenkiinnosta kokeilin sun versiota, omassa kun on (turhaan) silmukka kun fiksumminkin asian voi hoitaa.
- hiha
Punikki & 7 hyypiötä kirjoitti:
Juu, mielenkiinnosta kokeilin sun versiota, omassa kun on (turhaan) silmukka kun fiksumminkin asian voi hoitaa.
Hienoa nähdä että assemlerkoodareitakin on hengissä ja hengailemassa tälläkin palstalla. Itellä viimenen soodaus assemblerilla joskus -90.
- Punikki & 7 hyypiötä
hiha kirjoitti:
Hienoa nähdä että assemlerkoodareitakin on hengissä ja hengailemassa tälläkin palstalla. Itellä viimenen soodaus assemblerilla joskus -90.
Aika hintsusti tulee nykyisin assya käytettyä. Joskus on ihan vähän "verestää" ;)
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Riikan kukkaronnyöri on umpisolmussa
Kulutus ei lähde liikkeelle, koska kansalaiset eivät usko, että: – työpaikka säilyy – tulot eivät romahda – talous ei h402899Jos vedetään mutkat suoraksi?
Niin kumpaan ryhmään kuulut? A) Niihin, jotka menevät edellä ja tekevät? Vai B) Niihin, jotka kulkevat perässä ja ar1062681Tanskan malli perustuu korkeaan ansioturvaan
Ja vahvoihin työllisyys- ja kotoutumispalveluihin. Suomessa Riikka on leikannut juuri näitä: palkkatukea, työttömyysturv352411Vain vasemmistolaiset ovat aitoja suomalaisia
Esimerkiksi persut ovat ulkomaalaisen pääomasijoittajan edunvalvojia, eivät auta köyhiä suomalaisia.501918- 311719
Anteeksipyyntöni
Jätän tähän anteeksipyyntöni sinulle, koska en voi sanoa sitä missään muuallakaan. Pyydän anteeksi, jos purkamani tuska141513- 321473
Sydämeni valtiaalle
En täältä aio asioita kysellä. Haluan tuoda tiedoksesi, että pohjimmiltani en ihmisiä tahdo satuttaa ja ajattelen muiden1021213- 1771183
En vain unohda
Sitä miten rakastuneesti olet minua katsonut. Oliko tunteet liian suuria että niistä olisi voinut puhua.711025