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
15
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.7k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
350
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.5k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
3
1.2k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
380
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
0
1.7k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
4
3k
俺の仮想マシンルーターがこんなに遅いはずはない/ KernelVM online 1
tnishinaga
0
2.7k
BareMetalで遊ぶ Raspberry Pi 4 - GIC v2編-/BareMetal Raspberry Pi 4 - GICv2 -
tnishinaga
6
4.9k
Other Decks in Programming
See All in Programming
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
270
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
930
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
5
1.2k
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
250
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
770
Haze - Real time background blurring
chrisbanes
1
510
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
250
useSyncExternalStoreを使いまくる
ssssota
6
1k
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
create_tableをしただけなのに〜囚われのuuid編〜
daisukeshinoku
0
240
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
240
快速入門可觀測性
blueswen
0
350
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Side Projects
sachag
452
42k
Code Review Best Practice
trishagee
65
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Fireside Chat
paigeccino
34
3.1k
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