2009-07-29 4 views
2

Ich suchte nach einer ARM-Baugruppe, und ich merke, dass EOR/XOR und AND alle das C- und O-Flag gesetzt haben. Wie funktioniert das? Sind sie immer geklärt? Unter welchen Bedingungen sind sie aufgestellt?ARM Carry-Flag an EOR/XOR und AND

Antwort

4

Wenn Sie sich entscheiden, mit ARM Assembler fortzufahren, benötigen Sie eine Kopie des ARM ARM, welches das ARM Architecture Reference Manual ist. Es gibt viele Versionen und jede hat ihre eigenen "Funktionen". Ich empfehle, so viele wie möglich zu sammeln, aber das ist eine andere Geschichte. Es gibt eine Reihe von Möglichkeiten, um eine elektronische Kopie kostenlos zu erhalten. In jedem Fall:

AND Sie brauchen das S-Bit gesetzt, das für ARM ANDS statt AND bedeutet. Für den Daumen-Modus verwenden Sie immer ANDS, aber Gas lehnt zum Beispiel ANDS im Daumenmodus ab (aber zerlegt es immer als Und).

If S==1 and Rd == R15 then 
    CPSR=SPSR 
else if S==1 
    N Flag = Rd[31] 
    Z Flag = if Rd == 0 then 1 else 0 
    C Flag = shifter_carry_out 
    V flag = unaffected 

EOR ist das gleiche wie und wann es zu den Fahnen kommt

+0

wow das sieht hässlich aus, den Ball hielt ich Format es richtig. Wie auch immer, Google Suche nach "Arm Arm" ohne die Anführungszeichen und der erste Treffer ist rev I des Arm Arm direkt von arm.com –

+0

Ich reparierte die Formatierung für Sie. Wählen Sie den Text und klicken Sie auf die binäre Schaltfläche. –

2

Erinnern Sie sich, dass Sie das Ergebnis nach der Operation beliebig verschieben können. Das Übertrags-Flag wird basierend auf dem Übertrag vom Barrel-Shifter gesetzt. Das Überlauf-Flag ist niemals betroffen.

4

Ich glaube nicht, dass die normalen AND/EOR die Carry und Overflow Flags überhaupt gesetzt haben. Die Varianten ANDS und EORS (AND/EOR mit set) können carry setzen, aber nur wenn die rechte Seite ein verschobener Operand ist. Keine davon beeinflusst das Überlauf-Flag überhaupt.

Zum Beispiel

ANDS R0,R1,R2, LSR #1 

wird gesetzt in Abhängigkeit von carry b0 von R2. Wenn das Bit 1 war (d. H. R2 war ungerade), wird Übertrag ausgeführt.

Siehe here für die blutigen Details (Kapitel 3, der Anweisungssatz).

3

Wie andere Plakate erwähnten, wird der C-Flag auf einer Verschiebung aktualisiert basiert, die wahlweise an einem von der Quelle angewandt wird registriert, bevor die Operation.

Das V (Überlauf) -Flag ist von diesen Anweisungen nicht betroffen. Das Z-Flag wird gesetzt, wenn das Ergebnis genau Null ist, und das N-Flag wird gesetzt, wenn das Ergebnis negativ ist, wenn es als eine Zweierkomplement-Ganzzahl betrachtet wird (d. H. Das höherwertige Bit ist eine Eins).