Προς το περιεχόμενο

assembly_at91


nrkmaiden

Προτεινόμενες αναρτήσεις

Δημοσ.
Το ιδιο ειναι ειναι με το link του Dr.fuzzy.Ευχαριστω παντως.

 

σίγουρα?

επειδή είδα το λινκ και δεν έχει σχέση με αυτό που σου έδωσα

 

 

αυτό που σου έδωσα ανοίγει ένα pdf στα ελληνικά

  • 3 εβδομάδες αργότερα...
Δημοσ.

Για να μην ανοιξω καινουργιο θεμα υπαρχει καποιος που να γνωριζει τι κανει η παρακατω εντολη:

 

main:

 

STMDB R13!,{R0-R12,R14}

 

.....

 

adding:

 

...

 

CMP R0,R3

BLT adding

 

LDMIA R13!,{R0-R12,R14}

Επισκέπτης
Δημοσ.

Η CMP R0,R3 συγκρινει το περιεχομενο των καταχωρητων R0 και R3.To BLT adding σημαινει οτι αν το περιεχομενο του R0 ειναι μικροτερο απ το περιεχομενο του R3(LT=Lower Than)τοτε η επομενη εντολη που θα εκτελεστει θα ναι κατω απ την ετικετα adding.

Δημοσ.

Οι εντολες

STMDB R13!,{R0-R12,R14}

.

.

.

.

.

LDMIA R13!,{R0-R12,R14}

μπορει κανεις να μου εξηγησει τι κανουν(σχετικα αναλυτικα αν γινεται);;Τοσο καιρο τις χρησιμοποιω μηχανικα και το ενχειριδιο που μου εχουν δωσει στη σχολη ειναι αρκετα δυσνοητο.

 

 

Ευχαριστω προκαταβολικα.

Επισκέπτης
Δημοσ.

Θα προσπαθησω να σου εξηγησω.Πριν αρχισεις την εκτελεση του προγραμματος σου οι καταχωρητες R0-R12 και R14 μπορει να χρησιμοποιουνται απο το λειτουργικο συστημα για καποιες εργασιες του.Επειδη εσυ ομως με το προγραμμα σου θα αλλαξεις το περιεχομενο αυτων των καταχωρητων που μπορει να περιεχουν πολυτιμα δεδομενα πρεπει να αποθηκευσεις το περιεχομενο τους πριν να αρχισει η εκτελεση του προγραμματος.Αυτο κανει η πρωτη εντολη.Αφου τελειωσει η εκτελεση του προγραμματος πρεπει να φορτωσεις το περιεχομενο αυτων των καταχωρητων παλι και να παρει τον ελεγχο το λειτουργικο συστημα.Αυτο κανει η δευτερη εντολη.Αν δεις και στο εγχειριδιο η STM χρησιμοποιειται για να αποθηκευσει πολλους καταχωρητες(μπλοκ) στη μνημη και η LDM για να φορτωσει ενα μπλοκ.Τα DB και IA πιστευω εξηγουνται καλα στο εγχειριδιο.Κι εγω απο αυτο εμαθα.

Δημοσ.

Θα ήθελα να ρωτήσω και εγώ κάτι πάνω σε assembly.Θέλω να προσθέτω τα στοιχεία δύο πινάκων και να υπολογίζει το άθροισμα σε ένα τρίτο πίνακα.Ο κώδικάς μου είναι:

MOV R0,#0x8

LDR R1,=Pin1

LDRB R1,[R1]

LDR R2,=Pin2

LDRB R2,[R2]

Loop:

1)SUBS R0,R0,#1 @έξω από την επανάληψη, έχω αρχικοποιήσει τον R0 σε 8, γιατί θέλω να κάνω 8 επαναλήψεις

2)BMI End

3)LDR R4,[R1,#R0]

4)LDR R5,[R2,#R0]

5)ADD R3,R4,R5

6)LDR R6,=Res

7)STR R3,[R6]

8)End:

9)LDMIA R13!,{R0-R12,PC}

 

 

Το πρόβλημα είναι ότι ο compiler δεν αναγνωρίζει τις εντολές 3 και 4. Πώς θα αλλάζει κάθε φορά ο R0-δείκτης ώστε να πηγαίνει και να υπολογίζει το επόμενο άθροισμα?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...