440 likes | 613 Views
IKI10230 Pengantar Organisasi Komputer Kuliah no. 3: Machine Instructions. Sumber : 1. Hamacher. Computer Organization , ed-5. 2. Materi kuliah CS61C/2000 & CS152/1997, UCB. 26 Februari 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)
E N D
IKI10230Pengantar Organisasi KomputerKuliah no. 3: Machine Instructions Sumber:1. Hamacher. Computer Organization, ed-5.2. Materi kuliah CS61C/2000 & CS152/1997, UCB. 26 Februari 2003 Bobby Nazief (nazief@cs.ui.ac.id)Qonita Shahab (niet@cs.ui.ac.id) bahan kuliah: http://www.cs.ui.ac.id/kuliah/iki10230/
0 0 7 4 5 1 1 8 7 6 2 0 9 8 6 3 4 0 0 6 1 5 0 0 1 7 6 0 0 0 3 7 0 0 0 0 8 0 0 0 0 9 0 0 0 0 Review: The Stored Program Computer (2/2) • Memori menyimpan instruksi dan data sebagai bit. • Instruksi diambil oleh prosesor dari memori, diartikan, dan, dieksekusi (operands/data diambil, diolah, dan disimpan ke memori). • Contoh Instruksi 4-digit • Operasi: 0 => add, 1 => sub • Alamat hasil • Alamat op1 • Alamat op2 data instruksi 0: 07450=add (jenis instruksi), 7=addr. result, 4=addr op1, 5=addr op2 instruksi Apa yang berada di lokasi 9 setelah eksekusi instruksi 0, 1, 2?
Processor (active) Control (“brain”) Datapath (“brawn”) Review: Operasi pada Memori 0745: Add (4),(5),(7) ; M[7] M[4] + M[5] 0745 0 0 7 4 5 1 1 8 7 6 2 0 9 8 6 3 4 0 0 6 1 5 0 0 1 7 6 0 0 0 3 7 0 0 0 0 8 0 0 0 0 9 0 0 0 0 Instruction Fetch 0061 0017 Data (Operand) Read 0078 Data Store (Write)
Review: Set Instruksi (Bahasa Mesin) 0745: Add (4),(5),(7) ; [7] [4] + [5] • Bahasa Mesin kumpulan bit yang merepresentasikan Operasi & Operand • Bahasa Rakitan representasi dari Bahasa Mesin dalam bahasa (kumpulan huruf & angka) yang lebih mudah dimengerti oleh manusia mnemonic
Eksekusi Instruksi (1/2) • Instruksi dan data bersama-sama berada di memori: • Data diakses secara acak (tergantung alamat operand) • Instruksi umumnya dijalankan secara berurut (sekuensial) • Urutan ini menjamin logika alur program: terdapat urutan perintah ke mesin. • Instruksi disimpan secara berurut pada lokasi di memori • Eksekusi instruksi dilakukan mulai dari alamat terkecil • Bagaimana mengetahui “posisi” instruksi saat ini (berikutnya?) • Gunakan register khusus: Program Counter
0 Add 4,5,7 1 Sub 6,7,8 2 … 3 4 0 0 6 1 5 0 0 1 7 6 0 0 0 3 7 0 0 0 0 8 0 0 0 0 9 0 0 0 0 Eksekusi Instruksi (2/2) PC (Program Counter) 2 Program couter (PC) berisi alamat lokasiinstruksi yang akan dieksekusi padasiklus berikutnya. Setelah instruksi dieksekusi, makaPC akan “increment” dan menunjukpada instruksi berikutnya (next location)PC = PC + 1; dst .. dikenal dengan istilah: straight line sequencing
Decision… • Instruksi aritmatika, transfer data memberikan kemampuan kita untuk melakukan komputasi data • Sama seperti “kalkulator” • Untuk sebuah komputer, maka diperlukan kemampuan untuk memilih, “make decisions” .. • Analogi HLL: assembly language harus mendukung statement:if (condition == true) do “this”;else do “that”;exit; (false) i != j (true) i == j i == j? “that” “this” Exit
Branching • Dampak dari pengambilan keputusan yang bergantung pada suatu kondisi tertentu adalah terjadinya pencabangan (branching): • Instruksi tidak lagi diambil dari lokasi memori yang “berurut”, tetapi “meloncat” ke lokasi memori tertentu PC diisi dengan nilai baru, tidak di-increment • Manipulasi PC dengan memberikan alamat baru (tidak “berurut”) juga digunakan untuk mengubah alur eksekusi program tanpa bergantung pada kondisi tertentu (jump)
Alamat i i+1 i+2 i+n-1 i+n SUM Num1 Num2 NumN Move Num1,R0 Add Num2,R0 Alamat Add Num3,R0 LOOP SUM N Num1 Num2 NumN Move N,R1 Clear R0 Determine address of next number and add Next number to R0 Add NumN,R0 Mov R0,SUM Decrement R1 Branch>0 LOOP Move R0,SUM n Branching: Contoh R0 = ∑ Ni
Condition Codes • Informasi yang berkaitan dengan hasil operasi (terutama Aritmatika & Logika) disimpan dalam “Condition Code Flags” • Kumpulan “CC Flags” Register CC/Status • Masing-masing bit dari Register CC/Status merepresentasikan: • N (negative): perhitungan sebelumnya menghasilkan bilangan negatif • Z (zero): perhitungan sebelumnya menghasilkan bilangan 0 • V (overflow): perhitungan sebelumnya menyebabkan overflow • C (carry): perhitungan sebelumnya menghasilkan carry-out • Contoh Penggunaan: LOOP: . . . Decrement R1 ; R1 [R1] - 1 Branch>0 LOOP ; if (Z != 0) then LOOP
Modus Pengalamatan (1/2) JenisSyntaxEffective Address • Immediate: #Value ; Operand = Value Add #10,R1 ; R1 [R1] + 10 • Register: Ri ; EA = Ri Add R2,R1 ; R1 [R1] + [R2] • Absolute (Direct): LOC ; EA = LOC Add 100,R1 ; R1 [R1] + [100] • Indirect-Register: (Ri) ; EA = [Ri] Add (R2),R1 ; R1 [R1] + [[R2]] Indirect-Memory: (LOC) ; EA = [LOC] Add (100),R1 ; R1 [R1] + [[100]]
Modus Pengalamatan (2/2) • Index: X(R2) ; EA = [R2] + X Add 10(R2),R1 ; R1 [R1] + [[R2]+10] Base+Index: (R1,R2) ; EA = [R1] + [R2] Add (R1,R2),R3 ; R3 [R3] + [[R1]+[R2]] Base+Index+Offset: X(R1,R2) ; EA = [R1] + [R2] + X Add 10(R1,R2),R3 ; R3 [R3] + [[R1]+[R2]+10] • Relative: X(PC) ; EA = [PC] + X Beq 10 ; if (Z==1) then PC [PC]+10 • Autoincrement: (Ri)+ ; EA = [Ri], Increment Ri Add (R2)+,R1 ; R1 [R1] + [[R2]], ; R2 [R2] + d • Autodecrement: -(Ri) ; DecrementRi, EA = [Ri] Add -(R2),R1 ; R2 [R2] – d, ; R1 [R1] + [[R2]]
R1 88 Absolute (Direct) Mode • Absolute: Add 100,R1 ; R1 [R1] + [100] 100 200 Add 100,R1 88 …
100 150 LD 150,R1 88 99 R1 99 Move R1 150 R1 150 Immediate vs. Absolute Move 150,R1 ; R1 [EA] ; EA = 150 VS. Move #150,R1 ; R1 150 ; EA = none
100 200 Add (R2),R1 Operand Indirect Mode • Indirect-Register: Add (R2),R1 ; R1 [R1] + [[R2]] • Indirect-Memory: Add (100),R1 ; R1 [R1] + [[100]] pointer R2 200 100 200 Add (100),R1 200 Operand
R2 100 R2 100 R1 100 100 150 LD (R2),R1 88 99 R1 88 Register vs. Indirect-Register Move (R2),R1 ; R1 [EA] ; EA = [R2] VS. Move R2,R1 ; R1 R2 ; EA = addr. of R2
99 100 150 100 150 LD (150),R1 LD 150,R1 7 88 88 99 99 R1 R1 7 99 Move R1 150 R1 150 Immediate vs. Absolute vs. Indirect-Memory Move 150,R1 ; R1 [EA] ; EA = 150 Move (150),R1 ; R1 [EA] ; EA = [150] VS. Move #150,R1 ; R1 150 ; EA = none
Alamat LOOP SUM N Num1 Num2 NumN Move N,R1 Clear R0 Determine address of next number and add Next number to R0 Decrement R1 Branch>0 LOOP Move R0,SUM n Indirect Mode: Contoh Move N,R1 ; number of items Move #Num1,R2 ; points to 1st item Clear R0 LOOP Add (R2),R0 ; R0 stores the sum Add #4,R2 ; point to the next item Decrement R1 Branch>0 LOOP ; go to LOOP if not done Move R0,SUM ; done!
Alamat N LIST LIST+4 LIST+8 LIST+12 SUM1 SUM2 SUM3 n Student ID Test 1 Test 2 Test 3 Student ID Test 1 Test 2 Index Mode: Contoh Move #LIST,R0 Clear R1 Clear R2 Clear R3 Move N,R4 LOOP Add 4(R0),R1 Add 8(R0),R2 Add 12(R0),R3 Add #16,R0 Decrement R4 Branch>0 LOOP Move R1,SUM1 Move R2,SUM2 Move R3,Sum3
Relative Addressing Move #LIST,R0 Clear R1 Clear R2 Clear R3 Move N,R4 LOOP Add 4(R0),R1 Add 8(R0),R2 Add 12(R0),R3 Add #16,R0 Decrement R4 Branch>0 LOOP Move R1,SUM1 Move R2,SUM2 Move R3,Sum3 Hasil perakitan: Branch>0 –24 ; LOOP = PC - 24
Auto-{in|de}crement Mode Move N,R1 Move #Num1,R2 Clear R0 LOOP Add (R2)+,R0 ; R0 [R0] + [[R2]], ; R2 R2 + d ; tipe data: byte d = 1 ; tipe data: word d = 2 Decrement R1 ; Branch>0 LOOP ; Move R0,SUM …
Prosesor Bus DATAOUT DATAIN SOUT SIN Display Keyboard Organisasi Input/Output • I/O Device biasanya memiliki 2 register: • 1 register menyatakan kesiapan untuk menerima/mengirim data(I/O ready), sering disebut Status/Control Register SIN, SOUT • 1 register berisi data, sering disebut Data Register DATAIN, DATAOUT • Prosesor membaca isi Status Register terus-menerus, menunggu I/O device men-set Bit Ready di Status Register (0 1) • Prosesor kemudian menulis atau membaca data ke/dari Data Register • tulis/baca ini akan me-reset Bit Ready (1 0) di Status Register
Contoh Program Input/Output • Input: Read from keyboard Move #LOC,R0 ; Initialize memoryREAD: TestBit #3,INSTATUS ; Keyboard (IN) ready? Branch=0 READ ; Wait for key-in Move DATAIN,(R0) ; Read character • Output: Write to displayECHO: TestBit #3,OUTSTATUS; Display (OUT) ready?Branch=0 ECHO ; Wait for it Move (R0),DATAOUT; Write character Compare #CR,(R0)+ ; Is it CR? ; Meanwhile, stores it Branch≠0 READ ; No, get more Call Process ; Do something
Stacks • Lokasi memori yang pengaksesan datanya dibatasi dengan cara LIFO (Last In, First Out) data terakhir yang disimpan kedalam stack akan menjadi data pertama yang diperoleh pada saat stack diakses • Push: memasukkan data ke Stack • Pop: mengeluarkan data yang berada di top-of-stack (TOS) alamat TOS disimpan dalam register Stack Pointer (SP) 0 Push Top-of-Stack: SP Stack Bottom-of-Stack Pop 2k-1
Operasi pada Stacks Push NewItem: Subtract #4,SP Move NewItem,(SP) Pop Item: Move (SP),Item Add #4,SP SP 19 SPold -28 17 NewItem SPold 19 -28 Item SP 17 Bahaya Overflow NewItem 19 Item -28 Bahaya Underflow
SubRoutines • SubRoutine adalah sekumpulan instruksi yang mengerjakan suatu fungsi tertentu dan diakhiri dengan instruksi RETURN • SubRoutine biasanya dipanggil (CALL) oleh program lain dan setelah SubRoutine selesai mengerjakan fungsinya, kendali program dikembalikan (RETURN) ke program pemanggil LokasiSubroutine SUB 1000 instruksi_i . . . Return LokasiProgram Utama 200 Call SUB 201 instruksi_berikutnya 1000 PC 201 Link 201
Setelah ‘Pop R1’ Setelah ‘Call SUB’ Setelah ‘Return’ 202 SP 202 202 SP 99 99 99 SP … PC PC PC R1 R1 R1 202 99 57 203 1000 99 SubRoutine Call & Stacks LokasiSubroutine SUB 1000 instruksi_i . . . Add R1,R2 . . . Return LokasiProgram Utama • Push R1 • Call SUB • Pop R1 • instruksi_berikutnya
Passing Parameters via Registers • Via Registers: • Caller & Subroutine share the same registers • Passing by Value: n ([N]) via R1 • Passing by Reference: NUM1 via R2 Contoh: … int sum; int n = 112; int[ ] num1 = new int[n]; … sum = ListAdd(n, num1); LokasiSubroutine LISTADD LISTADD Clear R0 LOOP Add (R2)+,R0 Decrement R1 Branch>0 LOOP Return LokasiProgram Utama • Move N,R1 • Move #NUM1,R2 • Call LISTADD • Move RO,SUM …
R2 R1 R0 PC (prg. Utama) n NUM1 Passing Parameters via Stack Frame LokasiSubroutine LISTADD LISTADD Push R0 Push R1 Push R2 Move 16(SP),R1 Move 20(SP),R2 Clear R0 LOOP Add (R2)+,R0 Decrement R1 Branch>0 LOOP Move R0,20(SP) Pop R2 Pop R1 Pop R0 Return LokasiProgram Utama Push #NUM1 Push N Call LISTADD Move 4(SP),SUM Add #8,SP … SPSP+4SP+8SP+12SP+16SP+20 SPSP+4
Nested Subrouines Stacking of Subroutine Calls & Returns and Environments: A A: CALL B CALL C C: RET RET B: A B A B C A B A
Contoh Program: Vector Dot Product Dot Procut = ∑ Ai x Bi Move #AVEC,R1 ; R1 points to vector A. Move #BVEC,R2 ; R2 points to vector B. Move N,R3 ; R3 serves as a counter. Clear R0 ; R0 accumulates the product. LOOP: Move (R1)+,R4 ; Compute the product of Multiply (R2)+,R4 ; next components. Decrement R3 ; Decrement the counter. Branch>0 LOOP ; Loop again if not done. Move R0,DOTPROD ; Store the product in memory.
Contoh Program: Byte Sorting (Algoritme) for (j = n – 1; j > 0; j = j – 1) { for (k = j – 1; k >= 0; k = k – 1) { if (LIST[k] > LIST[j]) { TEMP = LIST[k]; LIST[k] = LIST[j]; LIST[j] = TEMP; } } } Kondisi Awal: Setelah Iterasi ke-1:
Contoh Program: Byte Sorting Move #LIST,R0 ; R0 points to the list LIST. Move N,R1 ; Initialize outer loop index. Subtract #1,R1 ; register R1 to j = n - 1. OUTER: Move R1,R2 ; Initialize inner loop index. Subtract #1,R2 ; register R2 to k = j – 1. MoveB (R0,R1),R3 ; Load LIST(j) into R3, ; which holds current max. INNER: CompareB R3,(R0,R2) ; If LIST(k) [R3], Branch≤0 NEXT ; do not exchange. MoveB (R0,R2),R4 ; Otherwise, exchange LIST(k) MoveB R3,(R0,R2) ; with LIST(j) and load MoveB R4,(R0,R1) ; new max. into R3. MoveB R4,R3 ; Reg. R4 servers as TEMP. NEXT: Decrement R2 ; Decrement inner loop index. Branch≥0 INNER Decrement R1 ; Decrement outer loop index. Branch>0 OUTER
Record 1 Record 1 Record 2 Record 2 Record k New Record Linked Lists Head Tail Link Address Menambahkan record baru:
Linked Lists: Alokasi Memori Key field (ID) Head Link field Data field Tail
Pengkodean Informasi: Instruksi (1/2) m bit n bit Informasi Lokasi Operand:dimana data masukan bersumber dan/ataudimana hasil operasi disimpan Kode Operasi Format Ukuran Instruksi: Variable: Fixed: Hybrid: … …
8 8 7 7 7 7 10 10 OP code OP code Source Source Destination Destination Other info Other info Memory address/Immediate operand Pengkodean Informasi: Instruksi (2/2) Format 1-word: Format 2-word: