2012-04-06 3 views
0

MARS 시뮬레이터 (어셈블리)에서 숙제하고 있습니다. 한 부분에서 붙어 있습니다. 레지스트리에 32 비트 단어를로드하는 것을 싫어합니다. 0에서 7까지의 비트는 파란색을 나타내며 비트 8-15는 녹색을 나타내고 비트 16-23은 빨간색을 나타냅니다. 나머지 비트는 0으로 설정됩니다. 예를 들어 황색은 0x00ffff00입니다.비트 산술 - 하나의 비트로 두 개의 결과를 연결합니다.

숙제는 나무 작업으로 나뉘어져 있으며 나는 마지막 것에 있습니다. 우리는 64 x 64 픽셀 디스플레이를 가지고 있습니다 (각 픽셀은 4 * 4이므로 총 너비와 높이는 256입니다). 붉은 색은 항상 0으로 설정되고 녹색은 4 * 선의 수와 파란색은 4 * 열의 수로 설정됩니다. 우리가 2 행 3 열에 있고, 녹색 값이 2 * 4이고 파란색 값 3 * 4라고 상상해보십시오. 따라서이 예제에서는 16 진수로 12가 0xc와 8 0x08이되고 레지스트리에로드해야하는 숫자는 0x00000c08이됩니다.

그래서 제 첫 번째 의심은 어떻게 2 대수의 결과를 연결하는 비트 대수학을 사용할 수 있습니까?
그리고 내 두 번째 의심이 있습니다. 우리가 64 * 4 및 64 * 4를 수행해야하는 마지막 픽셀이라고 가정 해보십시오. 결과는 256이므로이 숫자를 나타내는 데 8 비트 만 사용할 수 없으므로 픽셀 1에서 64까지는 사용하지 말고 0에서 63까지 사용해야합니다. 권리?

+0

사용 이진 변화 같은 또는 n은 2^곱 것이다 언어 같은 C에서

이동. 어떤 프로세서가? – BlackBear

+0

은 0-63이 아니라고 생각합니다. 1-64. 63 = 0x3F 63 * 4 = 0x3F << 2 = 8 비트 내에 들어 맞는 0xFC 문제 없음. –

+0

x64 프로세서가있는 Windows. 제공된 예에서 n은 무엇입니까? 미안하지만 이해가 안돼. – Favolas

답변

1

따라서 0x08과 0x0C가 있고 0x0C08을 원하십니까?

조회 비트가

(0x0C << 8) | 0x08 

(0x0C << 8) gives 0x0C00 
+1

'(0x0C << 8) |을 의미하지 않습니까? 0x08'? – harold

+0

예, 누군가가주의를 기울이고 있다는 것을 알게되어 기뻤습니다. –

+0

@TonyHopkinson 감사합니다. 귀하의 제안에 내 문제를 해결하기 위해 관리 :) – Favolas

관련 문제