2012-06-01 8 views
6

Ich verstehe, dass 1 Byte eine Zahl von 0-255 enthält. Und dass eine 16-Bit-Nummer zwischen 0-65535 liegt.wie zwei Bytes in eine 16-Bit-Zahl konvertieren?

Wenn ich versuche, eine 16-Bit-Nummer mit zwei separaten 8-Bit-Registern darzustellen ... wie mache ich das? Wie funktioniert die Mathematik?

Danke!

+1

Welche Architektur und Assembler? –

+1

Es gibt nichts zu konvertieren. Beginnen Sie einfach, das Registerpaar als ein Paar zu behandeln, das eine 16-Bit-Zahl darstellt. Wie die Mathematik funktioniert, hängt davon ab, welche Anweisungen Sie auf Ihrer Plattform zur Verfügung haben. – harold

+0

Keine Ahnung. Ich arbeite mit einem Embedded-System-Programmierer. Er sagt, er ist begrenzt. Er kann mir ein Hex-Byte schicken. Und dann noch ein Hexadezimalbyte. Und ich sollte in der Lage sein, diese in eine 16-Bit-Nummer zu verwandeln. Aber ich bin mir nicht sicher wie. –

Antwort

10

Die Mathematik funktioniert wie folgt:

sixteenBitNumber = 256*upperByte + lowerByte; 

mit Verschiebungen und bitweise Operationen:

sixteenBitNumber = (upperByte<<8) | lowerByte; 

In den meisten CPUs, sogar einige archaische 8-Bit diejenigen, diese Interpretation in Hardware durchgeführt wird: Sie laden Bytes in Teile eines 16-Bit-Registers oder in separate 8-Bit-Register, die als 16-Bit-Paar arbeiten können, und die Hardware arbeitet mit den Daten als wäre es eine einzelne 16-Bit-Zahl.

1

Im Dezimal wie nehme ich 7 und 9 und mache 79? (7 * 10) +9 Oder 12 und 34 und 1234 machen? (12 * 100) +34. Nicht anders 0x12 und 0x34 und make 0x1234. (0x12 * 0x100) + 0x34. Viel sauberer zu Bitverschiebung (0x12 < < 8) + 0x34. Sie können oder es ist auch (0x12 < < 8) | 0x34.

0

Sie möchten mit ihnen zusammen arbeiten? Es ist einfach

Nehmen wir an, Sie haben die Nummer 2643 - in der Basis 10. Wenn Sie es in zwei Hälften teilen, werden Sie etwas wie 26 und 43 haben, richtig? Nun, du weißt, wenn du mit zwei multiplizierst, musst du von rechts nach links multiplizieren und tragen. Also mach das - multipliziere die rechte Seite, und wenn es einen Überlauf gibt, füge das zur linken Seite hinzu und multipliziere dann die linke Seite.

Zum Beispiel:

(37 82) *2  ->  ((37*2) + overflow) + 64  ->  (74 + 1) 64  ->  75 64 

Sehen Sie, wie das funktioniert? Gleiches gilt für die Teilung - müssen Sie tragen? Stiehl vom höheren Bit. Möchten Sie Zahlen addieren oder subtrahieren? Nicht so schwer!

Binärzahlen funktionieren auf die gleiche Weise.

(01110110 10110011) * 10 = (0)  <-  1110110(1)  <-  01100110 

Grundsätzlich Sie das untere Ende berechnen, dann das obere Ende berechnen, dann gelten Sie den Überlauf.