Hallo,
wir sollen eine Funktion in ARM Assembler programmieren die einen
gegebenen string an die serielle schnittstelle ausgibt.
Eine put character Funktion haben wir gegeben und wir sollen eine put
String Funktion schreiben. Das Zeichen bzw. der String der ausgegeben
werden soll steht in r0 (nehm ich an). Der String terminiert mit '\0'.
Das hier ist die put String Funktion:
1 | puts:
|
2 | stmfd sp!,{lr} @ Retten der Register
|
3 | mov r4, r0 @ start-adresse von string (r0) in r4 laden
|
4 | loop1:
|
5 | ldrb r0, [r4] @ aktuelle adresse von string in r0 laden
|
6 | cmp r0, #0 @ ueberpruefen ob der string mit 0 terminiert
|
7 | beq fertig @ falls ja sind wir fertig
|
8 | bl putc @ ansonsten putc aufrufen und zeichen an serielle schnittstelle uebertragen
|
9 | # cmp r0, #0 @ ????
|
10 | # beq loop1
|
11 | add r4, #1 @ adresse des strings um eins erhoehen um nächstes zeichen zu bekommen
|
12 | b loop1 @ zum anfang der loop springen
|
13 | fertig
|
14 | ldmfd sp!,{pc} @ Rücksprung
|
Problem ist, dass ich beim kompilieren die Fehlermeldung "bad
instruction 'fertig'" bekomme. Also der bezieht sich dann auf diese
ldmfd sp!,{pc} @ Rücksprung
Zeile, aber ich weiß nicht was da falsch ist? Dieses ldmfd war auch
schon vorgegeben und ich hab davor halt nur ein Marker "fertig" gesetzt,
damit ich da hinspringen kann wenn der string endet.