Processor dalam memproses data pasti memerlukan tempat (memory) untuk menampung data tersebut untuk kemudian di proses dan disimpan lagi ke tempat lain. Tempat inilah yang disebut register
Register adalah memory yang terdapat di processor untuk menyimpan data dan instruksi, karena terdapat di dalam processor maka kecepatan akses datanya pun sangat tinggi, namun memiliki kapasitas penyimpanan yang kecil
Register digunakan oleh CPU untuk menyimpan data yang sedang digunakan saat ini, seperti alamat memori yang sedang dibaca atau ditulis, hasil operasi, dan sebagainya.
ARM processor menggunakan arsitektur load-store, yang artinya load mengambil data dari memory (SRAM) - data tersebut di proses - kemudian store, data tersebut disimpan ke SRAM apabila di perlukan.
Jenis Jenis Register ARM Cortex M
1. General Purpose
General purpose register adalah jenis register dalam prosesor yang digunakan untuk menyimpan data sementara yang digunakan oleh program. Mereka dapat digunakan untuk menyimpan hasil operasi, alamat memori, atau data apa pun yang dibutuhkan oleh program.
R1 - R12
Digunakan sebagai tempat penyimpanan data yang akan di proses, R0 - R7 juga disebut register low, R8 - R12 disebut register high. Nilai dari R0 - R12 pada kondisi awal adalah undefined
2. R13, Stack pointer (SP)
SP register digunakan untuk mengakses stack memory dengan operasi PUSH dan POP.
Karena ARM processor menggunakan model full-descending stack, maka SP menyimpan alamat dari data terakhir yang tersimpan (PUSH) di dalam stack memory.
Ketika operasi PUSH dilakukan, yang pertama kali dilakukan processor adalah decrements stack pointer, baru kemudian menuliskan data ke stack memory.
Cortex-M memiliki 2 buah Stack pointer, MSP dan PSP. Setelah reset, processor akan menggunakan MSP sebagai stack pointer dan menginisialisasinya dengan nilai yang ada pada alamat 0x0000_0000.
Sedangkan PSP biasanya akan digunakan pada aplikasi embedded OS yang mana pemisahan antara PSP (user task) dan MSP (OS kernel) diperlukan.
3. R14, Link Register (LR)
Link Register (LR) adalah register yang digunakan untuk menyimpan "the next instruction" (return address) saat processor mengeksekusi sebuah function.
Saat processor selesei mengeksekusi function tersebut, tentunya processor akan kembali ke tempat di mana ia berasal untuk kemudian mengeksekusi "the next instruction" yang sebelumnya tertunda. Nah, alamat "the next instruction" tersebut disimpan di dalam Link Register.
4. R15, Program Counter (PC)
Program Counter digunakan untuk menyimpan instruksi yang sedang di jalankan saat ini. Pada saat reset, PC di inisialisasi dengan nilai yang ada pada alamat 0x0000_0004 yakni alamat dari reset_handler.
5. Special Registers
Special artinya hanya digunakan untuk kepentingan tertentu, seperti status processor, interrupt masking, dan sebagainya. Untuk memodifikaksi nilai pada special register diperlukan instruksi khusus seperti MRS dan MRS.
Program status registers
Program Status Register (PSR) adalah register yang menyimpan informasi tentang status saat ini dari suatu program atau proses yang sedang berjalan.
PSR menyimpan informasi seperti mode akses, status flags, dan status interupsi. Informasi ini berguna bagi kita pada saat melakukan debugging, seperti melihat interupsi apa yang sedang berjalan, dan sebagainya.
PSR terdiri dari :
Application PSR (APSR)
Execution PSR (EPSR)
Interrupt PSR (IPSR)
Application Program Status Register (APSR)
APSR menunjukkan status yang dihasilkan oleh instruksi sebelumnya, semisal jika instruksi sebelumnya menghasilkan nilai negatif maka bit ke 31 pada APSR akan bernilai 1 dan sebagainya
Interrupt Program Status Register (IPSR)
Interrupt Program Status Register (IPSR) digunakan untuk menyimpan informasi tentang interrupt yang sedang diproses oleh prosesor.
IPSR menunjukkan nomor vector interrupt yang sedang diproses dan memungkinkan prosesor mengidentifikasi dan merespons interrupt dengan tepat.
Execution Program Status Register (EPSR)
EPSR mengandung T-bit, yang mengindikasikan apakah processor mengeksekusi instruksi Thumb atau instruksi ARM. Jika T-bit = 1 maka processor menjalankan instruksi thumb.
Instruksi Thumb adalah set instruksi yang digunakan dalam processor ARM untuk mengoptimalkan penggunaan memory dan meningkatkan kecepatan eksekusi.
Instruksi ini merupakan versi yang lebih pendek dari instruksi ARM yang asli dan memiliki ukuran 16-bit sehingga dapat menghemat ruang memori.
Karena ARM Cortex M processor hanya support instruksi Thumb maka T-bit pada EPSR harus tetap bernilai 1.
Exception Mask Register
The exception mask registers disable the handling of exceptions by the processor. Disable
exceptions where they might impact on timing critical tasks.
EMR berfungsi untuk menghentikan processor agar tidak menangani exception tertentu. Ini dikarenakan pada saat saat kritis (seperti kehabisan battery) suatu exception tidak harus di lakukan oleh processor.
Terdapat 3 Register EMR :
Priority Mask Register
Base Priority Mask Register
Fault Mask Register
Control Registers
Control Register berfungsi untuk menentukan mode operasi, stack pointer, dan floating point unit.
Dalam mode handler, processor selalu menggunakan MSP, jadi percuma apabila kita menuliskan value ke bit SPSEL.
Selanjutnya apa?
Setelah tahu mengenai internal register processor ARM Cortex M, selanjutnya kita akan membahas sistem memori.
Next : Sistem Memori