問題タブ [relative-addressing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - open dirを使用したperlでの相対アドレス指定
ディレクトリ内のすべてのファイルをリストするための次のコードがあります。パスのアドレス指定に問題があります。私のディレクトリは* /tmp/ *です。基本的に、tmpディレクトリのディレクトリにあるファイルが必要ですが、許可されていません。 * を使用してください。
assembly - 2パスアセンブラは、アセンブラによって拡張された命令をどのように処理しますか?
次のMIPSアセンブリについて考えてみます(MIPSを使用しているのは、それが私のComputer Organisation and Designブックで使用されているためです)。
beq
MIPSは命令のPC相対アドレスに16ビットしか使用しないため、L1
から十分に離れているbeq
場合、アセンブラはそれを2つの命令(ジャンプのアドレスは26ビット)と新しいラベルに置き換える必要があります。
これでも不十分な場合は、複数回のジャンプが必要になる場合があります。
アセンブラは、の場所を知るまで、この置換を行う必要があるかどうかを知りませんL1
。最初は(1命令または2)のサイズがわからないのでbeq
、最初のパスでロケーションカウンターを最新の状態に保つにはどうすればよいですか?
android - Androidアプリケーションのネイティブ部分での相対アドレス指定
次のようなAndroidアプリケーションのネイティブ部分にオブジェクトを作成しています。
純粋なC++では、ソースのほかにhaarcascade_frontalface_alt2.xmlをhaarcascadesフォルダーに配置します。しかし今、私はそれをどこに置くべきか本当に混乱していますか?jni / haarcascadesディレクトリにありますか?またはどこか他の場所?
前もって感謝します。
assembly - ARM PC レジスタが次に実行される命令の次の命令を指すのはなぜですか?
ARM ICによると。
ARM 状態では、PC の値は現在の命令のアドレスに 8 バイトを加えたものです。
Thumb 状態:
- B、BL、CBNZ、および CBZ 命令の場合、PC の値は、現在の命令のアドレスに 4 バイトを加えたものです。
- ラベルを使用する他のすべての命令の場合、PC の値は、現在の命令のアドレスに 4 バイトを加えたものであり、結果のビット [1] が 0 にクリアされてワード境界に揃えられます。
簡単に言えば、PC レジスタの値は、次の命令の次の命令を指します。これは私が得られないものです。通常 (特に x86 では) プログラム カウンター レジスタは、次に実行する命令のアドレスを指すために使用されます。
では、その根拠となる根拠は何だろうか。条件付き実行、多分?
assembly - pc 相対 LDR などのロード用の ARM 命令から 16 進数へ
たとえば、PCレジスタを含むarm命令を16進数に変換しようとしています
「ARM アーキテクチャ リファレンス マニュアル」を確認したところ、LDR 命令の説明は次のとおりです。
質問が表示されました。1. cond 値、命令フォーマットを参照してください。LDR 命令の対応する cond 値は 0101(PLUS) ですか? 2、Rd は PC レジスタで、PC の記述方法は [15:12] の 4 ビットを使用します。
c - アセンブリの「ltorg」のように、C でリテラル プールをローカライズする方法はありますか?
実行時に別のメモリ ロケーションにコピーされる C 関数を実装しています。
内部で純粋な定数のみを使用して、内部で関数呼び出しを回避しました。アセンブリの出力を調べると、一定のアクセスが PC 相対アドレッシング命令に変換されています。ただし、相対アドレス (リテラル プール) は関数の外にあります。(ランダムな場所で生成されているように見えます)。
ARMアセンブリには、これらのリテラルプールをローカライズできるディレクティブがあることを知って.ltorg
います.Cに同じことを行うメソッドはありますか?
java - コンパイラで生成された相対アドレスと、それらが (できれば Java) バイトコードでどのように表現されるか?
コンパイル時にアドレスバインディングが不可能な場合、ロード/リンクまたは実行時に、相対 (またはおそらくそれらをリロケータブルアドレスと呼ぶことができます) アドレスを実際の物理アドレスに関連付けるために行われます。さらに、CPU は物理アドレスをバインドする前に、これらの相対アドレスを論理アドレスに変換します。
論理から物理への変換は、私にとって既知の概念です。しかし、私はそれらの相対アドレス指定について混乱しました(AFAIK、コンパイラーによってゼロに対して相対的に与えられた/割り当てられたので、彼らは相対と呼びました)。(バイトコードで)どの相対アドレスが使用されているのか、またはそれらが本当に必要なのか、それとも論理アドレスと同一であるかさえわかりませんか?
assembly - アセンブリに似た言語コンパイラでの PC 相対アドレッシング
私は現在、asm のようなカスタム プログラミング言語用のコンパイラを作成していますが、データ ラベルに対して適切な PC 相対アドレス指定を行う方法について、本当に混乱しています。
上記の疑似コードは、コンパイル後に次の 16 進数になります。
3180
、F020
およびF00C
はLDA
、IPT
およびHLT
命令です。
コードに見られるように、LDA
命令はラベルhello
を引数として使用します。これは、コンパイルされると、「インクリメントされた PC + 0x02」を意味する value になります (コードを見ると、呼び出し02
に関連する「Hello, world!」行の場所です。問題は:ではありません命令は、実行可能ファイルの最後に (0 で終わる) 文字列を追加する必要があることをコンパイラに伝えるだけなので、ラベル宣言の後に他の命令があった場合、そのオフセットは間違っています。LDA
.STR
hello
しかし、コンパイラが時間を移動できるようにする以外に、正しいオフセットを計算する方法が見つかりません。2回「コンパイル」する必要がありますか? 最初にデータ ラベル、次に実際の指示ですか?