やまものブログ

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

2014-01-01から1ヶ月間の記事一覧

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 システムコールで標準…

gdb コマンド

gdb コマンドの情報はいたるところにありますが、、、 たった今お世話になって、かつ、これからも使いそうなコマンドだけメモ書きします。 ●1行実行(関数内にステップインする) (gdb) s ●スタックフレームを表示する (gdb) bt ●変数の値を表示する (gdb) p …

Xilinx Zynq QEMU - gdb によるデバッグ

QEMU 上で動かしているアプリを gdb でデバッグする方法をメモ書きします。 まず、QEMU 起動コマンドにポート 1234 へのリダイレクトを追加します。これが無いと接続できませんでした。 -redir tcp:1234:10.0.2.15:1234 QEMU(ターゲット、サーバ、リモート)…

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>…

Xilinx Zynq - Linux ソースコード

Linux のソースコード中にある文字列(Mode_FIQ, I_BIT, F_BIT) が定義してあるかどうかを確認したく、すでに入手済みの 14.6-release.tar.xz の中をみてみるとバイナリしか無い ということで、Fetch Sources に説明されいてるとおり GIT でソースを手に入れ…

ARM アセンブラ operand2

AAE

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

Xilinx Zynq QEMU - ホストへのファイル転送(scp)

ホストマシンから QEMU へのファイル転送は FTP でいいかと思っていましたが、いざ、使ってみると意外と面倒 ファイルを何度も頻繁に転送したい場合、FTP接続はタイムアウトするので、ほぼ毎回 FTPの手順を最初からやりなおすことに もう少し楽な方法は?と…

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に入力するもの…

petalinux-boot は2月になったら試してみます

UG982 (v2013.10) によると、 $ petalinux-boot --qemu --image <path-to-Linux-image-file> で QEMU をブートできるとのことなので試してみました。 しかし、残念ながら、ライセンスが無いというエラーで起動できませんでした。 無償ライセンスのはずなので、しかるべき手順を踏めば</path-to-linux-image-file>…

Xilinx Zynq QEMU - PetaLinux でクロスコンパイラ入手!

Zynq QEMU にて下記の簡単な Cプログラムを実行してみました。 ---------- hello.c ---------- #include <stdio.h> int main(int argc, char *argv[]){ printf("Hello World!\n"); return 0; } ---------- hello.c ---------- QEMU で実行する Linuxイメージ上には gc</stdio.h>…

Xilinx Zynq QEMU - ホストとの FTP接続

http://www.wiki.xilinx.com/QEMU によると、QEMU 自体の機能としてホストにネットワーク接続する機能があるとのことです。 FTP の場合は QEMU起動コマンド(qemu-system-arm)に -redir tcp:10021:10.0.2.15:21 を追加すると、ホストの 10021番ポートをゲスト…

3DS LL 上側液晶パネル交換

昨年末、娘に 3DS LL を手渡すのにお互い手が滑って落下 上側液晶に見事な亀裂、中央部の大半が真っ黒に表示されるという事態に 本体は動作しているようなので、パネルさえ交換できれば復活できそう。 任天堂に修理を依頼すると送料込みなら一万円は軽く超…