やまものブログ

メモ書きブログです (^_^;A

AAE

AAE 認定書

AAE

先週の中頃、こんなものが送られてきました。 FAQ にあるとおり、メールで認定書を要求することができます。 そのメール送付の翌日に、メールにて 419x565 ピクセルの AAEロゴ の Jpegファイルが添付されてきました。なので、認定書はその Jpeg 画像の…

ARM アセンブラ If-Then コンパイルできず(涙)

AAE

Thumb-2 の If-Then 命令を試したくて下記のコードをコンパイルするも、オプションで Thum(-2)を指定するとエラーになります。 ファイル名:"it.s" .text .global _start _start: mov r0, #0 cmp r0, #0 itte eq mvneq r1, r1 mvneq r2, r2 mvnne r3, r3 mov…

ARM アセンブラ BLX/BX で Thumb コード混在

AAE

末尾が X のブランチ命令 BLX (Branch with Link and eXchange) BX (Branch and eXchange) では ARM <--> Thumb モードの切替ができます。 BLX/BX ともにレジスタあるいはラベルをオペランドに指定できますが、ARM Compiler toolchain Assembler Reference …

ARM アセンブラ APSR_nzcv

AAE

以前書いたブログで VMRS APSR_nzcv, FPSCR という命令を試したことがありましたが、このターゲットになっている APSR_nzcv が何者なのかが気になっていました。 クロスコンパイラのディレクトリを find と grep で徹底的に調べても定義らしき記述はヒットし…

ARM アセンブラ CPS (Change Processor State)

AAE

CPS の仕様はプログラマーズガイド(ARM DEN0013C)の記述だけでは今ひとつピンときませんでした。ウェブ検索して infocenter.arm.com でヒットしたコード(下記)を見てやっと理解できました。 .text .global _start _start: cpsie if @ enable IRQ and FIQ c…

AAE 試験直前の見直し

AAE

いよいよ試験予定日の週に突入してしまいました ということで、ARM認定エンジニア認定資格のサイトを改めて見直してみました。 とりあえず、AAE Learning Resources に掲載されている資料の内容も含めて、ARMv7 が対象であることは変わっていないようです。…

ARM コプロセッサ レジスタの読み出し mrc

AAE

MRC (Move to Register from Coprocessor) を使ってみました。 .text .global _start _start: mrc p10, 7, r0, c1, c0, 0 bl writeHEX32 vmrs r0, FPSCR bl writeHEX32 vcmp.f32 s0, s0 mrc p10, 7, r0, c1, c0, 0 bl writeHEX32 vmrs r0, FPSCR bl writeHEX…

ARM DEN0013C - Appendix B NEON and VFP Instruction Summary

AAE

Cortex-A Series Version: 3.0Programmer’s GuideARM DEN0013C (ID071612) の Appendix B NEON and VFP Instruction Summary を一覧表にまとめてみました。 Perlスクリプトで情報を抜き出したのですが、うまく抜き出せないところが多々あり、手で情報をコピ…

ARM DEN0013C - Appendix A Instruction Summary

AAE

ARM認定エンジニア認定資格 の試験を 1/30(木)に受験する予定で、ARMのアセンブラを弄って勉強しています。しかし、このまま思いつくままのやり方では試験要綱へのカバー範囲が偏るのが心配(汗) 。。。ということで、 Cortex-A Series Version: 3.0Programme…

ARMのNEONのSIMD命令をgccのオートベクタライズの最適化で使う方法 【再実行(浮動小数点演算)】

AAE

昨日に引き続き、京都マイクロコンピュータさんのブログ記事 ARMのNEONのSIMD命令をgccのオートベクタライズの最適化で使う方法 に掲載されていることを再実行してみました。 ここで使うクロスコンパイラは毎度お馴染みのこれ↓です。 $ arm-xilinx-linux-gnu…

ARMのNEONのSIMD命令をgccのオートベクタライズの最適化で使う方法 【再実行(整数演算のみ)】

AAE

京都マイクロコンピュータさんのブログ記事 ARMのNEONのSIMD命令をgccのオートベクタライズの最適化で使う方法 に掲載されていることを再実行してみました。 違うのはクロスコンパイラのバージョンだけ。 私のはいつものこれ↓です。 $ arm-xilinx-linux-gnue…

ARM 浮動小数点Floating-Point Status and Control register(FPSCR)

AAE

Cortex-A プログラマーズガイド (DEN0013C) の Example 7-1 にあったサンプルコード VCMP d0, d1 VMRS APSR_nzcv, FPSCR BNE label を試してみました。 下記が実際に動かしたコードです。 .text .global _start _start: VCMP.F64 d0, d1 VMRS APSR_nzcv, FPS…

ARM アセンブラ 16進数表示ルーチン

AAE

Hellow World! 出力はあらかじめ決まった文字列の表示でした。今回は一歩進んで、レジスタ r0 の内容を 16進数表示するサブルーチンを作りました。 レジスタ r0 に格納された情報を 4ビットずつシフトしながら文字列に変換して write システムコールで標準…

ARM アセンブラ Hellow World!

AAE

これまでは C言語にインラインでアセンブラを組み込んで動かしていました。 今回はアセンブラのみのコードで、”Hello, World!” を表示します。 コードは ‘Hello World!’ in ARM assembly をほぼそのままコピーさせてもらいました いちおう、swi を svc に置…

ARM アセンブラ C 関数コール

AAE

main() から関数 kakeruni() をコールする C ソースをコンパイルしてアセンブラを観察してみました。 まず、C ソースは下記の通りです。 このコンパイル結果のアセンブラです。 main() および kakeruni() ともに数字で分類したような処理内容になっているよ…

ARM アセンブラを C 言語から呼び出す ー 戻り値の利用

AAE

昨日の簡単な関数 kakeruni (掛ける2) を戻り値を使うように変更しました。 変更した箇所を赤で強調しています。 main.c #include <stdio.h> extern int kakeruni(int b); int main(int argc, char *argv[]){ int v; v = atoi(argv[1]); printf("%d\n", v); v = kake</stdio.h>…

ARM アセンブラを C 言語から呼び出す

AAE

アセンブラをC言語コードから呼び出す小さいサンプルを作ってみました。 main.c #include <stdio.h> extern void kakeruni(int *a, int b); int main(int argc, char *argv[]){ int v; v = atoi(argv[1]); printf("%d\n", v); kakeruni(&v, v); printf("%d\n", v); re</stdio.h>…

ARM アセンブラ 浮動小数点リンケージ

AAE

浮動小数点の扱い方として、ハードウェア浮動小数点コプロセッサがあるのと無いのとで違いがあるのは分かりやすいです。さらに、コプロセッサがある場合には、値の受け渡しに使うレジスタが「通常」か「浮動小数点」かの違いで「浮動小数点リンケージ」なる…

ARM アセンブラ 積算命令

AAE

もっとも基本的な積算命令は MUL ですが、これに加算や減算が合わせて実行される命令(MLA, MLS)とか演算結果が64-bit対応の命令(SMAL,SMULL, UMLAL, UMULL)があります。 Cで簡単な関数を書いてコンパイル結果に MLA, MLS, SMULL, UMULL が使われることを確認…

ARM アセンブラ 簡単命令でソート処理

AAE

アセンブラのプログラミング経験が皆無なので、とにかく簡単なプログラムを組んでみました。4つの整数についてソート、合計、平均、範囲を求めるプログラムです。 #include <stdio.h> int main(int argc, char *argv[]) { register int v0; register int v1; registe</stdio.h>…

ARM アセンブラ operand2

AAE

Cortex-A Series プログラマーズガイド (DEN0013C) を精読せずいい加減に読んでると、最後のオペランド (つまり operand2) はバリエーションがたくさんあって手強いという印象を持ちました。 たとえば、以下のようなオペランドが例として記載されていまし…

ARM アセンブラの定数

AAE

Cortex-A プログラマーズガイド(ARM DEN0013C)によると、アセンブラで扱える定数は 8-bit 定数を右に4-bit値(0-15)*2bit ローテートした値 だそうです。例えば、0xFF とか 0xFF000000 など。 それとは別に、MOVW/MOVT の2命令を使うと任意の32bit値も扱…

はじめの一歩 ~ インライン・アセンブラお試し

AAE

ARM認定エンジニア プログラム (AAE) にチャレンジすることにしました 今月30日の試験をすでに申し込んでいます 試験時間は80分で、結果は終了時にすぐ分かるとのことです。サンプルテストは4択でしたので、4択をひたすら解いて回答をPCに入力するもの…