Ich bin mehr als auf halbem Weg durch das Lernen Assembly und ich bin vertraut mit dem Konzept, wie vorzeichenbehaftete und unsigned Ganzzahlen in Bits präsentiert werden, ich weiß, dass es eine seltsame Frage scheinen mag, von welcher die Antwort ziemlich offensichtlich wäre, aber Ich frage mich, ob eine arithmetische Operation wie Addition für ein Zahlenpaar sinnvoll ist, von denen einer als signiert und der andere als nicht signiert gilt. Ich habe an mehrere Beispiele gedacht, die ein korrektes Ergebnis liefern:würde arithmetische Operation auf ein Paar von vorzeichenbehafteten und vorzeichenlosen Zahlen legal sein?
10000001 (1-Byte-Ganzzahl ohne Vorzeichen und betrachtet, äquivalent zu 129)
+
11111111 (1-Byte-Ganzzahl und signiert betrachtet (zweier-Komplement-System), das entspricht -1)
10000000 (1-Byte-Ganzzahl und in unsigned Logik äquivalent zu 128)
Nun, wenn der obere Wert war in AL registrieren und wir hatten die folgenden Befehlscode (in GAS-Format):
addb -1, %al
dann wird das Übertragsflag (CF) des EFLAGS-Registers gesetzt, nachdem die Operation ausgeführt wurde und würde über einen Überlauf informieren, der tatsächlich nicht stattgefunden hat, und vielleicht weil es eine vorzeichenlose Zahl bezüglich eines Überlaufs des Überlaufflags (OF) von gibt EFLAGS-Register sollte referenziert werden. Ich bin also verwirrt, wenn es so ist, dass es so vernünftig ist.
Das ist nur wahr, wenn das Ergebnis die gleiche Größe wie alle Operanden hat. Prozessoren haben häufig Multiplikationsanweisungen, deren Ergebnisgröße das Doppelte der Operandengröße ist. Einige haben auch Additionsanweisungen, bei denen Operanden unterschiedlich groß sind (zB ADD.W D3, A5 auf dem 68000 oder 'ADD * +' auf dem TMS32050 werden einen 16-Bit-Wert vorzeichenerweitern und zu einer 32 hinzufügen -BIT-Register Das TMS hat auch ADDU * + ', um einem 32-Bit-Register einen vorzeichenlosen 16-Bit-Wert hinzuzufügen – supercat