SISTEM KOMPUTER
Manusia selalu berpikir mengenai angka dalam
basis 10, akan tetapi angka dapat disajikan
dalam basis apapun. Contoh 12310 = 11110112
Sejak register merupakan bagian penting dari
semua instruksi, harus ada konversi untuk
memetakan nama register ke angka. Dalam
bahasa asembler MIPS, register $s0 hingga
$s7 dipetakan pada register 16 hingga 23, dan
register $t0 hingga $t7 dipetakan pada register
8 hingga 15. sehingga, $s0 berarti register
16, $s1 berarti register 17, dst; $t2 berarti
register 10, $t7 berarti register 15, dst.
Instruksi MIPS asli
add $t0,$s1,$s2
Representasi desimal
Setiap segmen instruksi disebut field
Field pertama dan terakhir (dalam kasus ini berisi 0 dan
32) adalah kombinasi yang menyatakan bahwa operasi
yang akan dilakukan adalah penjumlahan
Field kedua menyatakan operand pertama ($s1=17)
Field ketiga menyatakan operand ketiga ($s2=18)
Field keempat menyatakan nomor register yang akan
menerima hasil penjumlahan ($t0 = 8)
Field kelima tidak digunakan maka diset 0
0 17 18 8 0 32
Field-field yang ada di MIPS diberi nama, agar mudah
didiskusikan
6 bit 5 bit 5 bit 5 bit 5 bit
6 bit
Op : operasi dasar dari instruksi, biasa disebut
opcode
rs : register pertama dari sumber
rt : register kedua dari sumber
rd : register tujuan, mendapat hasil dari operasi.
shamt : shift amount. Sampai pada
waktunya, maka field ini akan
bernilai 0
funct : function. Field ini akan memilih operasi yang
op rs rt rd shamt funct
Format sebelumnya dikenal sebagai tipe R (khusus untuk
Register) atau R-format. Tipe kedua dikenalsebagai
tipe I (untuk Immediate) atau I-format, digunakan untuk
instruksi immediate dan transfer data.
6 bit 5 bit 5 bit 16 bit
Reg = nomor register dari 0 hingga 31
Alamat = alamat 16 bit
- = field tidak tersedia pada format ini
op rs rt Konstanta atau
alamat
Instruksi Forma
t
op rs rt rd shamt funct alamat
add R 0 reg reg reg 0 3210 -
sub R 0 reg reg reg 0 3410 -
add
immediate
I 810 reg reg - - - konstan
ta
lw I 3510 reg reg - - - alamat
sw I 4510 reg reg - - - alamat
Jika $t1 adalah base dan $s2 berhubungan dengan h, penugasan
A[300] = h + A[300];Akan dikompile menjadi
lw $t0,1200($t1) #register sementara $t0 mendapat A[300]
add $t0, $s2,$t0 #register sementara $t0 mendapat h+A[300]
sw $t0,1200($t1) #menyimpan h + A[300] kembali ke A[300]
Instruksi lw diidentifikasi oleh 35 pada field pertama(op). Register base 9 ($t1) dispesifikasi padafieldkedua rs. Register tujuan 8 ($t0) dispesifikasi padafield ketiga rt. Offset untuk memilih A[300] (1200 = 300 x 4) ditemukan pada field terakhir (alamat)
Instruksi add diikuti oleh 0 pada field pertama (op), dan 32 pada field terakhir (funct). Tiga register operand (18,8,8) ditemukan pada field kedua, ketigadan keempat berhubungan dengan $s2, $t0, dan $t0
Instruksi sw ditentukan oleh 43 pada field pertama, dan sisanya sama seperti yang telah dijelaskansebelumny.
op rs rt rd Alamat /shamt funct
35 9 8 1200
0 18 8 8 0 32
43 9 8 1200
Operasi pertama disebut shift. Ini akanmemindahkan semua bit dalam word ke kiri ataukanan, mengisi bit kosong dengan 0. sebagaicontoh register $s0 berisi
0000 0000 0000 0000 0000 0000 0000 0000 10012
= 910
Maka ketika instruksi shift left by 4 diekseskusi, maka nilainya akan menjadi
0000 0000 0000 0000 0000 0000 0000 1001 0000 2= 14410
Nama instruksi pada MIPS adalah shift left logical (sll) dan shift right logical (srl)
OPERASI
LOGIKA
BAHASA C BAHASA JAVA INSTRUKSI MIPS
SHIFT LEFT << << sll
SHIFT RIGHT >> >>> srl
BIT-BY-BIT AND & & and, andi
BIT-BY-BIT OR | | or, ori
BIT-BY-BIT NOT ~ ~ nor
Instruksi untuk operasi diatas, asumsikan
hasilnya akan diberi ke register $t2
sll $t2, $s0, 4 #reg $t2 = reg $s0 << 4 bit
Sebelumnya, dilakukan penundaan penjelasan
tentang field shamt pada R format, ini
kepanjangan dari shift amount yang digunakan
pada instruksi shift. Untuk instruksi diatas, format
MIPSnya adalah
Nilai sll adalah 0 pada field op dan funct, rd berisi
$t2, rt berisi $s0 dan shamt berisi 4. field rs tidak
digunakan sehingga di set 0
op rs rt rd shamt funct
0 0 16 10 4 0
Instruksi penting lainnya adalah AND,bit-by-bit
operation, yang hanya akan menghasilkan 1 jika
kedua bit operand bernilai 1. sebagai contoh, jika
register $t2 berisi
0000 0000 0000 0000 0000 0000 1101 0000 00002
Dan register $t1 berisi
0000 0000 0000 0000 0000 0011 1100 0000 00002
Maka setelah mengeksekusi intruksi MIPS
and $t0,$t1,$t2 #reg $t0=reg $t1 & $t2
Nilai register $t0 akan menjadi
0000 0000 0000 0000 0000 0000 1100 0000 00002
Berbeda dengan operasi AND, maka operasi OR,
bit-by-bit operation, yang menghasilkan 1 jika
salah satu dari kedua bit operand bernilai 1.
Maka setelah mengeksekusi intruksi MIPS
or $t0,$t1,$t2 #reg $t0=reg $t1 | $t2
Nilai register $t0 akan menjadi
0000 0000 0000 0000 0000 0011 1101 0000 00002
Operasi NOT, bit-by-bit operation, akan
menghasilkan nilai yang berlawanan dengan nilai
bit operand. Sebagai contoh register $t3 bernilai
0. Maka setelah mengeksekusi intruksi MIPS
nor $t0,$t1,$t3 #reg $t0= ~ (reg $t1 | $t3)
Nilai register $t0 akan menjadi
1111 1111 1111 1111 1111 1100 0011 1111 11112
Perintah Percabangan biasanya menggunakanstatement if, yang terkadang dikombinasikandengan statement go to dan label. Instruksi MIPS untuk percabangan adalah
Beq register1, register2, L1
instruksi ini berarti pergei ke statement berlabelL1 jika nilai register 1 sama dengan nilai register 2. ini adalah singkatan dari branch if equal.
Bne register1, register2, L1
instruksi ini berarti perge ke statement berlabel L1 jika nilai register 1 tidak sama dengan nilairegister 2. ini adalah singkatan dari branch if not equal.
Berdasarkan flowchart dapat terlihat bahwa diinginkanbeq, namun kode akan lebih efisien jika dilakukanpengetesan berdasarkan kondisi berlawanan
bne $s3,$s4,Else #go to Else if i≠ jInstruksi berikutnya adalah operasi tunggal
add $s0,$s1,$s2 #f = g+h (berarti i= j)Selanjutnya pada akhir statement if, ada unconditional branch, untuk itu digunakan instruksi jump
j Exit #go to ExitLakukan pemeriksaan pada cabang satunya, beri label Else
Else: sub $s0,$s1,$s2 # f = g-h (berarti i≠ j)Exit:
1. Buatlah instruksi MIPS untuk program swap
dibawah ini:
temp = v[k];
v[k] = v[k+1]
v[k+1] = temp;
Petunjuk: ingat pengalamatan memori untuk
MIPS mengacu pada alamat byte, dan word
terbagi atas 4 byte. Untuk nilai index harus
dikali dengan 4, bukan 1.
2. Buatlah komentar untuk instruksi MIPS dibawahini, asumsikan bahwa $a0 dan $a1 digunakanuntuk input dan berisi integer a dan b, dan $v0 digunakan sebagai output:
add $t0, $zero,$zero
loop: beq $a1,$zero, finish
add $t0,$t0,$a0
sub $a1,$a1,1
j loop
finish: addi $t0,$t0,100
add $v0, $t0,$zero
Top Related