2016-07-13 15 views
1

irgend ppc Demontage der Suche ich sehe:Wie funktioniert der PowerPC-Befehl? Extsb? das CR-Register beeinflussen?

e_lbz r7, 0(r13) 
extsb. r7,r7 
se_beq some_label 

The documentation for extsb. auf nicht klar ist, wie es das Zustandsregister auswirkt. Ich bin mir nicht sicher, für welche Werte von r7 wird dieser Zweig.

Mein Denken ist, dass, wenn der Wert in r7 eine 0 im höchstwertigen Bit hat dann die EXTSB. Der Befehl ändert den Wert in r7 nicht. Also für jeden Wert r7 >= 0 && r7 <= 127 sollte das gleiche Flag gesetzt werden und die se_beq sollte verzweigen.

+1

Welcher Teil ist unklar? Es wird verzweigen, wenn das Byte in 'r7' Null ist. – Jester

+0

Was ist, wenn 'r7' 1 ist? Warum würde es dann nicht verzweigen? Ich füge meiner Frage Beispiele hinzu, wie ich denke, dass bestimmte Werte funktionieren sollten. Wie werden die Bedingungsregister durch den Befehl gesetzt, so geben andere Befehle explizit an, wie die Bedingungsregister modifiziert werden. – Joe

+0

Das Flag ist für ** gleich ** gesetzt, es steht auf Ihrem Link. '1' ist offensichtlich nicht Null, also keine Verzweigung. – Jester

Antwort

0

So gibt es zwei Formen von "extsb" Anweisung, extsb und extsb..

Wenn Ihr Code extsb r7,r7 läuft, dann würde r7 bestehen aus der signierten 64-Bit-Zahl von gleichem Wert auf die unteren 8 Bits von r7, interpretierten als signierte 8-Bit-Zahl.

Zum Beispiel, wenn der Inhalt des Low-Bytes der r7 ist 0x00 (signed 8-Bit-Dezimalzahl 0), ist das Ergebnis von extsb r7,r70x0000 0000 0000 0000 wäre (signierte 64-Bit-Dezimalzahl 0).

Auf der anderen Seite, wenn der Low-Byte von r70xff ist (8-Bit dezimal unterzeichnet -1), wäre das Ergebnis 0xffff ffff ffff ffff seine (signierte 64-Bit Dezimalzahl -1).

Der Unterschied zu der zweiten Form ist extsw. r7,r7 dass sowie als r7 erstreckt, wird es auch einige Bits im Zustandsregister gesetzt:

Wenn die Syntax Form der Record (Rc) Bit setzt 1 ist, wirkt sich der Befehl die weniger als (LT) Null, Größer-als (GT) Null ist, gleich (EQ) Null und Zusammenfassung Überlauf (SO) Bits in Condition Register Feld 0.

Ihre Assembler-Dump ist ziemlich seltsam und im Gegensatz zu ppc asm, die ich schon einmal gesehen habe, aber es sieht aus wie es versucht, ein Zweig-wenn-gleich zu tun, also:

  • wenn die Low-Byte von r7 0 ist, wird es unterzeichnen 0 erweitern und es wird verzweigen
  • wenn die Low-Byte von r7 ist nicht Null, es wird den Inhalt erweitern und dann nicht verzweigen.