Anda di halaman 1dari 25

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