0

为什么用于计算由ACALL(来自intel 8051控制器的指令集)调用的子程序地址的机制如此复杂。他们为什么不像我们在 LCALL 指令中那样直接输入指令的地址并跳转到该地址。

问候

4

1 回答 1

3

LCALL作为 3 字节指令,您将获得一个操作码和 16 位绝对地址。ACALL作为适合 2 个字节的较短版本存在。简单的方法是只使用 8 位作为地址,但工程师决定允许 11 位用于更大范围,前 3 位编码在操作码本身中。即使考虑到通常很小的 8051 程序,8 位也可能过于受限。

可以说编码方案并不是非常复杂(在微控制器中很少有),您只需将地址从 3 个部分放在一起:

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

长话短说:如果你的函数在 a 的范围内ACALL,你可以节省一个字节。您的汇编程序可能能够在ACALLLCALL自动之间进行选择。

于 2013-02-26T19:19:21.200 回答