0% menganggap dokumen ini bermanfaat (0 suara)
8 tayangan25 halaman

Instruksi Pemrosesan Data ARM

Dokumen ini membahas instruksi set ARM, terutama instruksi pemrosesan data. Instruksi ARM memiliki panjang 32 bit dan sebagian besar dieksekusi dalam satu siklus. Instruksi dapat dieksekusi secara kondisional berdasarkan nilai flag kondisi.
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
8 tayangan25 halaman

Instruksi Pemrosesan Data ARM

Dokumen ini membahas instruksi set ARM, terutama instruksi pemrosesan data. Instruksi ARM memiliki panjang 32 bit dan sebagian besar dieksekusi dalam satu siklus. Instruksi dapat dieksekusi secara kondisional berdasarkan nilai flag kondisi.
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

ARM Instruction Set:

Data Processing Instruction

Presented by Ir. Suryani Alifah, M.T., PhD.

Program Studi Teknik Elektro


Fakultas Teknologi Industri
Universitas Islam Sultan Agung
Genap 2022/2023
Fitur Mikroprosessor ARM
• Semua instruksi panjangnya 32 bit.
• Sebagian besar instruksi dijalankan dalam satu siklus.
• Setiap instruksi dapat dieksekusi secara kondisional.
• Arsitektur load/store
• Instruksi pemrosesan data hanya bekerja pada register
• Tiga operand format
• Gabungan ALU dan shifter untuk manipulasi bit kecepatan tinggi
• Instruksi akses memori khusus dengan mode pengalamatan powerful
auto-indexing
• tipe data 32 bit dan 8 bit
• dan juga tipe data 16 bit pada ARM Architecture v4.
• Flexible multiple register load and store instructions
• Instruction set extension via coprocessors
Jenis Instruksi ARM

• instruksi pemrosesan data


• Instruksi transfer data
• Instruksi aliran kontrol
ARM Instruction Set Format
ARM Instruction Set Summary (1/4)
ARM Instruction Set Summary (2/4)
ARM Instruction Set Summary (3/4)
ARM Instruction Set Summary (4/4)
Instruksi Pemrosesan Data
Instruksi Pemrosesan Data (1/3)
• Terdiri dari
• Arithmetic (ADD, SUB, RSB)
• Logical (BIC, AND)
• Compare (CMP, TST)
• Register movement (MOV, MVN)
• Semua operan memiliki lebar 32-bit; berasal dari register atau ditentukan
sebagai literal dalam instruksi itu sendiri
• Operand kedua dikirim ke ALU melalui barrel shifter
• Hasil 32-bit ditempatkan dalam register; instruksi perkalian panjang
menghasilkan hasil 64-bit
• format instruksi 3 alamat
• 2 operan sumber dan 1 register tujuan
• Satu sumber selalu berupa register, yang kedua mungkin berupa register, shift register, atau
nilai langsung
Simple Register Operands (1/2)
• Operasi Aritmatika
ADD r0,r1,r2 ;r0:=r1+r2
ADC r0,r1,r2 ;r0:=r1+r2+C
SUB r0,r1,r2 ;r0:=r1–r2
SBC r0,r1,r2 ;r0:=r1–r2+C–1
RSB r0,r1,r2 ;r0:=r2–r1, reverse subtraction
RSC r0,r1,r2 ;r0:=r2–r1+C–1
• Secara default, operasi pemrosesan data tidak memengaruhi flag kondisi
• Operasi Logika Bit-wise
AND r0,r1,r2 ;r0:=r1 AND r2
ORR r0,r1,r2 ;r0:=r1 OR r2
EOR r0,r1,r2 ;r0:=r1 XOR r2
BIC r0,r1,r2 ;r0:=r1 AND(NOT r2), bit clear
Simple Register Operands (2/2)
• Operasi Register Movement
• Hilangkan operan sumber pertama dari format
MOV r0,r2 ;r0:=r2
MVN r0,r2 ;r0:=NOT r2, move 1’s complement

• Operasi Perbandingan Comparison


• Tidak ada hasil; hilangkan register tujuan dari format
• Cukup atur bit kode kondisi (N, Z, C dan V) di CPSR
CMP r1,r2 ;set cc on r1 - r2, compare
CMN r1,r2 ;set cc on r1 + r2, compare negated
TST r1,r2 ;set cc on r1 AND r2, bit test
TEQ r1,r2 ;set cc on r1 XOR r2, test equal
Using the Barrel Shifter: the 2nd Operand

• Register, optionally with shift


Operand 1 Operand 2 operation applied
• Shift value can be either
• 5-bit unsigned integer
Barrel • Specified in bottom byte of another
register
Shifter • Used for multiplication by constant
• Immediate value
• 8-bit number, with a range of 0 - 255
• Rotated right through even number
AL U of positions
• Allows increased range of 32-bit
constants to be loaded directly into
registers
Result
Immediate Operands
• Mengganti operan sumber kedua dengan operan langsung/immediate
operand, yang merupakan konstanta literal, didahului dengan “#”
ADD r3,r3,#1 ;r3:=r3+1
AND r8,r7,#&FF ;r8:=r7[7:0], &:hexadecimal

• Karena nilai langsung dikodekan dalam 32 bit instruksi, tidak mungkin


untuk memasukkan setiap nilai 32-bit yang mungkin sebagai nilai
langsung.

Immediate = (0 → 255) × 22n where 0  n  12


Instruksi Pemrosesan Data (3/3)
31 28 27 26 25 24 21 20 19 16 15 12 11 0

cond 00 # opcode S Rn Rd operand 2

destination register
first operand register
set condition codes
arithmetic/logic function

25 11 8 7 0

1 #rot 8-bit immediate

immediate alignment
11 7 6 5 4 3 0

#shift Sh 0 Rm

25 immediate shift length


0 shift type
second operand register
11 8 7 6 5 4 3 0

Rs 0 Sh 1 Rm

register shift length


Instruksi Pemrosesan Data (2/3)
• Memungkinkan kontrol langsung apakah kode kondisi dipengaruhi oleh S bit
atau tidak (kode kondisi tidak berubah ketika S = 0)
• N = 1 jika hasilnya negatif; 0 sebaliknya (yaitu N = bit 31 dari hasil)
• Z = 1 jika hasilnya nol; 0 sebaliknya
• C = 1 carry-out dari ALU saat ADD, ADC, SUB, SBC, RSB, RSC, CMP, atau CMN; carry-out
dari shifter
• V = 1 jika overflow dari bit 30 ke bit 31; 0 jika tidak overflow
• (V dipertahankan dalam operasi non-aritmatika)
• PC dapat digunakan sebagai operan sumber (alamat instruksi ditambah 8)
kecuali bila jumlah shift yang ditentukan register digunakan
• PC dapat ditentukan sebagai register tujuan, instruksinya adalah bentuk
cabang (hasil dari subrutin)
Memuat Konstanta (1/2)
• Tidak ada instruksi ARM tunggal yang dapat memuat konstanta immediate 32-bit
secara langsung ke dalam register
• All ARM instructions are 32-bit long
• ARM instructions do not use the instruction stream as data
• Format instruksi pemrosesan data memiliki 12 bit yang tersedia untuk operan 2
(lihat P.44)
• Jika digunakan secara langsung, ini hanya akan memberikan kisaran 4096
• Sebaliknya itu digunakan untuk menyimpan konstanta 8-bit, berikan kisaran 0-255
• 8 bit ini kemudian dapat diputar melalui posisi genap
• Ini memberikan rentang konstanta yang jauh lebih besar yang dapat langsung
dimuat, melalui beberapa konstanta masih perlu dimuat dari memori
Loading Constant (2/2)
• Untuk memuat konstanta, cukup pindahkan nilai yang diperlukan ke
dalam register – assembler akan mengubah ke bentuk rotasi untuk
kita
• MOV r0,#4096 ;MOV r0,#&1000 (0x40 ror 26)

• bitwise complements juga dapat dibentuk menggunakan MVN::


• MOV r0,#&FFFFFFFF ;MVN r0,#0

• Nilai yang tidak dapat dihasilkan dengan cara ini akan menyebabkan
kesalahan
Memuat Konstanta 32-bit
• Untuk memungkinkan konstanta yang lebih besar dimuat, assembler menawarkan
pseudo-instruction :
LDR Rd,=const
Ini akan:
• Menghasilkan instruksi MOV atau MVN untuk menghasilkan nilai (jika mungkin)
atau
• Hasilkan instruksi LDR dengan alamat relatif PC untuk membaca konstanta dari
kumpulan literal (area data konstan yang disematkan dalam kode)
Misalnya
• MOV r0,=&FF ;MOV r0,#0xFF
• LDR r0,=&55555555 ;LDR r0,[PC,#Imm10]
• Karena mekanisme ini akan selalu menghasilkan instruksi terbaik untuk kasus
tertentu, ini adalah cara memuat konstanta yang direkomendasikan
Instruksi Kondisional
Eksekusi Kondisional
• Sebagian besar set instruksi hanya mengizinkan pencabangan dieksekusi secara
kondisional.
• Namun dengan menggunakan kembali perangkat keras evaluasi kondisi, ARM
secara efektif meningkatkan jumlah instruksi
• Semua instruksi berisi bidang kondisi yang menentukan apakah CPU akan
menjalankannya
• Instruksi yang tidak dieksekusi masih membutuhkan 1 siklus
• Untuk memungkinkan tahapan lain dalam pipeline selesai
• Ini mengurangi jumlah cabang yang akan menghentikan pipeline
• Mengizinkan kode sebaris yang sangat padat
• Penalti waktu karena tidak menjalankan beberapa instruksi bersyarat seringkali
lebih kecil dari overhead cabang atau panggilan instruksi yang seharusnya
diperlukan
Condition Code
31 28 27 0
cond
Opcode Mnemonic
[31:28] extension Interpretation Status flag state for execution
0000 EQ Equal / equals zero Z set
0001 NE Not equal Z clear
0010 CS/HS Carry set / unsigned higher or some C set
0011 CC/LO Carry clear / unsigned lower C clear
0100 MI Minus / negative N set
0101 PL Plus / positive or zero N clear
0110 VS Overflow V set
0111 VC No overflow V clear
1000 HI Unsigned higher C set and Z clear
1001 LS Unsigned lower or same C clear or Z set
1010 GE Signed greater than or equal N equals V
1011 LT Signed less than N is not equal to V
1100 GT Signed greater than Z clear and N equals V
1101 LE Signed less than or equal Z sets or N is not equal to V
1110 AL Always any
1111 NV Never (do not use!) none
Example of Conditional Execution
• Fitur yang tidak biasa dari kumpulan instruksi ARM adalah bahwa
eksekusi bersyarat berlaku tidak hanya untuk cabang tetapi untuk semua
instruksi ARM CMP r0,#5
CMP r0,#5
BEQ Bypass ;if (r0!=5)
ADDNE r1,r1,r0
ADD r1,r1,r0
;{r1=r1+r0} SUBNE r1,r1,r2

SUB r1,r1,r2
Bypass …
❑ urutan bersyarat adalah 3 instruksi lebih sedikit, lebih baik (lebih
kecil dan lebih cepat) untuk mengeksploitasi eksekusi bersyarat
daripada menggunakan cabang
CMP r0,r1
if((a==b)&&(c==d)) e++; CMPEQ r2,r3
ADDEQ r4,r4,#1
Using and Updating the condition Field

• Untuk mengeksekusi instruksi secara kondisional, cukup lakukan postfix


dengan kondisi yang sesuai :
• For example and add instruction takes the form
• ADD r0, r1, r2 ; r0 = r1 + r2 (ADDAL)
• To execute this only if the zero flag is set
• ADDEQ r0, r1, r2 ; r0 = r1 + r2 iff zero flag set
• By default, data processing operations do not affect the condition flags
• With comparison instructions this is the only effect
• Untuk menyebabkan flag kondisi diperbarui, bit S dari instruksi perlu diatur
dengan melakukan postfix pada instruksi (dan kode kondisi apa pun) dengan
"S"
• For example to add two numbers and set the condition flags:
• ADDS r0, r1, r2 ; r0 = r1 + r2 and set flags
End Session

Anda mungkin juga menyukai