タグ

ブックマーク / www.mztn.org (3)

  • Assembly Programming Linux (system call)

    付録 B. システムコールの仕組み すでに説明した(4. Linux カーネルとシステムコール) ように Linux の システムコールはレジスタに引数を設定して int 0x80 によるソフトウェア 割り込みで呼び出します. ここでは linux-2.2.16 のソースから実際にシステムコール呼び出しの 仕組みを次の3つの部分にわけて解説します. 割込みによるシステムコールをカーネルが初期化する部分 システムコールが呼び出された場合に実行される部分 システムコールの実装 【注】 ソースリスト中で行頭の数字は行番号を示しています. カーネルのバージョンによって差がありますが目安にはなるでしょう. 1. 割込みによるシステムコールをカーネルが初期化する部分 最初にカーネルの起動部分で割り込みテーブルの設定をしています. /usr/src/linux/init/main.c: 1350 asm

  • Assembly Programming on ARM Linux(03)

    3. 演算命令と分岐命令 ARM CPUの命令セットのうち、ARMステートに属する命令の概要をまとめてみました。 Linuxのユーザモードでよく使う基命令を重要な順に解説します。 ARMの命令(コプロセッサ用、Thumbステート用は除く) は全体で50種類ほどですが、 普通のプログラムでは30種類程度の命令で十分です。 最近のPentium系のCPUと比べて命令数は少ないのですが、 条件実行が可能なことや演算命令でフラグレジスタへの反映の有無を指定できることから、 それらの組み合わせでニーモニック(命令の表現)が多く感じます。 また各命令が操作の対象とするレジスタやメモリの指定方法「アドレッシング」が 命令ごとに少しずつ異なるため複雑に感じます。 ARMの命令の内部表現は、1ビットも無駄にしないように考えて作られているためのようです。 慣れるまでの我慢が大切です。 詳細は前に紹介した書籍

  • Assembly Programming on ARM Linux(02)

    2. ARMのレジスタ ARM CPUの命令セットを見ていく前に、ARMのレジスタを見ておきましょう。Linuxで プログラミングする場合に必要なユーザモードから見えるレジスタに限定します。 汎用レジスタ ARMプロセッサは r0 から r15 の16の32ビットレジスタを持っています。 そのうち r15 はプログラムカウンタで実行中のメモリアドレスを保持しています。 r14 はリンクレジスタで BL 命令(サブルーチンコール)で分岐した場合の戻りアドレス を保持します。リンクレジスタは1つの戻りアドレスしか保持できないため、 スタック (普通は r13 が示す領域) に保存する場合が多くなります。 その他の14のレジスタは汎用レジスタとして同じ機能を持っています。 レジスタ

  • 1