/ / Schemat adresowania ACALL - montaż, 8051

Adresowanie programu ACALL - montaż, 8051

Dlaczego mechanizm używany do obliczania adresu podprogramu wywoływanego przez ACALL (z zestawu instrukcji kontrolera Intel 8051) jest tak skomplikowany. Dlaczego nie umieszczają adresu instrukcji bezpośrednio i nie przeskakują na ten adres, tak jak w instrukcji LCALL.

pozdrowienia

Odpowiedzi:

3 dla odpowiedzi № 1

LCALL będąc instrukcją 3-bajtową otrzymujesz kod operacji i 16-bitowy adres bezwzględny. ACALL istnieje jako krótsza wersja, która pasuje do 2bajty. Prostym podejściem byłoby użycie 8 bitów do adresu, ale inżynierowie postanowili zezwolić na 11 bitów dla większego zakresu, z 3 górnymi bitami zakodowanymi w samym opkodzie. 8 bitów byłoby prawdopodobnie zbyt ograniczające, nawet biorąc pod uwagę typowo mały rozmiar 8051 programów.

Prawdopodobnie schemat kodowania nie jest zbyt skomplikowany (w mikrokontrolerach jest niewiele rzeczy), wystarczy umieścić adres razem z 3 części:

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

Krótko mówiąc: jeśli twoja funkcja jest w zasięgu ACALL, możesz oszczędzić bajt. Twój asembler może mieć możliwość wyboru pomiędzy ACALL i LCALL automatycznie.