Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ARM入門/arm introduction
Search
Toshifumi NISHINAGA
August 08, 2020
Programming
14k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ARM入門/arm introduction
2020/08/08 ARM入門勉強会の発表資料です。
https://connpass.com/event/180812/
Toshifumi NISHINAGA
August 08, 2020
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.7k
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
1
1.8k
BareMetalで遊ぶRaspberry Pi 5 PCIe編/KernelVM Tokyo17
tnishinaga
2
3.9k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
840
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.8k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
4
9k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
760
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
1
2.4k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
5
4k
Other Decks in Programming
See All in Programming
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.5k
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
370
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
320
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
240
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
530
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
400
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
150
Security issues being discussed on Web Platforms
petamoriken
0
770
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
300
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Optimizing for Happiness
mojombo
378
71k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
The untapped power of vector embeddings
frankvandijk
2
1.9k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
A Soul's Torment
seathinner
7
3.6k
Believing is Seeing
oripsolob
1
220
Facilitating Awesome Meetings
lara
57
7.1k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
310
YesSQL, Process and Tooling at Scale
rocio
174
15k
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