ARM-Montage – Verwendung von geschweiften Klammern

Ich habe Anweisungen gefunden, wie diese, meine ARMv5 Montage:

pop     {r2} ; (str r2, [sp, #-4]!)
push    {r0} ; (str r0, [sp, #-4]!)
push    {r4, r5, r6, r7, r8, r9, sl, lr}

Ich verstehe, dass push und pop sind Abkürzungen für STR und LDR und dass diese Anweisungen speichern und laden um mehrere Register daher glaube ich, dass, dass die geschweiften Klammern in diesem Fall bedeutet eine “ – set für Registern gespeichert oder geladen“

Ist meine Annahme richtig?

  • Klingt wie es.
  • Gehen Sie nicht davon aus, Lesen Sie die Referenz-Handbücher.
  • Ein nicht verwenden, S. O., oder?
  • Richtig, nicht verwenden, ALSO entweder, für Sachen, die „nicht zeigen, Forschungs-Aufwand“, weil Sie downvoted.
  • Wie glauben Sie, dass ich kommen, um diese ‚Annahme‘ ohne Forschung?
  • Durch „Phantasie“ … sagte Sie. Die Forschung gewesen wäre, das Handbuch zu Lesen, die sagt „reglist ist eine Liste von ein oder mehrere Register geladen werden soll, in geschweifte Klammern eingeschlossen. Es können enthalten registrieren reicht. Es müssen durch Kommata getrennt werden, wenn es mehr enthält, als ein register oder register range.“
  • Danke. Ich lösche die Frage. Allerdings, wenn Sie genügend Forschung, jede Frage, die gelöst werden können, ohne zu Fragen hier, von daher ‚reductio ad absurdum‘ lassen Sie mich Fragen, ist S. O. nutzlos ist? . Eine weitere Möglichkeit, zu sehen, S. O., ist, dass es eine sehr sichtbare Quelle von Informationen für andere und dass Ihre Mangel an Forschung‘ kann nützlich sein, um andere in form von Q&A.
  • schieben Sie einen Satz von Registern wäre STMDB SP!,{…}(speichern mehrerer Dekrement sp), pop einen Satz von Registern wäre LDMIA SP!,{…} (laden mehrere Inkrement sp nach).
  • es ist möglich, dass El Marce ‚ s manual machen nicht deutlich, dass die push-und pop-übersetzen in STMDB SP!,{…} und LDMIA SP!,{…}.

InformationsquelleAutor El Marce | 2017-01-09



One Reply
  1. 2

    Nun ja, Lesen Sie einfach die Befehlssatz-Dokumentation. Der assembler konnte wählen, zu verwenden, str/ldr-oder die stm/ldm für diejenigen, die single register pushs und pops. In diesen Tagen, die Sie behalten möchten die Stapel ausgerichtet auf eine 64 bit-Grenze, also in der Regel eine gerade Anzahl von Registern oder geschoben wird geknallt, aber Sie können tun, ein zu einer Zeit, wenn Sie müssen. Für den Daumen push/pop sind Ihre eigenen Anweisungen nicht Codierungen laden oder zu speichern.

    00000000 <.text>:
       0:   e49d2004    pop {r2}        ; (ldr r2, [sp], #4)
       4:   e52d0004    push    {r0}        ; (str r0, [sp, #-4]!)
       8:   e92d40f0    push    {r4, r5, r6, r7, lr}
    
    00000000 <.text>:
       0:   bc04        pop {r2}
       2:   b401        push    {r0}
       4:   b5f0        push    {r4, r5, r6, r7, lr}
    

    In diesem Fall der ARM-Kodierungen angezeigt werden, laden/speichern nicht nur den disassembler Kommentar (x4xxxxxx) ldm/stm ist ein x8xxxxxx Codierung wie der Letzte.

    All dies ist natürlich in diesen ARM Dokumente, die Antworten auf diese und eventuell andere Fragen die Sie haben können. Sicher stackoverflow kann aber nutzlos, wenn jede Antwort herausgefunden. Aber in diesem Fall werden Sie bei der Prüfung einen Hinweis, dass zeigt die syntax, die gleiche Referenz haben, sollten einige weitere text zeigt, dass das register Liste ist ein Satz. Es gibt 15 oder 9 bits entsprechend codiert, und mit ein paar einfache Beispiele können Sie sehen, die Codierung entspricht der Liste, die Sie angeben, in die syntax.

    Ja die geschweiften Klammern bedeuten, schieben alle von Ihnen oder pop alle von Ihnen, wie der Fall sein kann. Die Dokumentation umfasst auch die decrement vor increment after-Einstellungen als auch, was Register sind in den Speicher gesetzt, in welcher Reihenfolge, ist

    push {r2,r3,r4}
    

    anders aus

    push {r4,r2,r3}
    

    beispielsweise

    Beachten Sie auch ursprünglich gab es keine push/pop Anweisungen, Sie kam zusammen mit dem real push/pop-thumb-Anweisungen, die nicht ldm/stm (weil Sie noch nicht genügend bits zu brennen r13 angegeben wird vier bit aus 16, in der der ldm/stm Sie haben, ist begrenzt auf r0-r7). Ebenso mussten Sie angeben, in allen drei Registern für die drei-register-Operationen, später dann den assembler(s) lassen Sie träge werden lassen, verwenden Sie Daumen syntax für arm-Anweisungen, und dann schließlich die einheitliche syntax, das macht die Sache nur komplizierter, nicht weniger.

    Allem daran, dass die assembly Sprachen sind im Allgemeinen nicht standardisiert. Sie sind nur definiert durch die spezifischen assembler-Sie sind mit dem Programm, das den text liest, jemand könnte leicht erlauben, diese

    push (r1,r2)
    pop [r3,r4]
    push r2,r3,r4,r5
    str r3,r2
    

    als juristische syntax in Ihre assembler. Schauen Sie sich nur die Unterschiede zwischen den arm-tools und die gnu-tools für die gleichen Befehlssätze. Noch mehr Spaß Blick auf die pdp-11 gnu assembler syntax im Vergleich zu den herkömmlichen pdp-11-syntax. (ja, es ist ein gepflegtes pdp-11-backend).

    Also deine Frage sollte etwas konkreter, was du assembler benutzt wurden, obwohl wir ziemlich viel wusste, was Sie waren, zu Fragen.

    • wenn ich die Frage gestellt habe, erwartete ich mir eine einfache „ja oder Nein“ zu beantworten. Aber Ihr ging hinaus und ich haben heute sehr viel gelernt, ich wusste nicht, über assembler-Sprachen, die nicht als standard. Vielen Dank.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.