Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ARM入門/arm introduction

ARM入門/arm introduction

2020/08/08 ARM入門勉強会の発表資料です。
https://connpass.com/event/180812/

Toshifumi NISHINAGA

August 08, 2020
Tweet

More Decks by Toshifumi NISHINAGA

Other Decks in Programming

Transcript

  1. ARM⼊⾨
    2020/08/08 ARM⼊⾨勉強会
    Toshifumi NISHINAGA
    @tnishinaga
    https://speakerdeck.com/tnishinaga/arm-introduction

    View full-size slide

  2. ⾃⼰紹介
    • 名前
    • ⻄永俊⽂
    • Arm関連でやってきたこと
    • Cortex-M7マイコンでNOMMU Linuxを動かす
    • SynQuacerをJTAGデバッグ
    • Raspberry Piを題材にセキュリティ・キャンプで講義
    • Link
    • https://github.com/tnishinaga
    • https://speakerdeck.com/tnishinaga
    • https://twitter.com/tnishinaga
    2

    View full-size slide

  3. 謝辞
    • 本勉強会を開いてくださったぬるぽへさん
    • レビュー協⼒いただいたインターネットの闇(@no_maddo)さ

    • これまでお世話になったみなさま
    3

    View full-size slide

  4. 発表の⽬的
    • Armアーキテクチャの名前や命令セットの名前を知ってもらい、
    今後の学習の役に⽴てていただく
    4

    View full-size slide

  5. Changelog
    • 2020/08/08
    • 初版公開
    • 2020/08/13
    • 誤り部分訂正
    • ⾮公開スライド公開
    • お役⽴ちリンク追加
    5

    View full-size slide

  6. Armとは
    • Arm社の作った
    RISCアーキテクチャ
    のプロセッサ
    7

    View full-size slide

  7. Arm社
    • 半導体IPを販売する会社
    • 本社はイギリス ケンブリッジ
    • 2016年7⽉18⽇にsoftbankに買
    われた
    • https://xtrend.nikkei.com/atcl/trn/column/15/106
    1226/072100008/
    • 次はNvidiaに買われそう(?)
    • https://asia.nikkei.com/Business/SoftBank2/Soft
    Bank-enters-talks-to-sell-Arm-to-Nvidia
    https://www.arm.com/ より引⽤
    8

    View full-size slide

  8. 主な⽤途
    組み込み機器 デスクトップ・サーバー
    画像は以下より引⽤
    https://www.96boards.org/product/developerbox/
    https://www.gigabyte.com/jp/Press/News/1634
    9

    View full-size slide

  9. x86系プロセッサに⽐べたArmの特徴
    • 省電⼒(※)
    • 低価格(※)
    • 低発熱(※)
    • 設計と製造企業が分かれている
    ※ 最近は⼀概にそうとは⾔えなくなってきている10

    View full-size slide

  10. Arm社とチップメーカー
    11
    チップメーカー
    (Broadcom等)
    製造
    SoC
    プロセッサコア
    (とペリフェラル)
    を設計
    コアとペリフェラ
    ルからSoC製造
    IP

    View full-size slide

  11. 例: Raspberry PiのBCM2835のSoC
    12

    View full-size slide

  12. 例: Raspberry PiのBCM2835のSoC
    • Arm設計
    • プロセッサコア
    • UARTペリフェラル
    • Broadcom設計
    • GPIO、VideoCore、割り込みコントローラー等
    • Synopsys(旧DesignWare)設計
    • USBコントローラー
    • 上記をまとめてBroadcomがSoCを製造
    13

    View full-size slide

  13. Armアーキテクチャ
    とアセンブリ
    14

    View full-size slide

  14. アーキテクチャとアセンブリ
    • Armアーキテクチャに関して少し詳しくご紹介
    • コンテンツ
    • アーキテクチャとプロセッサ
    • 実⾏モード
    • 各実⾏モードの呼ばれ⽅
    • Armのレジスタ
    • A32モードの場合
    • A64モードの場合
    • Armアセンブリ
    • A32アセンブリの特徴
    • A64アセンブリの特徴
    • Thumbアセンブリ
    15

    View full-size slide

  15. アーキテクチャとプロセッサ
    • Armはアーキテクチャ名とプロセッサ名がある
    • 例:
    ARMv8はアーキテクチャ名
    Cortex-A53はプロセッサ名
    16

    View full-size slide

  16. アーキテクチャ
    • プロセッサの基礎設計を決めるもの
    • MMU仕様や命令セット等
    • 名前はARMvX
    • Xには数字が⼊る。最新はARMv8
    • ターゲットの種類によって
    更にA, R, Mがつく
    • 例: ARMv8-A
    17
    Architecture
    (ARMv8-A)
    Cortex
    -A53
    Cortex
    -A73

    View full-size slide

  17. A, R, M
    18
    A
    SBC・サーバー向け
    R
    リアルタイムシステム向け
    M
    マイコン向け

    View full-size slide

  18. プロセッサ(ファミリ)
    • アーキテクチャ仕様を元に作られたもの
    • 現⾏はCortex-(A|R|M)[0-9]+
    • 基本数字が⼤きいほうが世代が新しくて
    性能が良い
    • big.LITTLEのため例外あり
    19
    Architecture
    (ARMv8-A)
    Cortex
    -A53
    Cortex
    -A73

    View full-size slide

  19. おまけ: big.LITTLE
    • Armの省電⼒化ソリューション
    • ⾼性能コア(big)と低性能コア(LITTLE)を1チップに搭載
    • 例:
    • Cortex-A15とCortex-A7
    • Cortex-A73とCortex-A53
    • 負荷に応じて使うコアを切り替えて電⼒消費を抑える
    20
    参考:
    http://pc.watch.impress.co.jp/docs/column/kaigai/493449.html

    View full-size slide

  20. Armアーキテクチャだいたいの歴史
    21
    ARMv3 ~ v4 ARMv5 ARMv6 ARMv7 ARMv8
    ARM7,
    ARM7TDMI
    ARM9,
    ARM10
    ARM11
    Architecture
    Processor Cortex-A,R,M
    iPhone: Andrew CC BY-SA
    DS: Kudo-kun CC BY-SA
    PS VIta: Tokyoship CC BY-SA
    参考: https://ja.wikipedia.org/wiki/ARMアーキテクチャ

    View full-size slide

  21. 実⾏モード
    • ARMv8から64bit実⾏モード(AArch64(A64))が増えた
    • 従来からの32bit実⾏モード(AArch32(A32))も存続
    22

    View full-size slide

  22. 各実⾏モードの呼ばれ⽅
    • 実⾏モードはOSや資料により呼ばれ⽅が異なる
    • 32bit実⾏モード
    • arm(oabi)
    • armel(eabi)
    • armhf(hard-float)
    • AArch32(A32)
    • 64bit実⾏モード
    • arm64
    • AArch64(A64)
    23

    View full-size slide

  23. 例:debianの場合
    https://www.debian.org/CD/http-ftp/#stable
    24

    View full-size slide

  24. Armアーキテクチャのレジスタ
    • Armアーキテクチャのレジスタをご紹介
    • A32とA64でレジスタが別物なので分けて解説
    25

    View full-size slide

  25. 主要なA32レジスタ
    • 汎⽤レジスタ(32bit) : R0 ‒ R12
    • 計算等に使う汎⽤レジスタ
    • スタックポインタ: SP(R13)
    • スタックの先端を⽰すレジスタ
    • リンクレジスタ: LR(R14)
    • 関数の戻りアドレスをいれるレジスタ
    • 分岐命令実⾏時に⾃動でセットされる
    • プログラムカウンタ: PC(R15)
    • 次に実⾏する命令のアドレスを⼊れるレジスタ
    26

    View full-size slide

  26. Tips: Armのスタックとスタックポインタ
    • Armのスタックは基本下位ア
    ドレス(0xffffffff)から上位アド
    レス(0x00000000)に延びる
    • 例: スタックにpushすると
    sp - x番地に値を⼊れ、
    spをsp - xに更新する
    stack
    sp -->
    0x00000000
    0xffffffff 27

    View full-size slide

  27. 主要なA64レジスタ
    • 汎⽤レジスタ: X0 ‒ X30, W0-W30
    • 計算等に使う汎⽤レジスタ
    • Xは64bit, Wは32bit幅アクセスができる
    • ゼロレジスタ: ZXR, WZR
    • 読むと0が得られるレジスタ
    • リンクレジスタ: LR(X30)
    • スタックポインタ: SP
    • A64ではシステムレジスタ扱い
    • プログラムカウンタ: PC
    • A64ではシステムレジスタ扱い
    28

    View full-size slide

  28. Armアセンブリ
    • 現在命令セットは⼤きく以下の3つがある
    • A32
    • A64
    • Thumb(T32, Thumb, Thumb-2)
    29

    View full-size slide

  29. A32(ARM)アセンブリ
    • ARMv7以前およびA32モードで使う
    • 32bit固定⻑命令セット
    • おもしろ機能
    • 条件付き命令実⾏
    • バレルシフタ
    30

    View full-size slide

  30. 条件付き命令実⾏
    • 任意の命令を条件付き実⾏できる
    • 例: 演算結果が0の場合にAND命令を実⾏したい場合
    • ANDEQ r0, r0, r1
    • 何もつけないとAL(無条件)で実⾏される
    • AND == ANDAL
    • ARMバイナリに0x0Eが⼀定間隔で並ぶのはこのため
    • https://tnishinaga.hatenablog.com/entry/2017/05/20/040819
    31

    View full-size slide

  31. バレルシフタ
    • 命令内で値をシフト(or ローテート)する機能
    • メリット
    • 命令数の削減ができる
    • でかい値を即値でロードできる
    • ただし、8bitをシフトして作れる値のみ
    • 例:
    • r0にr1の値を1bitシフトして⼊れる
    • mov r0, r1, lsl #1
    • r0に0x80000000を⼊れる
    • mov r0, #0x800000000
    33
    2020/08/13 追記: バレルシフタはA64命令セットでも利⽤可能でした

    View full-size slide

  32. A64アセンブリ
    • ARMv8以降のA64モードで使う32bit固定⻑命令セット
    • 特徴
    • 特徴がないのが特徴
    • 素直な命令と親切さにより⾮常に書きやすい
    36

    View full-size slide

  33. 親切になった部分の例
    • VBAR(割り込みベクタベースレジスタ)へのアクセス
    • A32
    • MCR p15, 0, , c12, c0, 0
    • A64
    • MSR VBAR_EL1,
    37

    View full-size slide

  34. 例: A32とA64コードの差
    • 階乗を求めるコードをビルドして⽐較
    38

    View full-size slide

  35. Thumbアセンブリ
    • Thumb
    • (ほぼ)16bit固定⻑命令
    • Cortex-M0, M0+で現役
    • 基本レジスタR0-R7しか指定できない
    • オペコードにレジスタ指定部が3bitしかないため
    • Thumb2(T32)
    • 16, 32bit混合
    • Cortex-M3以降で現役
    • (命令数が少ないが)⼤体A32命令と同じ使い勝⼿
    41

    View full-size slide

  36. まとめ
    • ArmはArm社の作ったRISCアーキテクチャプロセッサ
    • 主に組み込みで利⽤されてたが最近はサーバーにも進出
    • ARMvXはアーキテクチャ名、Cortexはプロセッサ名
    • 最近のArmは64bitモードが有る
    • A64命令は素直。どんどん使っていこう。
    44

    View full-size slide

  37. より知りたい⼈のための資料集
    • ARMv8-Aアーキテクチャマニュアル
    • Arm Architecture Reference Manual Armv8, for Armv8-A architecture profile
    • https://developer.arm.com/documentation/ddi0487/fc
    • アセンブリ
    • A32/A64命令セット
    • Arm® Instruction Set Reference Guide
    • https://static.docs.arm.com/100076/0100/arm_instruction_set_reference_guide_100076_0100_00_en.pdf
    • A32命令セット
    • ARMで学ぶ アセンブリ⾔語⼊⾨, 出村成和, C&R研究所
    • VisUAL(GUIのA32アセンブリエミュレータ)
    • https://salmanarif.bitbucket.io/visual/
    • A64命令セット
    • The A64 instruction set
    • https://static.docs.arm.com/100898/0100/the_a64_Instruction_set_100898_0100.pdf
    • Thumb命令セット
    • Thumb 16-bit Instruction Set Quick Reference Card
    • https://developer.arm.com/documentation/qrc0006/e/
    45

    View full-size slide