Praktikum Organisasi Komputer (Bahasa Assembly)

Download Report

Transcript Praktikum Organisasi Komputer (Bahasa Assembly)

Praktikum Organisasi Komputer
(Bahasa Assembly)
Departemen Ilmu Komputer FMIPA IPB 2010
Abstraksi Komputer
• Terdapat beberapa tingkatan
mendeskripsikan komputer. Mulai dari
level user terus menurun hingga level
transistor.
• Semakin menurun tingkatan, struktur
internal (fisik) komputer semakin
jelas. Sebaliknya, semakin naik
tingkatan, struktur internal (fisik)
komputer semakin abstrak.
[email protected]
2
Bahasa Assembly
• Merupakan bahasa pemrograman dengan korespondensi satu-kesatu antara statemen-statemennya (instruksi-instruksinya) dengan
bahasa mesin yang dipahami oleh CPU.
• Bahasa Assembly sering disebut low-level language (bahasa
tingkat rendah) karena kedekatannya dengan bahasa mesin.
• Walaupun dekat dengan bahasa mesin, statemen dalam bahasa
Assembly masih bisa dipahami oleh manusia dan lebih mudah
diingat.
• Setiap bahasa Assembly dipengaruhi oleh instruction set pada CPU
dan arsitektur hardware.
• Sifat korespondensi satu-ke-satu antara bahasa Assembly
dengan bahasa mesin milik CPU menjadikan program yang ditulis
dalam bahasa assembly dapat berjalan lebih cepat dan efektif
dibandingkan dengan ditulis dengan bahasa tingkat tinggi.
• Assembler : Program untuk menkonversi source-code program ke
dalam bahasa mesin.
[email protected]
3
Contoh Program
•
C:
#include <stdio.h>
int main () {
printf(“A”);
return 0;
}
•
Assembly (dengan DEBUG):
mov
mov
int
int
•
•
ah, 02
dl, 41
21
20
Bahasa mesin: ???
Bagaimana perbandingan ukuran program dan kemudahan?
[email protected]
4
System Bus Model
•
•
Komputer terdiri atas: CPU (ALU, Register dan Control), memori, dan unit
input/output.
Komunikasi antarkomponen dilakukan melalui ‘jalur’ yang digunakan
bersama. Jalur ini dikenal sebagai system bus, yang terdiri atas tiga
bagian: data bus, address bus, dan control bus.
[email protected]
5
Mengapa Belajar Bahasa
Assembly ?
• Mempelajari arsitektur komputer dan sistem operasi
• Memahami bagaimana komputer membuat kode mesin
• Menangani hal-hal yang sulit ditangani dengan
menggunakan bahasa pemrograman tingkat tinggi
• Keluar dari batasan-batasan yang ditetapkan dalam
bahasa pemrograman tingkat tinggi
[email protected]
6
Aplikasi Bahasa Assembly
• Biasanya bahasa Assembly ditulis sebagai
modul, kemudian dipanggil dari bahasa
pemrograman tingkat tinggi (Pascal, C, C++, dll).
– Sebagai contoh, kita membangun aplikasi dalam
bahasa Pascal atau C++ kemudian kita ingin
mengetahui disk free space, membuat subdirektori,
atau berhubungan dengan alat-alat I/O secara
langsung.
• Utilities
• Game trainer
[email protected]
7
Tugas CPU
•
Tugas dasar dari CPU adalah :
1. Menemukan dan mengambil instruksi
berikutnya.
2. Mengeksekusi instruksi tersebut :
•
•
•
•
Mengambil data dari memori/register
Menyimpan data ke dalam memori/register
Melakukan perhitungan dan perbandingan
Mengubah nilai Instruction Pointer (mis.
branching)
[email protected]
8
Arsitektur Mikroprosesor (CPU)
• Arsitektur umum Mikroprosesor
Data Bus
Data Register
Address Registers
Output Lines
Control
Unit
Address Bus
Arithmetic
Logic
Unit
Flags
Register
Output Lines
[email protected]
9
Arsitektur Mikroprosesor (CPU) (lanj.)
•
Arithmetic and Logic Unit (ALU)
– Menangani perhitungan Aritmatika, logika, dan operasi pergeseran (shifting).
•
Control Unit (CU)
– Mengambil data dan instruksi-instruksi (fetch).
– Melakukan proses dekode alamat.
•
Register
– Tempat penyimpanan berkecepatan tinggi pada CPU yang langsung terhubung
ke CU dan ALU.
– Merupakan “Special work areas” pada CPU yang dirancang untuk dapat bekerja
dengan kecepatan tinggi.
– Instruksi yang hanya melibatkan register akan berjalan lebih cepat dibandingkan
dengan instruksi yang melibatkan memori ataupun tempat penyimpanan lain.
– Hampir semua instruksi pada prosesor Intel membutuhkan paling sedikit satu
register.
•
Data Bus dan Address Bus
– ‘Kawat-kawat paralel’ (parallel wires) yang digunakan untuk transmisi data
antarbagian pada CPU.
[email protected]
10
Register
1. Data (General Purpose) Registers
– Terdiri atas 4 buah register : AX,BX,CX,DX
– Bisa diakses baik 32 bit (pada prosessor
80386-Pentium 4), 16 bit (pada prosessor
8088-80286) ataupun 8 bit
– Digunakan untuk perhitungan aritmetika
dan data movement
[email protected]
11
Register (Lanj.)
1. Data (General Purpose) Registers
Register
(16 Bit)
AX
BX
8 Bit
Terendah
AL
BL
8 Bit
Teratas
Keterangan
AH
• (Accumulator), sering digunakan untuk
operasi aritmatika dan data movement.
• Operasi-operasi lain terkadang lebih
efisien jika menggunakan register ini.
BH
• (Base), digunakan juga dalam operasi
aritmatika dan data movement.
• Mampu menyimpan alamat memori
yang menunjuk ke suatu variabel
(kemampuan pengalamatan). Registerregister lain yang memiliki kemampuan
pengalamatan adalah Index Registers
(SI, DI dan BP).
[email protected]
12
Register (Lanj.)
1. Data (General Purpose) Registers
Register
(16 Bit)
CX
DX
8 Bit
Terendah
CL
DL
8 Bit
Teratas
Keterangan
CH
• (Counter), digunakan sebagai counter
dalam instruksi perulangan (looping).
Setiap terjadi perulangan secara
otomatis register CX nilainya akan
dikurangi satu dan perulangan akan
berhenti ketika nilai register CX nol.
DH
•(Data), digunakan untuk menyimpan
alamat port I/O (8 bit atau 16 bit)
•Selain itu, memiliki peran khusus
dalam operasi perkalian dan
pembagian. Sebagai contoh, dalam
perkalian DX akan menyimpan 16 bit
nilai teratas dari hasil perkalian.
[email protected]
13
Register (Lanj.)
2. Segment Registers
–
–
–
–
Digunakan untuk menyimpan base locations
(lokasi awal) untuk instruksi-instruksi program, data,
dan stack.
Seluruh referensi ke memori pada IBM-PC
melibatkan sebuah segment register sebagai base
location.
Mengenai segment dan offset akan dibahas pada
bahasan pengalamatan memori.
Terdapat 4 jenis Segment Registers pada IBM-PC
dan kompatibelnya (keluarga Intel) : CS (Code
Segment), DS (Data Segment), SS (Stack
Segment), ES (Extra Segment)
[email protected]
14
Register (Lanj.)
2. Segment Registers
Register
(16 Bit)
Keterangan
CS
• (Code Segment), menyimpan base location dari seluruh instruksi (kode) dari sebuah
program
• Mendefiniskan alamat awal (starting address) dari bagian memori yang menyimpan
kode program (instruksi)
DS
• (Data Segment), merupakan default base location untuk variabel-variabel. CPU
menghitung lokasi memori menggunakan nilai dari register DS
SS
• (Stack Segment), berisi base location untuk stack.
• Stack entry point ditentukan oleh register SS dan SP (Stack Pointer  Special
Registers). Register BP (Base Pointer  Index Registers) juga dapat digunakan
bersama register SS.
ES
• (Extra Segment), base location tambahan untuk variabel-variabel memori.
• Digunakan oleh beberapa instruksi terkait dengan string untuk menyimpan data
tujuan
[email protected]
15
Register (Lanj.)
3. Index Registers
– Berisi offset dari variabel-variabel.
– Offset adalah ‘jarak’ suatu variabel atau
instruksi dari base segmentnya.
– Register Index akan mempercepat
pemrosesan string, array, dan struktur data
lainnya yang terdiri atas banyak elemen.
– Terdapat 3 jenis Register Index, yaitu : SI
(Source Index), DI (Data Index), dan BP
(Base Pointer).
[email protected]
16
Register (Lanj.)
3. Index Registers
Register
(16 Bit)
Keterangan
SI
• (Source Index), menyimpan alamat-alamat source dari data string dalam
instruksi-instruksi string.
• Biasanya berisi offset dari register DS.
DI
• (Destination Index), menyimpan alamat-alamat destination dari data string dalam
instruksi-instruksi string.
• Biasanya berisi offset dari register ES, tetapi bisa juga digunakan untuk
mengalamati variabel.
BP
• (Base Pointer), Menunjuk ke sebuah lokasi memori (berlaku untuk seluruh jenis
mikroprosesor) untuk melakukan proses transfer data pada memori.
[email protected]
17
Register (Lanj.)
4. Special Registers
– Merupakan register-register yang tidak
masuk ke kelompok-kelompok register
sebelumnya.
– Ada 2 Special Registers : IP (Instruction
Register) dan SP(Stack Pointer).
[email protected]
18
Register (Lanj.)
4. Special Registers
Register
(16 Bit)
Keterangan
IP
• (Instruction Pointer), berisi offset dari instruksi berikutnya yang akan
dieksekusi.
• Register CS dan IP akan membentuk alamat memori lengkap dari instruksi
berikutnya yang akan dieksekusi.
SP
• (Stack Pointer), berisi offset/jarak dari awal stack segment sampai ke
puncak stack.
• Register SS dan SP akan membentuk alamat memori lengkap dari puncak
stack.
[email protected]
19
Register (Lanj.)
5. Flags Register
– Digunakan untuk menunjukkan status dari CPU dan
mengendalikan operasi pada CPU.
– Panjang Rgister Flag adalah 16 bit pada prosesor
8088-80286 (FLAG) dan 32 bit pada prosesor
80386-Pentium 4 (EFLAG).
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
x x x x O D I T S Z x A x P x C
[email protected]
20
Register (Lanj.)
5. Flags Register
Bit
O
D
Arti
Keterangan
Overflow
• Akan diset ketika hasil operasi aritmatika bilangan
bertanda terlalu besar sehingga tidak cukup untuk
disimpan di area tujuan.
• Bernilai 1 jika terjadi overflow dan 0 jika tidak
terjadi overflow.
Direction
• Untuk memilih mode increment atau decrement
untuk register DI dan/atau SI dalam instruksi string.
• Jika D=0 maka register Di dan SI akan secara
otomatis dinaikkan (incremented).
• Flag D diset dengan perintah STD (set direction)
dan direset dengan perintah CLD (clear direction).
[email protected]
21
Register (Lanj.)
5. Flags Register
Bit
I
T
Arti
Interrupt
Trap
Keterangan
• Mengendalikan operasi dari pin input INTR
(interrupt request).
• I=1 maka INTR dihidupkan. I=0 maka INTR
dimatikan.
• Dikendalikan dengan peritah STI (set I flag) dan
CLI (clear I flag).
•Memungkinkan trapping melalui fitur on-chip
debugging.
•T=1 maka mikroprosesor akan menginterupsi alur
program pada kondisi yang diindikasikan oleh
debug registersdan control registers. T=0 fitur untuk
trapping (debugging) dimatikan.
[email protected]
22
Register (Lanj.)
5. Flags Register
Bit
S
Z
A
Arti
Keterangan
Sign
• Menyimpan tanda bilangan hasil instruksi
aritmatika atau logika.
• S=1 maka bagian MSD dari bit diset menjadi 1
yang berarti negatif. S=0 MSD di-clear menjadi 0
yang berarti positif.
Zero
• Menunjukkan bahwa hasil operasi aritmatika
bernilai nol.
• Z=1 maka hasil operasi bernilai nol. Z=0 berarti
hasil operasi tidak bernilai nol.
Auxiliary Carry
• Menyimpan nilai carry (half carry) pada
penjumlahan atau nilai borrow pada pengurangan
antara posisi bit ke-3 dan ke-4 dari hasil.
[email protected]
23
Register (Lanj.)
5. Flags Register
Bit
Arti
Keterangan
Parity
• Bernilai 0 untuk paritas ganjil (odd parity) dan
bernilai 1 untuk paritas genap (even parity).
• Parity merupakan jumlah bit ‘1’ di dalam sebuah
bilangan yang dinyatakan genap atau ganjil.
• Digunakan untuk verifikasi inegritas memori dan
software komunikasi
C
Carry
• Menyimpan nilai carry pada penjumlahan dan nilai
borrow pada pengurangan.
• Biasanya juga digunakan untuk mengindikasikan
error condition yang terjadi pada program atau
prosedur
x
Undifined
Undifined
P
-
[email protected]
24
Register (Intel 8086-80286)
General Purpose
8 Bit
8 Bit
AX
AH
8 Bit
AL
8 Bit
BX
BH
8 Bit
BL
8 Bit
CX
CH
8 Bit
CL
8 Bit
DX
DH
DL
Index
BP
SP
SI
DI
Status and Control
Flags
IP
16 Bit
16 Bit
Segment
CS
SS
DS
ES
16 Bit
[email protected]
25
Register (Intel 80386-Pentium 4)
General Purpose
Segment
EAX (32 Bit)
AH
CS
SS
AL
AX (16 Bit)
EBX (32 Bit)
BH
Status and Control
DS
BL
ES
EIP
FS
EFLAGS
IP
FLAGS
GS
32 Bit
BX (16 Bit)
16 Bit
ECX (32 Bit)
CH
CL
CX (16 Bit)
EDX (32 Bit)
DH
DL
DX (16 Bit)
Index
ESP
SP
EBP
BP
EDI
DI
ESI
SI
Ada pada 8088-80286
Ada pada 80386-Pentium 4
32 Bit
[email protected]
26
Arsitektur Komputer
• Bandingkan register-register 8086 dan
80386
– AH, AL, AX, EAX
– dst
[email protected]
27