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
1781
Vastaukset
- 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
Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa
En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod225164- 254348
- 272461
- 342244
- 371998
- 151918
En ole koskaan kokenut
Ennen mitään tällaista rakastumista. Tiedän että kaipaan sinua varmaan loppu elämän. Toivottavasti ei tarvitsisi vain ka191587- 121521
Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...
Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons211247Kerranki asiat oikein
Ilkka ja muut pienpuolueeet...teitte hyvän työn kun valitsitte pätevän henkilön virkaan eikä kepulle passelia!! Jatkakaa101174