Bab 2. Instructions: Bahasa dari Komputer Introduction ke MIPS machine Set dari MIPS instruction MMD 2405 Andi WRE 1
Register vs. Memori Komponen dari sebuah komputer Prosesor, memori, input, dan output Komponen dari sebuah prosesor Control dan Datapath (ALU dan register) Compiler mengasosiasikan variable - variabel dengan register -registernya Bagaimana dengan program yang memiliki banyak variabel? Control Input Memory Datapath Output Processor I/O MMD 2405 Andi WRE 2
Organisasi Memori MIPS 0 1 2 3 4 5 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah address memori adalah index dari array Terdapat 2 32 bytes dengan alamat byte dari 0 sampai 2 32-1 Apakah least 2 significant bit dari sebuah word address? Byte addressing berarti bahwa indeks menunjuk pada sebuah byte di memori. Bytes sudah baik, namun banyak item data menggunakan word yang lebih besar Untuk MIPS, sebuah word adalah 32 bit atau 4 byte Jadi, MIPS mempunyai 2 30 word dengan alamat byte di 0, 4, 8,..., 2 32-4 MMD 2405 Andi WRE 3
Organisasi Register MIPS Name Register number Usage $zero 0 the constant value 0 $v0-$v1 2-3 values for results and expression evaluation $a0-$a3 4-7 arguments $t0-$t7 8-15 temporaries $s0-$s7 16-23 saved $t8-$t9 24-25 more temporaries $gp 28 global pointer $sp 29 stack pointer $fp 30 frame pointer $ra 31 return address Register 1 ($at) disimpan untuk assembler, 26-27 untuk operating system MMD 2405 Andi WRE 4
MIPS ISA The MIPS instruction set architecture serupa dengan arsitektur lain yang dikembangkan sejak 1980-an Hampir 100 juta prosesor MIPS dibuat sejak 2002 Digunakan oleh NEC, Nintendo, Cisco, Silicon Graphics, Sony,... 1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 100 0 Other SPARC Hitachi SH PowerPC Motorola 68K MIPS IA-32 ARM 1998 1999 2000 2001 2002 MMD 2405 Andi WRE 5
Instruksi Aritmetika dari MIPS Semua instruksi memiliki 3 operands Urutan instruksi adalah tetap (yang pertama adalah tujuan) Operand harus register - register (tidak bisa memori) Salah: add 48($s3), $s2, 32($s3) Hanya terdapat 32 register, setiap register terdiri dari 32 bit Contoh 1: Contoh 2: C code: MIPS instruction: C code: MIPS instructions: a = b + c add a, b, c a = b + c + d add a, b, c add a, a, d MMD 2405 Andi WRE 6
Instruksi Memori dari MIPS Instruksi: load (lw) dan store (sw) Contoh: diasumsikan bahwa A adalah sebuah array dari 100 word dan compile mengasosiasikannya variabel h dengan register $s2. Base address dari A adalah $s3. C code: A[12] = h + A[8]; MIPS code: lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0, 48($s3) Kita dapat mengacu register dengan namanya (misal $s2, $t2) selain dengan angkanya Perintah store: tujuan di akhir MMD 2405 Andi WRE 7
Beberapa Instruksi MIPS Instruksi Arti add $s1, $s2, $s3 $s1 = $s2 + $s3 sub $s1, $s2, $s3 $s1 = $s2 $s3 lw $s1, 100($s2) $s1 = Memory[$s2+100] sw $s1, 100($s2) Memory[$s2+100] = $s1 MMD 2405 Andi WRE 8
Sebuah Contoh Apakah kita dapat mengetahui kode dan angka awal dari register $4 dan $5? swap(int v[], int k); { int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp; } swap: muli $2, $5, 4 add $2, $4, $2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31 MMD 2405 Andi WRE 9
Format Instruksi MIPS Instruksi, seperti register dan data word, juga dalam 32 bit Contoh: add $t0, $s1, $s2 Register memiliki angka, $t0=8, $s1=17, $s2=18 Format Instruksi: 000000 10001 10010 01000 00000 100000 op rs rt rd shamtm funct op=0 $s1=17 $s2=18 $t0=8 =0 =32 Dapat menebak arti dari singkatan diatas? Op: opcode, rs: 1 st register source, rt: 2 nd register source, rd: register destination, shamt: shift amount, funct: function code MMD 2405 Andi WRE 10
R-type: Tiga Format Instruksi MIPS op rs rt rd shamtm funct 6bits 5bits 5bits 5bits 5bits 6bits I-type: op rs rt 16 bit number J-type: 6bits 5bits 5bits 16 bits op 26 bit address 6bits 26 bits MMD 2405 Andi WRE 11
Instruksi Transfer Data MIPS (memori) Perhatikan instruksi load-word dan store-word, Contoh: lw $t0, 32($s2) 35 18 8 32 op rs rt 16 bit number Contoh: sw $t0, 48($s2) 43 18 8 48 op rs rt 16 bit number MMD 2405 Andi WRE 12
Instruksi Kontrol MIPS Instruksi pengambil keputusan mengubah aliran kontrol seperti, mengubah instruksi selanjutnya yang akan dieksekusi Instruksi percabangan kondisional MIPS: bne $t0, $t1, Label beq $t0, $t1, Label Contoh: if (i==j) h = i + j; bne $s0, $s1, Label add $s3, $s0, $s1 Label:... MMD 2405 Andi WRE 13
Instruksi Kontrol MIPS (II) Instruksi MIPS percabangan tanpa kondisional j label Contoh: if (i!=j) beq $s4, $s5, Lab1 h=i+j; add $s3, $s4, $s5 else j Lab2 h=i-j; Lab1: sub $s3, $s4, $s5 Lab2:... MMD 2405 Andi WRE 14
Instruksi MIPS yang Telah Dijelaskan Instruksi Arti add $s1,$s2,$s3 $s1 = $s2 + $s3 sub $s1,$s2,$s3 $s1 = $s2 $s3 lw $s1,100($s2) $s1 = Memory[$s2+100] sw $s1,100($s2) Memory[$s2+100] = $s1 bne $s4,$s5,l Next instr. is at Label if $s4 $s5 beq $s4,$s5,l Next instr. is at Label if $s4 = $s5 j Label Next instr. is at Label MMD 2405 Andi WRE 15
Konstanta Konstanta kecil sangat sering dipakai (50% dari operands) contoh, A = A + 5; B = B + 1; C = C - 18; Solusi? Bagaimana kalau? Menempatkan konstanta tipikal dalam memori dan me-load-nya Menciptakan register yang ditanam di perangkat keras (seperti $zero) untuk konstanta seperti satu (one). Instruksi MIPS: addi $29, $29, 4 slti $8, $18, 10 andi $29, $29, 6 ori $29, $29, 4 MMD 2405 Andi WRE 16
Ringkasan dari Mode Addressing 1. Immediate addressing op rs rt Immediate Contoh: 2. Register addressing op rs rt rd... funct Registers Register 1. Addi $29, $29, 4 3. Base addressing op rs rt Register Address + Memory Byte Halfword Word 1. Add $s1, $s2, $s3 4. PC-relative addressing op rs rt Address Memory 1. Lw $s1, 32($s2) PC + Word 1. Beq $s1, $s2, 25 5. Pseudodirect addressing op Address Memory PC Word 1. J Label MMD 2405 Andi WRE 17
Ringkasan dari Register dan Memori MIPS operands Name Example Comments $s0-$s7, $t0-$t9, $zero, Fast locations for data. In MIPS, data must be in registers to perform 32 registers $a0-$a3, $v0-$v1, $gp, arithmetic. MIPS register $zero always equals 0. Register $at is $fp, $sp, $ra, $at reserved for the assembler to handle large constants. Memory[0], Accessed only by data transfer instructions. MIPS uses byte addresses, so 2 30 memory Memory[4],..., sequential words differ by 4. Memory holds data structures, such as arrays, words Memory[4294967292] and spilled registers, such as those saved on procedure calls. MMD 2405 Andi WRE 18
Ringkasan dari Instruksi Umum MIPS assembly language Category Instruction Example Meaning Comments add add $s1, $s2, $s3 $s1 = $s2 + $s3 Three operands; data in registers Arithmetic subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 Three operands; data in registers add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 Used to add constants load word lw $s1, 100($s2) $s1 = Memory[$s2 + 100] Word from memory to register store word sw $s1, 100($s2) Memory[$s2 + 100] = $s1 Word from register to memory Data transfer load byte lb $s1, 100($s2) $s1 = Memory[$s2 + 100] Byte from memory to register store byte sb $s1, 100($s2) Memory[$s2 + 100] = $s1 Byte from register to memory load upper immediate lui $s1, 100 $s1 = 100 * 2 16 Loads constant in upper 16 bits branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to Equal test; PC-relative branch PC + 4 + 100 branch on not equal bne $s1, $s2, 25 if ($s1!= $s2) go to Not equal test; PC-relative Conditional PC + 4 + 100 branch set on less than slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; Compare less than; for beq, bne else $s1 = 0 set less than immediate slti $s1, $s2, 100 if ($s2 < 100) $s1 = 1; else $s1 = 0 Compare less than constant jump j 2500 go to 10000 Jump to target address Uncondi- jump register jr $ra go to $ra For switch, procedure return tional jump jump and link jal 2500 $ra = PC + 4; go to 10000 For procedure call MMD 2405 Andi WRE 19
MMD 2405 Andi WRE 20