0

ACALL(インテル 8051 コントローラーの命令セットから)によって呼び出されるサブルーチンのアドレスを計算するために使用されるメカニズムが非常に複雑な理由。命令のアドレスを直接入力して、LCALL 命令のようにそのアドレスにジャンプしないのはなぜですか。

よろしく

4

1 に答える 1

3

LCALL3 バイトの命令であるため、オペコードと 16 ビットの絶対アドレスを取得します。ACALL2 バイトに収まる短いバージョンとして存在します。単純なアプローチは、アドレスに 8 ビットを使用することでしたが、エンジニアは、オペコード自体にエンコードされた上位 3 ビットを使用して、範囲を広げるために 11 ビットを許可することにしました。8051 プログラムの一般的なサイズが小さいことを考慮しても、8 ビットはおそらく制約が多すぎるでしょう。

間違いなく、エンコード方式はそれほど複雑ではありません (マイクロコントローラーではほとんど複雑ではありません)。アドレスを 3 つの部分からまとめる必要があります。

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

簡単に言うと、関数が の範囲内にあるACALL場合は、1 バイトを節約できます。アセンブラーは、ACALLLCALL自動的に選択できる場合があります。

于 2013-02-26T19:19:21.200 に答える