2017-12-09 4 views
-1

Ich arbeite an einer Frage, die das Ziel ist, eine Subroutine zu erstellen, die den Trap (PUTS) imitiert, und es wird eine Zeichenfolge an die Konsole schreiben, diese Zeichenfolgenadressierungen können in R0LC3 Subroutine - Benutzerdefinierte Trap-Routine

angenommen werden

das ist, was ich bisher, es für das erste Zeichen ‚s‘ nach funktioniert, dass es hält Looping Druck >>>>>> ive alles versucht, irgendwelche Vorschläge?

.orig x3000 
lea r0, string ; 


br putss 




putss 

    ldr r1, r0,#0 
    add r0, r1,#0 
    add r4, r0, #-4 
    brz theend 
    out 
    and r1,r1,#0 
add r0,r0,#1 ; keeps fetching next chara 


    br putss 





    theend 
    halt 









    string .STRINGZ "salazar" 

    .end 
+0

alle Vorschläge werden sehr geschätzt! – rahulchawla

Antwort

0

Ordnung

1.

br putss 

Subroutinen sind mit JSR genannt. Wenn Sie in das Unterprogramm verzweigen müssen, wie würde dann der Steuerungsablauf nach Beendigung des Unterprogramms zum Aufrufer des Unterprogramms zurückkehren? Ein weiterer Punkt ist, dass, wenn Sie TRAPs innerhalb Ihrer Subroutine aufrufen müssen, Sie R7 speichern und wiederherstellen müssen, da es beim Aufrufen eines TRAPs seine Rückkehradresse in R7 schreibt, die die Rückkehradresse überlisten würde der Anrufer. Vielleicht hast du deswegen BR benutzt?

2.

add r0, r1,#0 

Das ist schlecht. Dies überschreibt die Adresse der String-Daten, die zum Zeitpunkt des Aufrufs der Subroutine in R0 enthalten waren. Ich verstehe nicht, warum du das tust?

3.

and r1,r1,#0 

Dies scheint nicht notwendig, werden Sie den Wert in R1 überschreiben, wenn der LDR R1, ... passiert.

4.

add r4, r0, #-4 

scheint überflüssig? PUTs endet beim Lesen eines Zeichens mit dem Wert 0 (Nul-Terminator).

5.

theend 
halt 

Tun Sie dies nicht in einem Unterprogramm, das Unterprogramm, wenn dem Anrufer zurückzukehren einfach ret verwenden fertig sollten. Sie möchten nicht, dass das Programm beendet wird, wenn Sie die Subroutine einer anderen Person aufrufen.

+0

1. Wie würde der Code für die Rückkehr aussehen, wäre es nicht einfach RET-Zeile, nachdem der Trap ausgeführt wurde? 2. Ich tat das, weil die Falle OUT druckt ein Zeichen in r0 4. im für Zeilenende Überprüfung (im nicht erlaubt Puts zu verwenden, das ist die ganze Frage) @Brandon – rahulchawla

+0

1. Vorausgegangene Aussage „das Unterprogramm, wenn sie nur fertig sollten verwenden ret, um zum Aufrufer zurückzukehren. Sie möchten nicht, dass das Programm beendet wird, wenn Sie das Unterprogramm einer anderen Person aufgerufen haben. " 2. Ok. Aber du klarkst immer noch, was in R0 ist. Sie müssen den Wert von R0 vorher in ein anderes Register verschieben, da sonst die restlichen Zeichen nicht gedruckt werden können. Man könnte seine eigene OUT-Falle rollen lassen. 4. Wie oben erwähnt, endet PUTS, wenn es ein Nullterminatorzeichen erhält. – Brandon

Verwandte Themen