2012-06-01 20 views
6

Rozumiem, że 1 bajt będzie zawierał cyfry od 0-255. A liczba 16-bitowa zawiera się w przedziale 0-65535.jak przekonwertować dwa bajty na jeden 16-bitowy numer?

Jeśli próbuję reprezentować 16-bitową liczbę przy użyciu dwóch oddzielnych rejestrów 8-bitowych ... jak to zrobić? Jak działa matematyka?

Dzięki!

+1

Jaka architektura i asembler? –

+1

Nie ma nic do konwersji. Po prostu zacznij traktować parę rejestrów jako parę reprezentującą 16-bitową liczbę. Sposób działania matematyki zależy od instrukcji dostępnych na platformie. – harold

+0

Brak wskazówki. Pracuję z programatorem systemów wbudowanych. Mówi, że jest ograniczony. Może wysłać mi jeden bajt szesnastkowy. A potem kolejny bajt szesnastkowy. I powinienem móc zmienić je w 16-bitową liczbę. Ale nie jestem pewien jak. –

Odpowiedz

10

Matematyka działa w następujący sposób:

sixteenBitNumber = 256*upperByte + lowerByte; 

z przesunięciami i bitowe operacje:

sixteenBitNumber = (upperByte<<8) | lowerByte; 

W większości procesorów, a nawet niektórych archaicznych te 8-bitowych, interpretacja ta jest realizowana sprzętowo: ładujesz bajty na części 16-bitowego rejestru lub na osobne 8-bitowe rejestry, które mogą pracować jako 16-bitowa para, a sprzęt pracuje z danymi tak, jakby był pojedynczym 16-bitowym numerem.

1

W ułamku dziesiętnym w jaki sposób mogę wziąć 7 i 9 i zrobić 79? (7 * 10) +9 lub 12 i 34 i zrobić 1234? (12 * 100) +34. Nie ma innych 0x12 i 0x34, a także 0x1234. (0x12 * 0x100) + 0x34. Znacznie czystsze do przesunięcia bitowego (0x12 < < 8) + 0x34. możesz lub jest również (0x12 < < 8) | 0x34.

0

Chcesz z nimi pracować razem? To proste

Załóżmy, że masz numer 2643 - w bazie 10. jeśli podzielisz go na połówki, będziesz miał coś w rodzaju 26 i 43, prawda? cóż, wiesz, że jeśli pomnożysz przez dwa, musisz pomnożyć od prawej do lewej i przenieść. Zrób to - pomnóż prawą stronę, a jeśli jest przepełnienie, dodaj to na lewą stronę, a następnie pomnóż lewą stronę.

Na przykład:

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

Zobacz, jak to działa? To samo dotyczy podziału - trzeba nosić? Kradnij z wyższego kawałka. Chcesz dodawać lub odejmować liczby? W końcu nie aż tak trudne!

Numery binarne działają w ten sam sposób.

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

Zasadniczo obliczyć dolny koniec, a następnie obliczyć górny koniec, a następnie zastosować przelew.