Mun pitäisi tehdä esimerkkiohjelma seuraavan ohjeen mukaan:
Laadi ARM-prosessorille assembly-kielinen ohjelma, joka lukee rekisterin r0 osoittamasta muistiosoitteesta alkaen kaksi 32-bittistä lukua ja järjestää ne se samoihin muistiosoitteisiin suuruusjärjestykseen siten, että ensimmäisessä muistiosoitteessa on suurempi luvuista. Lopuksi ohjelma asettaa rekisterin r0 arvoksi nollan, mikäli luvut olivat oikeassa järjestyksessä ja ykkösen mikäli lukujen paikkoja piti vaihtaa.
Ikinä en ole ohjelmoinut assenblyllä, joten pystyisikö joku ystävällinen sielu auttamaan tämän kanssa niin pääsisin alkuun?
Apua ohjelmaan...
5
1834
Vastaukset 5
- dgsdfg
Ehkä tästä on apua
; offsetit
LUKU1 = 0
LUKU2 = 4
; siirrä registeriin r1 luku1
r1 - Jaaaaaaaaaaarm
En kyllä mene takamaan toimivuutta, vaikka kääntyykin gnuarm:lla.
--- ESIMERKKI ALKAA ---
.data
.text
_start: .global _start
.global main
b main
#
# Luvut jotka järjestetään
#
luvut: .word 12, 14
#
# Pää ohjelma joka kiertää silmukkaa kutsuen järjestä alirutiinia
#
main:
ldr r0, =luvut
bl jarjesta
b main
#
# Järjestä alirutiini
#
jarjesta:
stmia sp, {r1, r2}
ldr r1, [r0]
ldr r2, [r0, #4]
cmp r1, r2
bhi oikea
str r1, [r0, #4]
str r2, [r0]
mov r0, #1
b loppu
oikea:
mov r0, #0
loppu:
ldmia sp, {r1, r2}
mov pc, lr
.end
--- ESIMERKKI LOPPUU ---- sdsfkishjsl
Pari bugi fixia ja vahan optimointia
jarjesta:
stmia sp!,{r1,r2,lr}
ldmia r0,{r1-r2}
cmp r1,r2
movls r0,#0
ldmlsia sp!,{r1,r2,pc}
str r1,[r0,#4]
str r2,[r0]
mov r0,#1
ldmia sp!,{r1,r2,pc)
Eli tuon sp:n jalkeen on oltava !. - Jaaaaaaaaaaarm
sdsfkishjsl kirjoitti:
Pari bugi fixia ja vahan optimointia
jarjesta:
stmia sp!,{r1,r2,lr}
ldmia r0,{r1-r2}
cmp r1,r2
movls r0,#0
ldmlsia sp!,{r1,r2,pc}
str r1,[r0,#4]
str r2,[r0]
mov r0,#1
ldmia sp!,{r1,r2,pc)
Eli tuon sp:n jalkeen on oltava !.En tosiaan ole ARM:ia varsinaisesta kokeillut kuin kerran harrastus mielestä, noin vuosi sitten.
- PerttiTT
ARMI käskykanta on vähän erilainen ja monipuolisempi kuin 'normaali' assembly.
käskyn malli yleensä:
KÄSKYehtoSetliput kohdeRek , 1lähdeRek, 2lähdeRek, käsky2lähdeRek:lle käskynparametri !tallennetaanko2lähdeRek
Esim.
LDR r6, [r4] ;lataa muistista ==( r6 = *r4;)
LDR r4, [r0 , r2 , LSL #2] ;== ( r4 = *(r0 (r2
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Pyhäjärvi syvällä kusessa
Pyhäjärvi ei tule selviämään millään tästä alhosta. Ollaan aivan liian syvällä. https://www.mtvuutiset.fi/artikkeli/pyha1421670- 1541134
Miksi naiset haluavat itseään vanhemman kumppanin? Vai haluavatko?
Tuolla toisessa ketjussa tuli esille tämä kysymys ja se on mielestäni hyvä kysymys. Kiitos scrg:lle tämän kysymyksen esi349992Miten voi sinun
tunteet yhtäkkiä kuolla kuin napista painamalla? Et enää vilkaisekaan minuun päin vaan jos vahingossa näet minut käännät70980- 69768
PYHÄJÄRVEN KAUPUNKI VALTIOVARAINMINESTERIÖN ARVIOINTIMENETTELYYN..TE
...siinä se nyt on, mitä tässä enää vikistään. Uutiset Yle, 14.8. Klo 20.30, ei tunnu mukavalta.56743- 69701
- 38654
Ernest Lawson rehellisenä vaikeasta TTK-tilanteesta: "Vain harvan ja valitun henkilön tiedossa"
Tanssii Tähtien Kanssa tulee syksyn iloksi ja tiedossa on suosikkisarjan 19. kausi. Tulevalla kaudella nähdään iso uudi8623Missä vaiheessa
Unohdit minut? Onko sinulla oikeasti mies jota rakastat? Tiedän että möhlin ja odotin liikaa. Ei tarvitse vastata jos et33591