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:
Posting Komentar