나는 인텔에 대해이 가이드를 읽고있다 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
감사
당신이 "왜 우리가 그런 식으로합니까"무엇을 의미합니까 다음과 같이 8 비트 시프트 왼쪽
<<
는 비트 또는|
다음에? 문서는'M'은'H'와'L' 쌍을위한 규칙이고,'H'와'L' 레지스터는 (<<와'| '를 통해) 결합되어 16 비트 오프셋 . 너는 다시 무엇을 알고 싶니? – vladr필자가 의도 한 것은'<<'와'|'의 조합이 어떻게 16 비트 오프셋을 주는지? –
16 비트 값을 나타내려면 2 바이트가 필요합니다. (* 표시 리터 * 오우 바이트로 '(L)의 값을 결합하여'| 8 비트 남은 시프트 '(하위 바이트로하고, 0)는 제 (* 시간 *의 IGH) 바이트 h''의 값을 넣는다 및 '), 필요한 오프셋을 생성합니다. 리틀 엔디안 및 비트 연산을 살펴보십시오. – DCoder