babo @Wiki

アセンブラ

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

アセンブラの基本動作

アセンブラの動作

  • コンパイラが生成したアセンブラソース、または開発者がコーディングしたアセンブラソースを読込み、オブジェクトファイルを生成する。
    • アセンブラソース → 機械語とほぼ一対一で対応するソース

アセンブラの使いこなし

  • 記述方法や文法はプロセッサ毎に異なる。
  • コードを書くシチュエーションは限られので、書く能力は必要な時に学習すればよい。
  • コードを読める必要がある。
    • デバッガ/逆アセンブラの出力、コンパイルリスト等々の解読のため。

基本的なフォーマット

  • アセンブラは行指向の言語
    • ラベル部(終端が”:”の場合が多い)
    • オペコード部(プロセッサの命令または疑似命令)
    • オペランド部(”,”で区切られ複数記述できる場合が多い)
    • コメント部(”#”,”;”,”*”,”@”等で開始される場合が多い)

プロセッサの命令

  • 転送命令(レジスタ⇔メモリ/レジスタ)
  • 演算命令(加減乗除、論理演算、シフト等々)
  • 分岐命令(ジャンプ、条件付きジャンプ、コール等々)
  • 制御命令(割込み禁止/許可等々)
mov レジスタ間のコピー
stmfd 複数のレジスタ値のストア
sub レジスタ間の減算
str レジスタ値のストア
ldr レジスタ値のロード
bl サブルーチン呼び出し
ldmfd 複数のレジスタ値のロード

疑似命令

  • アセンブラには直接プロセッサーが理解しない命令(オペコード)がある。これはアセンブラに対する指示で、オブジェクトコードの生成方法を指示、定数値を指定、シンボルの属性を指定等々の処理を行う。
  • セクション制御
    • text,data,bss等のセクション制御命令
  • 各種の宣言
    • 外部シンボルの定義やシンボルの公開
  • デバッグ情報、その他
    • 主にコンパイラが生成する行番号情報など
    • アセンブル制御、マクロ機能、データ定義

セクション

  • プログラム中で使われるデータや命令はセクションと呼ばれるグループに配置される。.section, .text等の疑似命令で指示。
    • これは命令語とデータでMPUがアクセスする時の属性が異なり、メモリに付加する情報(実行許可等)を制御する必要があるため。(組込み系ではROM/RAMの指定等に用いる)
  • 代表的なセクション
テキストセクション(.text) 命令を配置(読込み、実行)
RODATAセクション(.rodata) 定数値を配置(読込み)
データセクション(.data) 初期化データを持つデータを配置(読込み、書き込み)
BSSセクション(.bss) ゼロで初期化されるデータを配置(読込み、書き込み)
スタックセクション(.stack) スタック空間を配置(読込み、書き込み、実行)

オブジェクトフォーマット

  • 代表的なオブジェクトフォーマット|
ELF 主にLinux等で用いられる
COFF 主にSVR4等のUnixで用いられる
ECOFF,XCOFF 上記のCOFFの拡張
PE MS-Windowsで用いられる
OMF インテル社が規定したオブジェクトフォーマット

アセンブラのビルド/インストール

GNU binutils を使ってクロスアセンブラをビルドする。

  • GNU binutils の最新版をゲット
  • 作業ディレクトリに展開
以下のコマンドを入力。
 $ tar jxvf binutils-2.16.1.tar.bz2
 $ cd binutils-2.16.1/
    • binutiils-2.16.1.tar.bz2はダウンロードしたファイル。
展開するとカレントディレクトリにbinutils-2.16.1が作られる。
  • configureの実行
以下のコマンドを実行する。
 $ ./configure --prefix=/opt/xtool-arm-elf --target=arm-elf
    • prefixオプションは、ビルドされたパッケージのインストール先ディレクトリを指示する。
    • targetはビルドするターゲットアーキテクチャを指示する。今回は、arm用のクロスアセンブラを作ってみるので、arm-elfを指定する。
  • ビルド
以下のコマンドを実行する。
 $ make all
  • インストール
以下のコマンドを実行する。
 $ make install
  • パスの追加
以下のコマンドを実行する。
 $export PATH=/opt/xtool-arm-elf/bin:$PATH
    • ログインしたら自動的にPATHを設定したい場合は、.bashrcに上記のexportコマンドを追加する。
    • cygwin環境以外でも利用したい場合は、マイコンピュータのプロパティから環境変数でセットする
  • 動作確認
以下のコマンドを実行する。
 $ arm-elf-as --version
以下の内容が表示される。
 GNU assembler 2.16.1
 Copyright 2005 Free Software Foundation, Inc.
 This program is free software; you may redistribute it under the terms of
 the GNU General Public License. This program has absolutely no warranty.
 This assembler was configured for a target of 'arm-elf'.

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
目安箱バナー