問題タブ [instruction-encoding]

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.

0 投票する
6 に答える
7455 参照

assembly - x86命令の長さを知る方法は?

アセンブリのさまざまな命令を見ていましたが、さまざまなオペランドとオペコードの長さがどのように決定されるかについて混乱しています。

それはあなたが経験から知っておくべきことですか、それともどのオペランド/演算子の組み合わせが何バイトを占めるかを知る方法がありますか?

例:

したがって、問題は次のとおりです。

与えられた命令を見て、そのオペコードが必要とするバイト数をどのように推測できますか?

0 投票する
2 に答える
1800 参照

x86 - x86は、16進マシンコードのみが与えられた場合の命令のオペランドサイズを調べますか?

たとえば、16進数の場合: 83 E4 F0

インテルの開発者向けマニュアルを見ると、それが83意味することandFO意味することがわかり-16ます。を見るとE4、送信元/宛先レジスタがSPまたはESPのいずれかであることがデコードできます。

and $-16, %ESPしたがって、16進数はまたはのいずれかを意味すると結論付けることができますand $-16, %SP。ただし、マニュアルでは、両方ともとしてリストされてい83 /4 ibます。

これら2つをどのように区別できますか?

0 投票する
2 に答える
3970 参照

assembly - リアルモードのオフセットとアドレス指定に基づいて x86 マシンのオペコード値を決定する方法は?

生のマシン コード バイトを 0 と 1 としてテキスト ファイルに書き込み、BIOS を介してそれを実行しようとしています。

ただし、アドレッシング、乗算、オフセット、アドレッシング、オペランド、および命令が組み合わせの配置でどのように機能するか、つまり と の違いを理解するのに問題がMOV AL, 07ありMOV BL, ALます。

つまり、アセンブリでは意味がありますが、マシン コードではパラメーターの概念を理解するのが非常に難しくなります。

だから私が知りたいのはこれです:どうすればこれをよりよく理解できますか?私が見つけたチュートリアルでは、組み合わせ相関の命令からの 0 と 1 を正確に説明/記述しているチュートリアルはありません。

このサイトhttp://ref.x86asm.net/coder32.html#x00で試してみましたが、これがわかりません。

例: 5 を AL に移動したいとします... AL/MOV 命令でチェーンされたバイナリ プレフィックスのオペコードの一部としてバイナリでリテラル '5' を指定しますか、それともそれぞれに 1 つの固定バイナリ コードを使用しますか?命令、値に関係なく?それが私が知りたいことです...機械語がどのように書かれているかを理解する方法。

0 投票する
1 に答える
942 参照

assembly - ASM スペースの最適化: EAX と EBX の比較

x86 アセンブリ コードのゴルフ パズルに取り組んでいます。NASM を使用してソース ファイルを組み立てています。

を使用して-O0、すべての最適化をオフにする必要があります。目標は、ELF バイナリのサイズを縮小することです。

パズルの「リファレンス実装」に取り組んでいるときに、奇妙な動作に出くわしました。これは縮小されたコード サンプルです。

バイナリは 264 バイトです。

eaxここで、read_stdinセクション内のすべての出現箇所を単にebx,ecxまたはに置き換えるとedx、バイナリが大きくなります:

オブジェクト ファイルのサイズを比較すると、その差はさらに大きくなります (480 バイトと 496 バイト)。eaxこれが起こるレジスターの何が特別なのですか?NASM は指定されていますが、何らかの最適化を行っ-O0ていますか?

0 投票する
1 に答える
1226 参照

assembly - x86 MOV命令に困惑

Intel64 & IA-32 マニュアル vol 2a から、命令には多くの可能な使用方法がありますmov。そのような:

テストするコードを書きました(ガス、インテル構文):

アセンブリ、リンク、および objdump の後、関連するアセンブリを取得しました。

明らかに、私が書いた 2 番目の指示は、マニュアルとして期待される指示ではありません。マニュアルのフォーマットの指示は何ですか?

0 投票する
1 に答える
2883 参照

assembly - pc 相対 LDR などのロード用の ARM 命令から 16 進数へ

たとえば、PCレジスタを含むarm命令を16進数に変換しようとしています

「ARM アーキテクチャ リファレンス マニュアル」を確認したところ、LDR 命令の説明は次のとおりです。 ここに画像の説明を入力

質問が表示されました。1. cond 値、命令フォーマットを参照してください。LDR 命令の対応する cond 値は 0101(PLUS) ですか? 2、Rd は PC レジスタで、PC の記述方法は [15:12] の 4 ビットを使用します。

0 投票する
3 に答える
5103 参照

assembly - x86-64 の jmpq が 32 ビット長のアドレスしか必要としないのはなぜですか?

objdump -Dバイナリを逆アセンブルするために使用するように、 の典型的なコードjmpqは のようなものe9 7f fe ff ffで、負のオフセットを表すために使用されます。ただし、x86-64 のアドレスは (私の知る限り) 64(48) ビットなので、この 32 ビット アドレスはどのよう7f fe ff ffにして 64 ビット絶対アドレスの負のオフセットを表すのでしょうか?

jmpさらに、やのような他の命令はありますjmpqが、64 ビットのアドレス置換がありますか? Intel または AMD のマニュアルで手順を見つけるにはどうすればよいですか (検索してjmpqも何も見つかりませんでした)。


調べてみると、RIP相対アドレッシングと呼ばれているようです。そして、すべての命令がこれを行うわけではないようです。64 ビット相対アドレッシングはありますか? 間接ジャンプなら64ビットの絶対アドレスはレジスタかメモリにあるでしょ?