Tampilkan postingan dengan label Assembly. Tampilkan semua postingan
Tampilkan postingan dengan label Assembly. Tampilkan semua postingan

April 11, 2017

Perbandingan Assembly aarch64 dengan arm 32

kemarin saya mencoba iseng membuat program dengan gnu assembler pada aarch64 dengan prosesor allwiner h5, lumayan rumit jika dibandingkan dengan assembly di allwiner h2 atau allwiner h3 berikut ini perbedaannya.

assembly untuk allwiner h2 /h3

 .text   
 .global main  
 main:  
     push {ip, lr}   
     mov r1, #15  
     ldr r0, =text  
     bl printf  
     pop {ip, pc}  
 .data  
 text: .asciz "hello, world %d\n"  

assembly aarch64 untuk allwiner h5

 .text  
 .global main  
 main:  
     stp x29, x30, [sp, -16]!  
     add x29, sp, 0  
     adrp x0,text  
     mov x1, 15  
     add x0, x0, :lo12:text  
     bl printf  
     mov w0, 0  
     ldp x29, x30, [sp], 16  
     ret  
 .data  
 text: .asciz "hello, world %d\n"  

jelas sekali kan arm 32 lebih sedikit daripada aarch64 keduanya menghasilkan output hello, world 15
tapi prosesnya lebih panjang aarc64.
demikianlah hasil iseng saya kemarin nantikan keisengan saya selanjutnya

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

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...