タグ

関連タグで絞り込む (3)

タグの絞り込みを解除

asmに関するKazumi007のブックマーク (6)

  • ESP32のアセンブラを読み解く

    はじめに 前回の記事ではESP32を対象に、C/C++からインライン・アセンブラを使用する手順を説明しました。今回はもう少し踏み込んで、アセンブラの練習にお勧めの方法と、調べてもわかりづらい重要なポイントを説明していきます。 前提条件 XtensaコアのESP32シリーズ (ESP32/ESP32-S2/ESP32-S3) を使用していること。 ArduinoIDEまたはVSCode+PlatformIOでESP32用のプログラムを実行できること。 C/C++をある程度読書きできること。 ※ ESP32-C3などはXtensaコアではないため、記事の対象から外れます。 アセンブラコードのサンプルを手に入れる アセンブラを書くためには、どんな命令が用意されているかを把握しておく必要があります。それには 前回の記事 の冒頭で入手をお勧めした Instruction Set Architect

    ESP32のアセンブラを読み解く
  • What does __asm volatile ("pause" ::: "memory"); do?

  • stackにpushする試行錯誤

    いろいろ教えてもらったので修正中 昔、基情報処理試験の教科書や 「プログラムはなぜ動くのか」 で、「プログラムは、CPU がスタックとヒープに書き込み・読み込みながら動く」みたいなことを習った記憶があります。 先週末これが当なのか気になってCompiler Explorerという面白いサイトを教えてもらったこともありアセンブリの解読をしていたのですが、なぜかうまく stack が使われないケースばかり出会いました。 そこで stack に積ませるための試行錯誤します。 言語は Rust を選択し、アセンブリは Compiler Explorer で確認します。 スタックを使う スタックはなぜプログラムの実行に必要なのか これは関数呼び出しのときに、引数を呼び出し先から取り出せるようにするため、処理を呼び出し元に戻すために必要となります。スタックに積んでおけばスタックから取り出すだけで(

    stackにpushする試行錯誤
    Kazumi007
    Kazumi007 2022/05/19
    SystemV application binary interfaceの関数呼び出しの話をしているように見える
  • GCC x86 Inline Assembler

    ■内容 GCC x86 Inline Assembler コンパイル インライン・アセンブラーの書き方 構文 (参考)インテル系のアセンブラーの構文 レジスター 数値 例 グローバル変数 ローカル変数 拡張インライン・アセンブラー 構文 制約文字 拡張インラインアセンブラー レジスターの自動割当て レジスターの指定 関数呼出し アセンブラー関数 C 関数 参考 Top ■GCC x86 Inline Assembler GCC を使った、x86 (インテル)系のアセンブラーの書き方です。 GCC の使い方については、「Eclipse CDT」を参考にしてください。 ■コンパイル アセンブル・リストを出力するために、-S オプションをつけると、拡張子が ".s" のアセンブラー・ソース・ファイルを出力できます。ただし、このオプションをつけると、オブジェクトモジュール(拡張子 ".o") は作

    Kazumi007
    Kazumi007 2019/11/07
    インラインアセンブラの解説。制約がわかりやすい。
  • GCCのインラインアセンブラの構文について調査 - FPGA開発日記

    xv6には、以下のような記述がある。 github.com static inline void insl(int port, void *addr, int cnt) { asm volatile("cld; rep insl" : "=D" (addr), "=c" (cnt) : "d" (port), "0" (addr), "1" (cnt) : "memory", "cc"); } インラインアセンブラだが、構文がいまいち意味が分からない。どういう意味だろう? GCCのインラインアセンブラについて asm文を使うことで、インラインアセンブラを利用できる。さらに、volatileを付加することで、最適化による命令削除を抑止することができるのだが、それ以外の文法はどういう意味だ? 調査してみると、これは拡張アセンブリ構文というものであるらしい。以下のサイトが参考になった。 GCC

    GCCのインラインアセンブラの構文について調査 - FPGA開発日記
  • x86-64プロセッサでGNU assemblerを使う - Qiita

    Long / Pointerは64bitです。LP64として知られています。 なお、Microsoft x64 calling convention は Long Long / Pointerが64bitです。LLP64として知られています。 GAS suffixとはGNU assemblerのニーモニックの後ろに付く文字です。 mov命令を例にすると、 movbはオペランドが1byteであることを、 movqはオペランドが8byteであることを示します。 なお、GAS suffixは省略できます。具体的には movl %eax, %ebx と記載しなくても、単にmov %eax, %ebxでよいです。 general purpose register 16個のgeneral purpose registers(GPRs)が利用できます。サイズは64bit長です。 63 31 15 7 0

    x86-64プロセッサでGNU assemblerを使う - Qiita
  • 1