Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ARM入門/arm introduction
Search
Toshifumi NISHINAGA
August 08, 2020
Programming
14
12k
ARM入門/arm introduction
2020/08/08 ARM入門勉強会の発表資料です。
https://connpass.com/event/180812/
Toshifumi NISHINAGA
August 08, 2020
Tweet
Share
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
BareMetalで遊ぶRaspberry Pi 5 PCIe編/KernelVM Tokyo17
tnishinaga
0
1.8k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
380
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.5k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
3
1.3k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
410
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
0
1.7k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
4
3.1k
俺の仮想マシンルーターがこんなに遅いはずはない/ KernelVM online 1
tnishinaga
0
2.8k
BareMetalで遊ぶ Raspberry Pi 4 - GIC v2編-/BareMetal Raspberry Pi 4 - GICv2 -
tnishinaga
6
5k
Other Decks in Programming
See All in Programming
Simple組み合わせ村から大都会Railsにやってきた俺は / Coming to Rails from the Simple
moznion
3
4k
SpringBoot3.4の構造化ログ #kanjava
irof
2
860
Lookerは可視化だけじゃない。UIコンポーネントもあるんだ!
ymd65536
1
150
Compose でデザインと実装の差異を減らすための取り組み
oidy
1
280
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
370
AWSマネコンに複数のアカウントで入れるようになりました
yuhta28
2
160
Amazon Bedrock Multi Agentsを試してきた
tm2
1
270
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
280
PicoRubyと暮らす、シェアハウスハック
ryosk7
0
260
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
2
620
Writing documentation can be fun with plugin system
okuramasafumi
0
110
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
3.1k
Featured
See All Featured
A Tale of Four Properties
chriscoyier
158
23k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Fireside Chat
paigeccino
34
3.2k
Building an army of robots
kneath
302
45k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
Designing for humans not robots
tammielis
250
25k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
20
2.4k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Transcript
ARM⼊⾨ 2020/08/08 ARM⼊⾨勉強会 Toshifumi NISHINAGA @tnishinaga https://speakerdeck.com/tnishinaga/arm-introduction
⾃⼰紹介 • 名前 • ⻄永俊⽂ • Arm関連でやってきたこと • Cortex-M7マイコンでNOMMU Linuxを動かす
• SynQuacerをJTAGデバッグ • Raspberry Piを題材にセキュリティ・キャンプで講義 • Link • https://github.com/tnishinaga • https://speakerdeck.com/tnishinaga • https://twitter.com/tnishinaga 2
謝辞 • 本勉強会を開いてくださったぬるぽへさん • レビュー協⼒いただいたインターネットの闇(@no_maddo)さ ん • これまでお世話になったみなさま 3
発表の⽬的 • Armアーキテクチャの名前や命令セットの名前を知ってもらい、 今後の学習の役に⽴てていただく 4
Changelog • 2020/08/08 • 初版公開 • 2020/08/13 • 誤り部分訂正 •
⾮公開スライド公開 • お役⽴ちリンク追加 5
Armとは 6
Armとは • Arm社の作った RISCアーキテクチャ のプロセッサ 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
主な⽤途 組み込み機器 デスクトップ・サーバー 画像は以下より引⽤ https://www.96boards.org/product/developerbox/ https://www.gigabyte.com/jp/Press/News/1634 9
x86系プロセッサに⽐べたArmの特徴 • 省電⼒(※) • 低価格(※) • 低発熱(※) • 設計と製造企業が分かれている ※
最近は⼀概にそうとは⾔えなくなってきている10
Arm社とチップメーカー 11 チップメーカー (Broadcom等) 製造 SoC プロセッサコア (とペリフェラル) を設計 コアとペリフェラ
ルからSoC製造 IP
例: Raspberry PiのBCM2835のSoC 12
例: Raspberry PiのBCM2835のSoC • Arm設計 • プロセッサコア • UARTペリフェラル •
Broadcom設計 • GPIO、VideoCore、割り込みコントローラー等 • Synopsys(旧DesignWare)設計 • USBコントローラー • 上記をまとめてBroadcomがSoCを製造 13
Armアーキテクチャ とアセンブリ 14
アーキテクチャとアセンブリ • Armアーキテクチャに関して少し詳しくご紹介 • コンテンツ • アーキテクチャとプロセッサ • 実⾏モード •
各実⾏モードの呼ばれ⽅ • Armのレジスタ • A32モードの場合 • A64モードの場合 • Armアセンブリ • A32アセンブリの特徴 • A64アセンブリの特徴 • Thumbアセンブリ 15
アーキテクチャとプロセッサ • Armはアーキテクチャ名とプロセッサ名がある • 例: ARMv8はアーキテクチャ名 Cortex-A53はプロセッサ名 16
アーキテクチャ • プロセッサの基礎設計を決めるもの • MMU仕様や命令セット等 • 名前はARMvX • Xには数字が⼊る。最新はARMv8 •
ターゲットの種類によって 更にA, R, Mがつく • 例: ARMv8-A 17 Architecture (ARMv8-A) Cortex -A53 Cortex -A73
A, R, M 18 A SBC・サーバー向け R リアルタイムシステム向け M マイコン向け
プロセッサ(ファミリ) • アーキテクチャ仕様を元に作られたもの • 現⾏はCortex-(A|R|M)[0-9]+ • 基本数字が⼤きいほうが世代が新しくて 性能が良い • big.LITTLEのため例外あり
19 Architecture (ARMv8-A) Cortex -A53 Cortex -A73
おまけ: 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
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アーキテクチャ
実⾏モード • ARMv8から64bit実⾏モード(AArch64(A64))が増えた • 従来からの32bit実⾏モード(AArch32(A32))も存続 22
各実⾏モードの呼ばれ⽅ • 実⾏モードはOSや資料により呼ばれ⽅が異なる • 32bit実⾏モード • arm(oabi) • armel(eabi) •
armhf(hard-float) • AArch32(A32) • 64bit実⾏モード • arm64 • AArch64(A64) 23
例:debianの場合 https://www.debian.org/CD/http-ftp/#stable 24
Armアーキテクチャのレジスタ • Armアーキテクチャのレジスタをご紹介 • A32とA64でレジスタが別物なので分けて解説 25
主要なA32レジスタ • 汎⽤レジスタ(32bit) : R0 ‒ R12 • 計算等に使う汎⽤レジスタ •
スタックポインタ: SP(R13) • スタックの先端を⽰すレジスタ • リンクレジスタ: LR(R14) • 関数の戻りアドレスをいれるレジスタ • 分岐命令実⾏時に⾃動でセットされる • プログラムカウンタ: PC(R15) • 次に実⾏する命令のアドレスを⼊れるレジスタ 26
Tips: Armのスタックとスタックポインタ • Armのスタックは基本下位ア ドレス(0xffffffff)から上位アド レス(0x00000000)に延びる • 例: スタックにpushすると sp
- x番地に値を⼊れ、 spをsp - xに更新する stack sp --> 0x00000000 0xffffffff 27
主要なA64レジスタ • 汎⽤レジスタ: X0 ‒ X30, W0-W30 • 計算等に使う汎⽤レジスタ •
Xは64bit, Wは32bit幅アクセスができる • ゼロレジスタ: ZXR, WZR • 読むと0が得られるレジスタ • リンクレジスタ: LR(X30) • スタックポインタ: SP • A64ではシステムレジスタ扱い • プログラムカウンタ: PC • A64ではシステムレジスタ扱い 28
Armアセンブリ • 現在命令セットは⼤きく以下の3つがある • A32 • A64 • Thumb(T32, Thumb,
Thumb-2) 29
A32(ARM)アセンブリ • ARMv7以前およびA32モードで使う • 32bit固定⻑命令セット • おもしろ機能 • 条件付き命令実⾏ •
バレルシフタ 30
条件付き命令実⾏ • 任意の命令を条件付き実⾏できる • 例: 演算結果が0の場合にAND命令を実⾏したい場合 • ANDEQ r0, r0,
r1 • 何もつけないとAL(無条件)で実⾏される • AND == ANDAL • ARMバイナリに0x0Eが⼀定間隔で並ぶのはこのため • https://tnishinaga.hatenablog.com/entry/2017/05/20/040819 31
32
バレルシフタ • 命令内で値をシフト(or ローテート)する機能 • メリット • 命令数の削減ができる • でかい値を即値でロードできる
• ただし、8bitをシフトして作れる値のみ • 例: • r0にr1の値を1bitシフトして⼊れる • mov r0, r1, lsl #1 • r0に0x80000000を⼊れる • mov r0, #0x800000000 33 2020/08/13 追記: バレルシフタはA64命令セットでも利⽤可能でした
35
A64アセンブリ • ARMv8以降のA64モードで使う32bit固定⻑命令セット • 特徴 • 特徴がないのが特徴 • 素直な命令と親切さにより⾮常に書きやすい 36
親切になった部分の例 • VBAR(割り込みベクタベースレジスタ)へのアクセス • A32 • MCR p15, 0, <Rt>,
c12, c0, 0 • A64 • MSR VBAR_EL1, <Xt> 37
例: A32とA64コードの差 • 階乗を求めるコードをビルドして⽐較 38
39
40
Thumbアセンブリ • Thumb • (ほぼ)16bit固定⻑命令 • Cortex-M0, M0+で現役 • 基本レジスタR0-R7しか指定できない
• オペコードにレジスタ指定部が3bitしかないため • Thumb2(T32) • 16, 32bit混合 • Cortex-M3以降で現役 • (命令数が少ないが)⼤体A32命令と同じ使い勝⼿ 41
42
まとめ 43
まとめ • ArmはArm社の作ったRISCアーキテクチャプロセッサ • 主に組み込みで利⽤されてたが最近はサーバーにも進出 • ARMvXはアーキテクチャ名、Cortexはプロセッサ名 • 最近のArmは64bitモードが有る •
A64命令は素直。どんどん使っていこう。 44
より知りたい⼈のための資料集 • 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