April 07, 2017

General Purpose Register ARM

Tulisan ini adalah lanjutan dari artikel kemarin yang membahas register pada ARM sekarang akan dilanjutkan dengan register general purpose. ARM membatasi penggunaan SP dan LR sebagai general purpose register kecuali processor yang berdasarkan ARMv6-M dan ARMv7-M, ada 30 (atau 32 jika security extension telah diimplementasikan) general purpose 32bit register, termasuk didalamnya register SP dan LR.

15 register terlihat pada satu waktu, tergantung mode processor yang dipakai saat ini. 15 register tersebut yaitu R0-R12,SP,LR sedangkan CP(R15) bukan merupakan generan purpose register. SP atau R13 merupakan stack pointer. Kompiler C atau C++ selalu menggunakan SP sebagai stack pointer. LR atau R14 digunakan pada mode user digunakan sebagai link register untuk menyimpan alamat return ketika sebuah subroutine call telah dibuat. Dapat juga digunakan sebagai general purpose register, jika alamat return telah disimpan pada stack.

Contohnya adalah sebagai berikut
 .text 

 .extern printf @inisialisasi fungsi external printf kalo dalam bahasa c didalam header stdio.h 

 .global main 

 main: 

 push {ip, lr} @ akses link register 

 ldr r0, =string @load variabel string sebagai R0 

 bl printf @ memanggil fungsi printf 

 pop {ip,pc} 

 .data 

 string: .ascii "Hallo, Assembly\n" 


simpan sebagai sample.s kemudian compile program ini dengan perintah
as -g -o sample.o sample.s
gcc -o sample sample.o
./sample

kamu akan melihat tulisan Hallo, Assembly

Tidak ada komentar:

mencoba menggunakan zram di raspberry pi

saya beberapa hari yang lalu mencoba mengaktifkan zram untuk membuat cadangan jika ram udah hampir penuh untuk dipindah ke zram, sejauh ini...