「アセンブラ」の編集履歴(バックアップ)一覧はこちら

アセンブラ」(2006/06/11 (日) 09:06:52) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*アセンブラの基本動作 **アセンブラの動作 -コンパイラが生成したアセンブラソース、または開発者がコーディングしたアセンブラソースを読込み、オブジェクトファイルを生成する。 --アセンブラソース → 機械語とほぼ一対一で対応するソース **アセンブラの使いこなし -記述方法や文法はプロセッサ毎に異なる。 -コードを書くシチュエーションは限られので、書く能力は必要な時に学習すればよい。 -コードを読める必要がある。 --デバッガ/逆アセンブラの出力、コンパイルリスト等々の解読のため。 **基本的なフォーマット -アセンブラは行指向の言語 - --ラベル部(終端が”:”の場合が多い) --オペコード部(プロセッサの命令または疑似命令) --オペランド部(”,”で区切られ複数記述できる場合が多い) --コメント部(”#”,”;”,”*”,”@”等で開始される場合が多い) **プロセッサの命令 -転送命令(レジスタ⇔メモリ/レジスタ) -演算命令(加減乗除、論理演算、シフト等々) -分岐命令(ジャンプ、条件付きジャンプ、コール等々) -制御命令(割込み禁止/許可等々) |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 の最新版をゲット --現在ならば[[binutils-2.16.1.tar.bz2>http://ftp.gnu.org/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'.
*アセンブラの基本動作 **アセンブラの動作 -コンパイラが生成したアセンブラソース、または開発者がコーディングしたアセンブラソースを読込み、オブジェクトファイルを生成する。 --アセンブラソース → 機械語とほぼ一対一で対応するソース **アセンブラの使いこなし -記述方法や文法はプロセッサ毎に異なる。 -コードを書くシチュエーションは限られので、書く能力は必要な時に学習すればよい。 -コードを読める必要がある。 --デバッガ/逆アセンブラの出力、コンパイルリスト等々の解読のため。 **基本的なフォーマット -アセンブラは行指向の言語 --ラベル部(終端が”:”の場合が多い) --オペコード部(プロセッサの命令または疑似命令) --オペランド部(”,”で区切られ複数記述できる場合が多い) --コメント部(”#”,”;”,”*”,”@”等で開始される場合が多い) **プロセッサの命令 -転送命令(レジスタ⇔メモリ/レジスタ) -演算命令(加減乗除、論理演算、シフト等々) -分岐命令(ジャンプ、条件付きジャンプ、コール等々) -制御命令(割込み禁止/許可等々) |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 の最新版をゲット --現在ならば[[binutils-2.16.1.tar.bz2>http://ftp.gnu.org/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'.

表示オプション

横に並べて表示:
変化行の前後のみ表示:
記事メニュー
目安箱バナー