assembleria..

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...? :/
8624
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

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.

Äänestä

  • 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=17461

    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.

    Äänestä

  • 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

    Äänestä

  • 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=17461

    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.

    Äänestä

  • 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.

    Äänestä

  • 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.

    Äänestä

  • 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ää" ;)

    Äänestä

Kommentoi aloitusta


avuton kirjoitti:

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...? :/

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu