x86-64

    0

    1答えて

    double(...)の関数をx64シェルコードとしてコンパイルしたいと思います。私はすでにa + b/aのような単純な数学演算のためのエンコードされたアセンブリを生成する作業プログラムを持っています。ここではaとbはdoubleです。 生成されたコードは実行可能なmmapバッファにロードされ、後で呼び出すことができます。 私は次のような問題があります。私は生成されたシェルコードの中に、expなど

    2

    2答えて

    私は現在、Cからアセンブリ関数を呼び出す経験をいくつか得ようとしています。したがって、すべての配列要素の合計を計算する小さなプログラムを作成しました。 Cコードは次のようになります。 #include <stdio.h> #include <stdint.h> extern int32_t arrsum(int32_t* arr,int32_t length); int main()

    2

    1答えて

    YMMからRAXレジスタに値をコピーしたいが、それを行う正しい指示が見つかりませんでした。 movq rax, xmm0:私にできることXMMため例えば mov rax, ymm0 :私のような何かをしたいです。私はこれに似たものが欲しい。

    6

    1答えて

    Linux(3.19)x86-64マシンでCR4レジスタのPAEビットがオンになっていることに気付きました。 PAE機能は64Gbまでの物理アドレスにアクセスすることを可能にしますが、ロングモードが有効な場合にはなぜそれが必要なのか分かりません。私はしばらくそれを見てきましたが、満足できる答えは見つかりませんでした。 提案がありますか?

    0

    1答えて

    私は、AMD64プロセッサのアセンブリコードを書く方法を学びました。私はgccによって生成されたコードを見てきました。最終的に、私は指示を見るようになった call *(%rax) オペランドの前に*何をしていますか?このような何かが、私が読んでいるSystem V ABIの文書に現れました。そして、上記の答えが私を引き続き助けてくれるでしょう。ここでは、システムV ABIドキュメント自体から

    3

    1答えて

    次のように命令を符号化することが可能である場合、私は思っていた:RAXを追加 <アドレスが> 64ビットを指し、完全な64ビットアドレスである[住所] 、値。 NASMは単純にアドレスを切り捨て、それを32ビットアドレスとしてエンコードしているようです。動作するように思われる64ビット(直接アドレスに)アドレッシングの唯一の形態である: のMOV RAX、[QWORDアドレス]を用いNASMによっ

    0

    1答えて

    %esxには%esiの値を左にシフトさせたいが、shlのソースは即値でなければならない。 私は%ecxの値でシフトする方法を理解できますか?私は周りを見回し、人々がCLレジスタの使用を推奨しているのを見ました。しかし、代替手段はありますか? ありがとうございます。

    5

    1答えて

    私はthis threadにフォローアップしようとしていますが、残念ながら私の問題はそれほど解決しません。 $ uname -a Linux <host> 4.8.0-1-amd64 #1 SMP Debian 4.8.7-1 (2016-11-13) x86_64 GNU/Linux 次のように私はyasmアセンブラを使用しています: ; File hello.asm sec

    5

    1答えて

    私はSystem V Application Binary Interfaceを読んでいます。私は理解できない部分があります。 まず、文書は ませ試みはC (10ページ)以外の言語用のABIを指定するためになされていないと述べています。 その後、20ページの、配列はメモリとして分類され、POINTER等: 集計(構造体や配列)の分類と労働組合の種類は次のよう に動作します: を... 分類は、呼び

    13

    2答えて

    私は少しアセンブリを学びたいと思っています。コンピューターアーキテクチャークラスのために必要です。 pushq %rbp movq %rsp, %rbp subq $16, %rsp I:私はプログラムを書く時はいつでも、私はそれらの3本のラインを使用することを認識などフィボナッチ数列を、印刷するように(私はそれが同等Cだとgccから生成されたアセンブリコードを比較するから学んだとして)私