□ARM
御本家Arm社のArmデベロッパープログラムのURLが以下に
https://developer.arm.com/
◎ARMプロセッサ小史
│ 1983年-1985年 英国ケンブリッジのAcorn Computers社で最初期モデルが開発される
│ ⇒バークレー RISC-Iの影響を受ける
│ ⇒Acorn RISCマシン
│ ⇒Acorn Computers社は、BBCマイクロ(小型のパソコン)を製造していた(英国で普及)
│ 1990年 Advanced RISC Machines設立 アーキテクチャ概要
◎32bit ARMのアーキテクチャ概要
◆レジスタセット
│ 32ビットレジスタ16本
│ r15はプログラムカウンタ(PC)
│ 演算に使えるのはr0-r14の15本だが、r13、r14は特殊。
│ r14=リンクレジスタ、割り込み時のPCセーブに利用
│ r13=スタックポインタ
│ ※ユーザモード以外のシステムモード時に見えるレジスタがある
│ fiqモード、r8からr14
│ svcモード、r13からr14
│ abtモード、r13からr14
│ irqモード、r13からr14
│ undモード、r13からr14
│ CPSR(ステータスレジスタ)
│ Bit 31 N
│ Bit 30 Z
│ Bit 29 C
│ Bit 28 V
│ Bit 7-6 I F
│ Bit 5 T
│ Bit 4-0 mode
│ ※ユーザモード以外のシステムモード時にはモード毎のSPSRが見える
│ ⇒CSPRを各モードのSPSRに退避
◆メモリ
_◇エンディアン
│ 標準はリトル・エンディアン
│ ビッグエンティアンに設定することも可能
_◇ワード(32ビット境界)
│ ARM命令は32ビット境界にアライメント
│ THUMB命令は16ビット境界にアライメント
_◇メモリマップドIO
◆命令セット
_◇ARM(32ビット幅命令)
│ 以下の3オペランド形式が基本
│ ニーモニック デスティネーション, ソース1, ソース2
│ ソース2に即値を置くことができる(アセンブラ的には#をつける)
│ ソース2の値をALU演算前にシフト処理することができる
│ 実行条件(条件フラグを見て実行するか否か判断)可能
│ メモリアクセスはロード・ストア・アーキテクチャ
│ プリ/ポスト・自動インデックス・アドレシングも使用できる
│ 複数レジスタを1命令でメモリ転送できる
※Arm「らしい」命令に関する練習記事
│ ぐだぐだ低レベルプログラミング(8) Armらしい命令?
_◇ARMコプロセッサ命令
│ プロセッサ機能を拡張するためにコプロセッサ命令セットが存在する
│ コプロセッサ・データ操作命令
│ コプロセッサ・データ転送命令
│ コプロセッサ・レジスタ転送命令
_◇Thumb(16ビット幅命令)
│ Arm命令のコードサイズを圧縮するために追加された命令セット
│ Thumb命令はARM命令のサブセットであり、制限がある
│ ※Arm->Thumbへの遷移はトビ先アドレスを奇数にすることで起こす(実命令は偶数アライメント)
│ r0-r7の下位8本のレジスタアクセスには制限がない
│ r8-r12の上位5本のアクセスは制限がある
│ r13(SP)、r14(LR)、r15(PC)のアクセスには制限がない
│ CSPRのアクセスは制限がある
_◇Thumb2(16ビット幅/32ビット幅混在命令)
│ Thumbでは、Arm命令に頼らざるを得ない部分が存在
│ Thumb2では、Thumb命令を拡張しArm命令へのモード遷移無に同等のことが行えるようになった
│ Thumb部分とは上位互換性を保つ
※Arm命令、Thumb、Thumb2命令の切り替えに関する練習記事
│ ぐだぐだ低レベルプログラミング(4) ARM, THUMB切り替え
◎64bit ARMのアーキテクチャ概要
◆レジスタセット
◆命令セット
◎v1
│ Acorn Computer時代の初期のプロセッサ
│ 商用利用されたが、数量はごく僅か
│ 26ビットアドレス
◎v2
│ Acorn Computer時代の量産プロセッサ
│ 広く商用利用される
│ 26ビットアドレス
◎Armv3
│ ARM Limited独立(1990年)後の最初のARMプロセッサ
│ 32ビットアドレス
│ ARM6
◎Armv4
│ それ以前のv1~v3にあった結構フェイタルな問題点を修正
│ ここからが本格的なArm
│ Thumb命令セットの追加
◆ARM7TDMI
│ 欧州携帯電話(GSM)のベースバンドで採用され、モバイル業界におけるARMのデファクトを作った機種
◎Armv5
◆ARM926
◎Armv6
◆ARM1176JZF-S
│ BCM2835登載コア(Raspberry Pi(初代))
※以下記事で初代ラズパイ model B+のBCM2835についても調べてます
│ ぐだぐだ低レベルプログラミング(3) Arm、32ビット?64ビット?
◆Cortex-M
_◇Cortex-M0
│ 最小構成のCortex
│ 180nm ULLプロセスで12000G, 85uW/MHz
│ ARMv6-M, 0.9DMIPS/MHz
_◇Cortex-M0+
│ Cortex-M0相当のソフトコア化版。
│ 2段パイプライン
◎Armv7
◆Cortex-M
_◇Cortex-M3
│ 33000-60000G
_◇Cortex-M4F
◆Cortex-R
◆Cortex-A
◎Armv8
◆AArch32(A32)とAArch64(A64)
◆Cortex-M
_◇Cortex-M33
◆Cortex-A
_◇Cortex-A53
│ BCM2837B0登載コア(Raspberry Pi 3 model B+)
│ 命令セット的にはArmv8だが、Armv7相当としても利用可能
※ラズパイ3 model B+上でのアセンブラの最初の一歩記事
│ ぐだぐだ低レベルプログラミング(2) ラズパイでアセンブラ、最初の一歩かな?
※ラズパイ3 model B+のBCM2837のアーキテクチャ調査記事
│ ぐだぐだ低レベルプログラミング(3) Arm、32ビット?64ビット?
_◇Cortex-A72
│ BCM2711登載コア(Raspberry Pi 4 model B)