2013-02-26 4 views
0

ACALL (인텔 8051 컨트롤러의 명령어 세트에서 호출 한) 서브 루틴의 주소를 계산하는 데 사용되는 메커니즘이 너무 복잡한 이유는 무엇입니까? 왜 그들은 명령의 주소를 직접 지정하지 않고 LCALL 명령에서와 같이 그 주소로 점프하지 않는 것이 좋습니다. 3 바이트 명령어 인ACALL의 주소 지정 체계

안부

답변

3

LCALL는 op 코드 및 절대 어드레스의 16 비트를 얻는다. ACALL은 2 바이트에 맞는 짧은 버전으로 존재합니다. 간단한 접근법은 주소에 8 비트를 사용하는 것이었지만 엔지니어는 opcode 자체에 인코딩 된 상위 3 비트와 함께 더 큰 범위에서 11 비트를 허용하기로 결정했습니다. 일반적으로 8051 프로그램의 작은 크기를 고려하더라도 8 비트는 아마도 너무 제한적이었을 것입니다.

pc = [top 5 bits of current program counter] [3 bits from the opcode] [8 bits from the operand]

길고도 짧은 이야기 :

는 틀림없이 인코딩 방식 (몇 가지가있다 마이크로 컨트롤러), 당신은 단지 3 개 부분에서 함께 주소를 넣어이 대단히 복잡하지 귀하의 경우 함수가 ACALL의 범위 내에 있으면 바이트를 절약 할 수 있습니다. 귀하의 어셈블러는 ACALLLCALL 사이에서 자동으로 선택할 수 있습니다.