2012-11-24 2 views
1

나는 인텔에 대해이 가이드를 읽고있다 8080 에뮬레이션 Emulator 101 나는 내가 쓴 내용을 확인하기 위해 코드를 읽고있을 때, 나는 8080 인텔이라는 책에서이인텔 8080 : 메모리 오프셋 계산

case 0x36:  //MVI M,byte 
{     
//AC set if lower nibble of h was zero prior to dec 
uint16_t offset = (state->h<<8) | state->l; 
state->memory[offset] = opcode[1]; 
state->pc++; 
} 
break; 

우연히 발견/8085 어셈블리 언어 프로그래밍, I는 H 및 L 레지스터 상징적 기준이다 MVI 대한 데이터가 H 및 L. M 의해 어드레싱 메모리 위치에 두번째 바이트에 저장이

이 명령은 복사 읽기 쌍.

그래서 오프셋은 H와 L로 주소가 지정된 메모리 위치라고 추측합니다.하지만 왜 그렇게할까요? 즉 < <와의 조합이 얼마나 (state->h<<8) | state->l

감사

+2

당신이 "왜 우리가 그런 식으로합니까"무엇을 의미합니까 다음과 같이 8 비트 시프트 왼쪽 <<는 비트 또는 | 다음에? 문서는'M'은'H'와'L' 쌍을위한 규칙이고,'H'와'L' 레지스터는 (<<와'| '를 통해) 결합되어 16 비트 오프셋 . 너는 다시 무엇을 알고 싶니? – vladr

+0

필자가 의도 한 것은'<<'와'|'의 조합이 어떻게 16 비트 오프셋을 주는지? –

+1

16 비트 값을 나타내려면 2 바이트가 필요합니다. (* 표시 리터 * 오우 바이트로 '(L)의 값을 결합하여'| 8 비트 남은 시프트 '(하위 바이트로하고, 0)는 제 (* 시간 *의 IGH) 바이트 h''의 값을 넣는다 및 '), 필요한 오프셋을 생성합니다. 리틀 엔디안 및 비트 연산을 살펴보십시오. – DCoder

답변

3

입니다 | 우리에게 16 비트 오프셋을 주겠습니까? H 7는 최상위 비트 및 H 0는 최하위 비트이다

H을 가지고, 8 비트 레지스터 :

H7H6H5H4H3H2H1H0

L 걸릴 8 비트 최상위 비트는 어디에 L 7이다 등록 L 0은 최하위 비트이다

L7L6L5L4L3L2L1L0

,451,515,이제 16 비트를 구성 할

는 오프셋이가함으로써 달성 될 수있는 C/C++/Java에서는 H (H ighest 8 비트)를 조합 한 결과와 L (L owest 8 비트).

 
H  = H7H6H5H4H3H2H1H0 
H<<8 = H7H6H5H4H3H2H1H000000000 
H<<8|L = H7H6H5H4H3H2H1H0L7L6L5L4L3L2L1L0 
+0

대단히 감사합니다 vladr. –

관련 문제