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 MMD 2405 I/O 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 MMD 2405 • Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address • Sebuah address memori adalah index dari array • Terdapat 232 bytes dengan alamat byte dari 0 sampai 232-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 230 word dengan alamat byte di 0, 4, 8, ... , 232-4 Andi WRE 3 Organisasi Register MIPS Name Register number $zero 0 $v0-$v1 2-3 $a0-$a3 4-7 $t0-$t7 8-15 $s0-$s7 16-23 $t8-$t9 24-25 $gp 28 $sp 29 $fp 30 $ra 31 Usage the constant value 0 values for results and expression evaluation arguments temporaries saved more temporaries global pointer stack pointer frame pointer 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 Other SPARC Hitachi SH PowerPC Motorola 68K MIPS IA-32 ARM 700 600 500 400 300 200 100 0 1998 MMD 2405 Andi WRE 1999 2000 2001 2002 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: C code: MIPS instruction: Contoh 2: C code: MIPS instructions: MMD 2405 a = b + c add a, b, c a = b + c + d add a, b, c add a, a, d 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 sub $s1, $s2, $s3 lw $s1, 100($s2) $s1 = $s2 + $s3 $s1 = $s2 – $s3 $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; } MMD 2405 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 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 op op=0 01000 00000 rs rt rd shamtm $s1=17 $s2=18 $t0=8 =0 100000 funct =32 • Dapat menebak arti dari singkatan diatas? – Op: opcode, rs: 1st register source, rt: 2nd register source, rd: register destination, shamt: shift amount, funct: function code MMD 2405 Andi WRE 10 Tiga Format Instruksi MIPS • R-type: op 6bits rs rt 5bits 5bits rd shamtm funct 5bits 5bits 6bits • I-type: op 6bits rs 5bits rt 16 bit number 5bits 16 bits • J-type: op 6bits MMD 2405 26 bit address 26 bits 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 bne add Label: MMD 2405 (i==j) h = i + j; $s0, $s1, Label $s3, $s0, $s1 .... Andi WRE 13 Instruksi Kontrol MIPS (II) • Instruksi MIPS percabangan tanpa kondisional j label • Contoh: $s5 if (i!=j) h=i+j; else h=i-j; MMD 2405 beq $s4, $s5, Lab1 add $s3, $s4, $s5 j Lab2 Lab1: sub $s3, $s4, Lab2: Andi WRE ... 14 Instruksi MIPS yang Telah Dijelaskan • Instruksi add $s1,$s2,$s3 sub $s1,$s2,$s3 lw $s1,100($s2) sw $s1,100($s2) bne $s4,$s5,L beq $s4,$s5,L j Label MMD 2405 Arti $s1 = $s2 + $s3 $s1 = $s2 – $s3 $s1 = Memory[$s2+100] Memory[$s2+100] = $s1 Next instr. is at Label if $s4 ≠ $s5 Next instr. is at Label if $s4 = $s5 Next instr. is at Label 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 slti andi ori MMD 2405 $29, $8, $29, $29, $29, $18, $29, $29, 4 10 6 4 Andi WRE 16 Ringkasan dari Mode Addressing Contoh: 1. Immediate addressing op rs rt Immediate 2. Register addressing op rs rt rd ... funct Registers Register 1. Addi $29, $29, 4 1. Add $s1, $s2, $s3 1. Lw $s1, 32($s2) 1. Beq $s1, $s2, 25 1. J Label 3. Base addressing op rs rt Memory Address + Register Byte Halfword 4. PC-relative addressing op rs rt Memory Address PC + Word Word 5. Pseudodirect addressing op Address PC MMD 2405 Memory Word 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], 230 memory Memory[4], ..., words Memory[4294967292] MMD 2405 Accessed only by data transfer instructions. MIPS uses byte addresses, so sequential words differ by 4. Memory holds data structures, such as arrays, and spilled registers, such as those saved on procedure calls. Andi WRE 18 Ringkasan dari Instruksi Umum add MIPS assembly language Example Meaning add $s1, $s2, $s3 $s1 = $s2 + $s3 Three operands; data in registers subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 Three operands; data in registers $s1 = $s2 + 100 $s1 = Memory[$s2 + 100] Memory[$s2 + 100] = $s1 $s1 = Memory[$s2 + 100] Memory[$s2 + 100] = $s1 Used to add constants Category Arithmetic Instruction addi $s1, $s2, 100 lw $s1, 100($s2) load word sw $s1, 100($s2) store word lb $s1, 100($s2) Data transfer load byte sb $s1, 100($s2) store byte load upper immediate lui $s1, 100 add immediate Conditional branch Unconditional jump MMD 2405 $s1 = 100 * 2 16 Comments Word from memory to register Word from register to memory Byte from memory to register Byte from register to memory Loads constant in upper 16 bits branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to PC + 4 + 100 Equal test; PC-relative branch branch on not equal bne $s1, $s2, 25 if ($s1 != $s2) go to PC + 4 + 100 Not equal test; PC-relative set on less than slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; else $s1 = 0 Compare less than; for beq, bne set less than immediate slti if ($s2 < 100) $s1 = 1; else $s1 = 0 Compare less than constant jump j jr jal jump register jump and link $s1, $s2, 100 2500 $ra 2500 go to 10000 Jump to target address go to $ra For switch, procedure return $ra = PC + 4; go to 10000 For procedure call Andi WRE 19 MMD 2405 Andi WRE 20