Interaksi µP dengan memori Dari bagan organisasi komputer di atas, terlihat bahwa uP dapat : 1. mengambil (membaca) informasi dari memori. 2. menyimpan (menulis) informasi ke memori Seperti halnya manusia yg ingin menulis pada suatu buku dan membaca suatu informasi dari buku, pertama-tama manusia harus dapat menentukan dimana lokasi informasi tersebut berada (i.e. nomor halaman, alinea, baris, etc.). Baru setelah itu dapat menuliskan informasinya atau membaca informasinya. Hal yg sama juga berlaku di uP, dimana : sebelum uP dapat membaca data dari memori, pertama-tama uP harus menyediakan informasi mengenai dimana data tersebut berada. Sebelum uP dapat menuliskan suatu data ke memori, pertama-tama uP harus menyediakan informasi mengenai dimana data tersebut akan ditulis. Informasi mengenai ‘dimana data tersebut’ disebut dengan Alamat. Proses pembacaan data oleh uP dari memori (arah data : uP ! memori)
alamat
8088
read
memori
data
Urutan kerja : 1. µP8088 mempersiapkan alamat (lokasi) dari data yg akan dibaca 2. µP8088 mengirimkan sinyal read ke memori 3. setelah menerima sinyal read, memori mencari data yg diinginkan µP8088 sesuai dgn alamat yg diberikan 4. data yg sesuai dikirimkan oleh memori ke µP8088
Proses penulisan data oleh uP ke memori (arah data : uP " memori)
alamat
8088
data
memori
write
Urutan kerja : 1. µP8088 mempersiapkan alamat (lokasi) dimana data akan ditulis (diletakkan) 2. µP8088 mempersiapkan data yg akan ditulis 3. µP8088 mengirimkan sinyal write ke memori 4. setelah menerima sinyal write, memori membaca data yg diberikan oleh µP8088 dan meletakkannya sesuai dgn alamat yg ditentukan Pada proses penulisan dan pembacaan data, uP8088 menggunakan 3 (tiga) buah saluran khusus untuk mengirimkan (1) alamat, (2) data, dan (3) kontrol baca/tulis. Ketiga saluran ini disebut sebagai (1) bus alamat, (2) bus data, dan (3) bus kontrol.
8086/8088 Instruction Set Summary DATA TRANSFER MOV – Move
1. 2. 3. 4.
Reg/Mem to/from Reg Immediate to Register Memory to Accumulator Accumulator to Memory
1000 10dw 1011 wreg 1010 000w 1010 001w
modregr/m data addr-low addr-low
data (w=1) addr-high addr-high
contoh 1: MOV AL,BL MOV AX,BX MOV [BX],AL MOV [BX],AX MOV AL,[BX] MOV AX,[BX]
= 88D8 d=0, = 89D8 d=0, = 8807 d=0, = 8907 d=0, = 8A07 d=1, = 8B07 d=1,
(10001000 11011000) w=0, mod=11, reg=011(BL), (10001001 11011000) w=1, mod=11, reg=011(BX), (10001000 00000111) w=0, mod=00, reg=000(AL), (10001001 00000111) w=1, mod=00, reg=000(AX), (10001010 00000111) w=0, mod=00, reg=000(AL), (10001011 00000111) w=1, mod=00, reg=000(AX),
r/m=000(AL) r/m=000(AX) r/m=111([BX]) r/m=111([BX]) r/m=111([BX]) r/m=111([BX])
contoh 2: MOV AX,1234 MOV AL,78
contoh 3: MOV AX,[1234]
contoh 4: MOV [1234],AX
= B83412 (10111000 34H 12H) w=1, reg=000(AX), Low-data=34H, Hi-data=12H = B078 (10110000 78H ) w=0, reg=000(AL), data=78H
= A13412 (10100001 34H 12H)) w=1,addr-low=34H,addr-high=12H
= A33412 (10100011 34H 12H)) w=1,addr-low=34H,addr-high=12H
PUSH - Push
1. 2.
Register Segment Register
contoh 1: PUSH AX contoh 2: PUSH CS
0101 0reg 000reg110 = 50 = 0E
(0101 0000): reg=000(AX) (0000 1110): reg=01(CS)
POP - Pop
1. 2.
Register Segment Register
contoh 1: POP AX contoh 2: POP CS
0101 1reg 000reg111 = 58 = 0F
(0101 1000): reg=000(AX) (0000 1111): reg=01(CS)
ARITHMETIC ADD - Add
1. 2. 3.
Reg/Mem with Register Immediate to Reg/Mem Immediate to AX/AL
0000 00dw 1000 00sw 0000 010w
modregr/m mod000r/m data
data data (w=1)
data(sw=01
contoh 1: ADD BX,CX
= 01CB
ADD BL,CL
= 00CB
(00000001 d=0, w=1, (00000000 d=0, w=0,
11001011) mod=11, reg=001(CX), r/m=011(BX) 11001011) mod=11, reg=001(CL), r/m=011(BL)
contoh 2: ADD BX,1234
= 81C33412 (10000001 11000011 34H 12H) sw=01, mod=11, r/m=011
contoh 3: ADD AX,1234
= 053412
(00000101 34H 12H) w=1, Low-data=34H, Hi-data=12H
SUB - Subtract
1. 2. 3.
Reg/Memory and Reg Immediate from Reg/Mem Immediate from AX/AL
0010 10dw 1000 00sw 0010 110w
modregr/m mod101r/m data
data data (w=1)
contoh 1: SUB BX,CX
= 29CB
SUB BL,CL
= 28CB
(00101001 d=0, w=1, (00101000 d=0, w=0,
11001011) mod=11, reg=001(CX), r/m=011(BX) 11001011) mod=11, reg=001(CL), r/m=011(BL)
contoh 2: SUB BX,1234
= 81EB3412 (10000001 11101011 34H 12H) sw=01, mod=11, r/m=011
contoh 3: SUB AX,1234
= 2D3412 (00101101 34H 12H) w=1, Low-data=34H, Hi-data=12H
data(sw=01
LOGIC NOT - Invert SHL = Shift Logical Left SHR = Shift Logical Right
1111 011w 1101 00vw 1101 00vw
mod01 0r/m mod10 0r/m mod10 1r/m
0010 00dw 1000 000w 0010 010w
modregr/m mod100r/m data
data data (w=1)
data (w=1)
0000 10dw 1000 000w 0000 110w
modregr/m mod001r/m data
data data (w=1)
data (w=1)
0011 00dw 1000 000w 0011 010w
modregr/m mod110r/m data
data data (w=1)
data (w=1)
JMP - Unconditional Jump Direct w/in Segment Short
1110 1011
disp
JE/JZ - Jump on Equal/Zero
0111 0100
disp
AND - And
1. 2. 3.
Reg/Memory and Reg Immediate to Reg/Mem Immediate to AX/AL
OR - Or
1. 2. 3.
Reg/Memory and Reg Immediate to Reg/Mem Immediate to AX/AL
XOR - Exclusive Or
1. 2. 3.
Reg/Memory and Reg Immediate to Reg/Mem Immediate to AX/AL
CONTROL TRANSFER
contoh: -a 100 0D9C:0100 0D9C:0102 0D9C:0104 0D9C:0106 0D9C:0108 -u 100 0D9C:0100 0D9C:0102 0D9C:0104 0D9C:0106
jmp 010f jmp 0100 jz 010f jz 0100 EB0D EBFC 7409 74F8
JMP JMP JZ JZ
010F 0100 010F 0100
jadi: JMP JMP JZ JZ
010F 0100 010F 0100
= = = =
EB0D EBFC 7409 74F8
(11101011 (11101011 (01110100 (01110100
00001101):jump 11111100):jump 00001011):jump 11111000):jump
(angka minus menggunakan format 2’s complement)
0D(=+13) FC(=-4) 09(=+9) FB(=-8)
bytes bytes bytes bytes
forward forward forward forward
(IP=IP+13) (IP=IP-4) (IP=IP+9) (IP=IP-8)
NOTES: d = direction: if d=1 then ‘to’ reg (Reg ! Mem) if d=0 then ‘from’ reg (Reg ! Reg, Mem ! Reg) w = word: if w=1 then word operation (1 word = 2 bytes) if w=0 then byte operation mod = mode: if mod=11 then r/m is treated as a REG field if mod=00 then DISP=0, disp-low and disp-high are absent disp = displacement: show how far should the CPU jump from recent point (reg. IP) r/m: if r/m = 000 then EA = (BX) + (SI) + DISP if r/m = 001 then EA = (BX) + (DI) + DISP if r/m = 010 then EA = (BP) + (SI) + DISP if r/m = 011 then EA = (BP) + (DI) + DISP if r/m = 100 then EA = (SI) + DISP if r/m = 101 then EA = (DI) + DISP if r/m = 110 then EA = (BP) + DISP* if r/m = 111 then EA = (BX) + DISP if s:w=01 then 16 bits of immediate data form the operand if s:w=11 then an immediate data byte is sign extended to form the 16-bit operand REG is assigned according to the following table: 16-Bit (w=1) 000 AX 001 CX 010 DX 011 BX 100 SP 101 BP 110 SI 111 DI
8-Bit (w=0) 000 AL 001 CL 010 DL 011 BL 100 AH 101 CH 110 DH 111 BH
Segment 00 ES 01 CS 10 SS 11 DS
Instruksi pada uP selalu memiliki 2 bagian yaitu operation code (op-code) dan data. Instruksi 1 byte :
op-code
Instruksi 2 byte :
op-code
data
Instruksi 3 byte :
op-code
data
data
Instruksi 3 byte :
op-code
data
data
-a 0100 0EA0:0100 0EA0:0103 0EA0:0105 -u 0100 0EA0:0100 0EA0:0103 0EA0:0105
MOV MOV PUSH
mov ax,1234 mov bl,f7 push ax B83412 B3F7 50
AX,1234 BL,F7 AX
Yang tercetak tebal merupakan op-code nya dimana : B8 berarti MOV AX, ?? ?? B3 berarti MOV BL, ??
data
Mikroprosesor 8088 Mikroprosesor Intel 8088 adalah multipurpose mikroprosesor yang diimplementasikan dengan teknologi N-channel, depletion load, silicon gate (HMOS-II). Dipasarkan dengan format 40-pin CERDIP (Ceramic Dual Inline Package). Mikroprosesor ini termasuk keluarga mikroprosesor 8 bit dan 16 bit. Mikroprosesor Intel 8088 kompatible secara langsung dengan software yang didesain untuk mikroprosesor 8086 dan 8080/8085, dan secara hardware juga kompatible dengan mikroprosesor 8080/8085. GND A14 A13 A12 A11 A10 A9 A8 D7 / A7 D6 / A6 D5 / A5 D4 / A4 D3 / A3 D2 / A2 D1 / A1 D0 / A0
Keterangan GND Vcc D0 – D7
clock GND
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
8088
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
Vcc A15 A16 A17 A18 A19 read write
ALE
reset
: ground (0 volt) : +5 volt : Data bus (8 informasi biner = 1 byte) ada 28 = 256 kombinasi data (00H – FFH) ! untuk kode ASCII : Address bus (20 informasi biner) A0 – A19 ada 220 = 1048576 kombinasi harga, berarti ada 1048576 lokasi memori yg dpt dialamati read : sinyal kontrol untuk membaca write : sinyal kontrol untuk menulis clock : frekuensi kerja µP8088 (5 MHz atau 8 MHz) reset : menginisialisasi kembali semua isi register ALE : Address Latch Enable, menandakan bahwa pin 9 s.d pin 16 menyimpan informasi alamat
Kemampuan Bus 1. Lebar dari bus data sering digunakan untuk mengklasifikasikan uP. Contoh: µP8088 adalah microprocessor 8-bit karena jumlah pin untuk bus data sebanyak 8 buah (D0–D1–D2–D3–D4–D5–D6–D7 : pin no. 9 – 16). 2. Lebar dari bus alamat menyatakan jumlah maksimum blok memory yg dapat diakses oleh mikroprosesor. a. µP dengan 1 buah alamat (A) hanya dapat mengakses 2 blok memori yaitu pada saat A=0 dan A=1 blok 0
dapat diakses jika A = 0
blok 1
dapat diakses jika A = 1
uP b.
uP dengan 2 buah alamat (A0 dan A1) hanya dapat mengakses 4 blok memori yaitu pada saat A0 uP
Jumlah jalur alamat 1 2 16 20
A1
blok 00
dapat diakses jika A0 = 0 dan A1 = 0
blok 01 blok 10
dapat diakses jika A0 = 1 dan A1 = 0 dapat diakses jika A0 = 0 dan A1 = 1
blok 11
dapat diakses jika A0 = 1 dan A1 = 1
total blok memori 21=2 22=4 216=65536 220=1048576
kapasitas memori (1 blok memori = 1 byte) 2 byte 4 byte 65536 byte = 64 Kbyte 1048576 byte = 1024 Kbyte = 1 Mbyte
keterangan
i8080, Z80 i8088
Contoh: uP 8088 memiliki bus alamat dengan lebar 20 bit sehingga uP 8088 dapat mengakses memori berkapasitas maksimum 220=1048576 blok memori atau 1 Mb. Sedangkan bus kontrol memiliki lebar 1 saluran untuk setiap fungsi. Register Pada bagan organisasi komputer, memori diletakkan terpisah dari mikroprosesor. Jika bagan tersebut diimplementasikan, uP harus mengakses memori setiap saat. Dan karena kecepatan memori jauh lebih lambat dari uP (sebagai contoh uP Pentium IV telah mencapai kecepatan 2 GHz sedangkan DDRAM maksimum hanya memiliki kecepatan 0.8 GHz), maka kecepatan kerja uP akan sangat dipengaruhi oleh kecepatan memori. Untuk mempercepat pemrosesan data di dalam mikroprosesor, selain CU dan ALU, mikroprosesor juga akan membutuhkan memori yg memiliki kecepatan sama dengan uP. Untuk melakukannya, memori tersebut harus diimplementasikan didalam mikroprosesor. Memori ini disebut dengan register.
Jenis register berdasarkan informasi yg disimpannya dapat dibagi menjadi 4. 1. Register Data digunakan untuk menyimpan data yg diperlukan untuk suatu operasi Terdiri dari: AX (Accumulator), BX (Base), CX (Counter), DX (Data) -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0100 NV UP EI PL NZ NA PO NC
2. Register Alamat karena jumlah register data sangat terbatas, maka sebagian besar data tetap diletakkan di memori. Untuk dapat mengaksesnya, uP membutuhkan alamat dari data tersebut yg disimpan oleh register alamat. Terdiri dari: SP (Stack Pointer), BP (Base Pointer), SI (Source Index), DI (Destination Index), DS (Data Segment), ES (Extra Segment), SS (Stack Segment), CS (Code Segment), IP (Instruction Pointer) dan BX (Base) -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0100 NV UP EI PL NZ NA PO NC
3. Register Status (Flags) digunakan untuk menyimpan status dari hasil operasi yg menggunakan ALU. Terdiri dari: OF (Overflow Flag), DF, IF, TF, SF (Sign Flag), ZF (Zero Flag), AF, PF, CF (Carry Flag) Flag :
-
-
-
-
OF
DF
IF
TF
SF
ZF
-
AF
-
PF
-
-r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0100 NV UP EI PL NZ NA PO NC
4. Register Instruksi digunakan untuk menyimpan instruksi yang sedang dikerjakan Catatan: Register BX selain dapat digunakan sebagai register data dapat juga digunakan sebagai register alamat Lebar semua register uP8088 adalah 16 bit = 2 byte. Sehingga setiap register dapat berharga 0000H s.d. FFFFH atau 216 = 65536 kombinasi harga. Setiap register akan diakses (dibaca/ditulis) dalam format 16 bit tersebut, kecuali register data dapat diakses dalam format 8 bit = 1 byte (AH, AL, BH, BL, CH, CL, DH, DL). 16 bit 8 bit AH
AL
CF
BH CH DH
BL CL DL
Struktur Memori pada µP 8088 Memori pada sistem µP 8088 memiliki dua ciri : 1. diakses dgn alamat selebar 16 bit (00000H s.d. FFFFFH) atau 2 byte 2. data yg diakses untuk setiap alamat adalah 8 bit atau 1 byte contoh : Alamat (dlm Hexa)
data yg disimpan pada alamat tsb (dlm Biner) (dlm Hexa)
FFFF !
1
0
0
0
1
0
1
0
= 8A
8000 !
1
1
1
0
1
0
0
0
= E8
0002 ! 0001 ! 0000 !
1 0 1
0 0 1
1 0 1
1 0 1
1 1 1
1 1 1
0 0 1
0 1 0
= BC = 0D = FE
Alamat dari suatu cell memori direpresentasikan dalam format 2 byte (0000H – FFFFH) yg disimpan dalam register alamat (yg lebarnya juga 2 byte). Karena kapasitas register alamat adalah 2 byte, maka jumlah cell memori yg dapat disimpan alamatnya adalah 216 = 65536 cell memori. Dan karena suatu cell memori menyimpan data 1 byte (00H – FFH) maka suatu register alamat µP 8088 dapat mengakses (membaca/menulis) memori berkapasitas 65536 byte = 64 KByte. Alamat 0D9C:0100 0D9C:0110 0D9C:0120 0D9C:0130 0D9C:0140 0D9C:0150 0D9C:0160 0D9C:0170
data (Hexa) 0E C9 C8 AE 8B 00 89 F8
E8 C3 08 FC 46 00 46 FF
DC 8B 00 89 F8 C7 FA 5E
FC 46 00 46 FF 46 89 FA
89 F8 C7 FA 5E FE 56 89
46 FF 46 89 FA 00 FC 46
FA 5E FE 56 89 00 0B FE
89-56 FA-89 00-00 FC-0B 46-FE C7-46 D0-75 8B-46
FC 46 C7 D0 8B F8 04 FE
data (ASCII) 0B FE 46 75 46 41 33 C9
D0 8B F8 04 FE 00 C0 C3
75 34 40 33 C9 0E C9 C8
04 00 00 C0 C3 E8 C3 08
33 8B 0E C9 C8 80 8B 00
C0 0D E8 C3 08 FC 46 00
.....F..V...u.3. ...F..^..F..4... .....F....F.@... ...F..V...u.3... .F..^..F..F..... ...F....F.A..... .F..V...u.3....F ..^..F..F.......
Dari hasil ‘dumping’ memori dgn Debug, memori ditampilkan dalam format 128 byte. Dapat dilihat bahwa pada alamat 0000 isi datanya 0E, dan pada alamat 0001 isi datanya E8, dan pada alamat 0002 isi datanya DC, dst.
Segmentasi Mikroprosesor harus dapat mengakses semua cell memori dari alamat terendah sampai alamat tertinggi. Alamat tersebut akan disimpan didalam register alamat. Secara fisik, uP8088 memiliki 20 buah jalur alamat (A0 – A19) untuk menyediakan informasi alamat selebar 20 bit dimana informasi alamat tersebut dapat berharga 00000H s.d FFFFFH. Ke20 bit tersebut digunakan untuk mengakses memori dgn kapasitas 220 = 1048576 cell. Namun masalah timbul pada lebar register alamat. µP 8088 memiliki register alamat dengan lebar hanya 16 bit dari 20 yang dibutuhkan untuk mengakses semua memori. Ini berarti jika suatu register alamat menyimpan alamat memori, dia hanya dapat digunakan untuk mengakses alamat 0000 sampai FFFF atau 64 KByte. Untuk mengatasi kekurangan ini, Intel menggunakan 2 register untuk pengalamatan. Satu register akan menyimpan alamat segment (suatu area memori seluas 64 Kbyte), dan Satu register akan menyimpan alamat offset (menentukan byte yang mana di dalam segment tersebut yg akan diakses). Contoh: Segment address Offset address Physical Address
DS = BX = DS+BX FFFFF FFFFE FFFFD
4 bit 0 0 FA 3B 43
4 bit F 0 F
4 bit 8 0 8
4 bit C 0 C
4 bit 5 5
Offset FFFF Offset FFFE Offset FFFD
Segment F000
64 F0001 F0000
20 15
Offset 0001 Offset 0000
1FFFF 1FFFE
55 CD
Offset FFFF Offset FFFE 1024
Segment 1000
64 10002 10001 10000 0FFFF 0FFFE
9A 2B 53 06 7A
Offset Offset Offset Offset Offset
0002 0001 0000 FFFF FFFE
Segment 0000
64 00002
80
Offset 0002
00001 DE Offset 0001 00000 1F Offset 0000 µP8088 menyediakan 4 segment untuk menjalankan suatu program. Segment untuk Program (Code/Instruksi) ! CS:IP CS (Code Segment) menyimpan alamat segment (64 Kb of memory) dari program. IP (Instruction Pointer) menyimpan alamat offset dari program yang akan menentukan instruksi mana di dalam 64 Kb tadi yang akan dieksekusi Segment untuk Data ! DS:BX DS (Data Segment) menyimpan alamat segment (64 Kb of memory) dari data. BX (Base Register) menyimpan alamat offset dari data yang akan menentukan data mana di dalam 64 Kb tadi yang akan diambil Segment untuk Stack ! SS:SP SS (Stack Segment) menyimpan alamat segment (64 Kb of memory) dari stack. SP (Stack Pointer) menyimpan alamat offset dari top of the stack yang akan menentukan tumpukan (stack) mana di dalam 64 Kb tadi yang akan diambil (POP) Extra Segment ES (Extra Segment) menyimpan alamat segment (64 Kb of memory) yg digunakan untuk tambahan lokasi penyimpanan data jika segment Data tidak mencukupi. Suatu program dapat memakai 4 segment yg berbeda-beda (format program *.EXE) atau hanya menggunakan sebuah segment untuk menampung program + data + stack + extra (format program *.COM) C:\WINDOWS\COMMAND>debug -n CHKDSK.EXE -l " loading file ‘chkdsk.exe’ ke memori -r AX=0000 BX=0000 CX=0AA0 DX=0000 SP=4000 BP=0000 SI=0000 DI=0000 DS=0F8C ES=0F8C SS=1086 CS=0F9C IP=0000 NV UP EI PL NZ NA PO NC
Perhatikan bahwa program berekstensi EXE menggunakan 3 segment : 1. segment program ada di segment nomor 0F9C 2. segment stack ada di segment nomor 1086 3. segment data = segment extra = 0F8C C:\WINDOWS\COMMAND>debug -n FORMAT.COM -l " loading file ‘format.com’ ke memori -r AX=0000 BX=0000 CX=28E7 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0F8C ES=0F8C SS=0F8C CS=0F8C IP=0100 NV UP EI PL NZ NA PO NC
Perhatikan bahwa program berekstensi COM hanya menggunakan 1 segment yaitu segment nomor 0F8C
Instruksi Mesin µP 8088 Instruksi mesin (machine instruction) adalah instruksi-instruksi yg dapat dikerjakan oleh suatu mikroprosesor. Suatu program bahasa Pascal tidak akan dapat dieksekusi secara langsung oleh mikroprosesor, sehingga agar mikroprosesor dapat mengerti isi program tersebut, terlebih dahulu kita harus meng-compile program tersebut agar menjadi instruksi mesin. Bahasa PASCAL Begin
inline($90/ $90/ $90); exit; inline($90/ $90/ $90); end.
Hasil Compile 0F9C:0000 0F9C:0005 0F9C:0006 0F9C:0008 0F9C:000A 0F9C:000F 0F9C:0010 0F9C:0011 0F9C:0012 0F9C:0014 0F9C:0015 0F9C:0016 0F9C:0017
9A00009E0F 55 89E5 31C0 9ACD029E0F 90 90 90 EB03 90 90 90 5D
CALL PUSH MOV XOR CALL NOP NOP NOP JMP NOP NOP NOP POP
0F9E:0000 BP BP,SP AX,AX 0F9E:02CD
0017
BP
Pada contoh diatas tampak bahwa hasil penterjemahan instruksi PASCAL “exit” adalah instruksi mesin “JMP”. Dilihat dari fungsi yg dilakukannya, instruksi mesin di µP 8088 dapat dibedakan menjadi 3, yaitu : Data transfer digunakan untuk (1) memindahkan data dari suatu elemen memory ke elemen memory lainnya atau (2) mengisi register data dengan suatu data. Contoh: MOV, PUSH, POP Aritmetika dan Logika digunakan untuk mengkalkulasi suatu perhitungan aritmetika (contoh: ADD, SUB, MUL, DIV) dan logika (contoh: AND, OR, NOT, XOR, SHL, SHR) Kontrol digunakan untuk memindahkan kontrol instruksi ke suatu lokasi baru (tidak lagi secara sekuensial). Contoh: JMP, JZ, JE
Instruksi MOV 1. Register ! Data (data yg akan ditulis ke register ditulis langsung di instruksi) 2. Register ! Register (data yg akan ditulis ke register berasal dari register lainnya) 3. Register ! Memory (data yg akan ditulis ke register berasal dari memory, dan alamat dari data disimpan di register alamat) 4. Memory ! Register (data yg akan ditulis ke memory berasal dari register, dan alamat memory yg akan ditulis disimpan di register alamat) Contoh instruksi MOV untuk pengisian langsung (1) dan transfer antar register (2) -a 0F6C:0100 0F6C:0103 0F6C:0105 0F6C:0107 0F6C:0109
mov mov mov mov
bx,abcd ah,56 bl,ah ax,bx
" " " "
mengisi reg. mengisi reg. mengcopy isi mengcopy isi
AX dgn data ABCDH AH dgn data 56H reg. AH ke reg. BL reg. BX ke reg. AX
-r AX=0000 BX=0000 DS=0F6C ES=0F6C 0F6C:0100 BBCDAB
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=0100 MOV BX,ABCD
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t AX=0000 BX=ABCD DS=0F6C ES=0F6C 0F6C:0103 B456
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=0103 MOV AH,56
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t AX=5600 BX=ABCD DS=0F6C ES=0F6C 0F6C:0105 88E3
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=0105 MOV BL,AH
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t AX=5600 BX=AB56 DS=0F6C ES=0F6C 0F6C:0107 89D8
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=0107 MOV AX,BX
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t AX=AB56 DS=0F6C
CX=0000 SS=0F6C
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
BX=AB56 ES=0F6C
DX=0000 CS=0F6C
SP=FFEE IP=0109
catatan: Instruksi berikut akan menimbulkan Error : mov ch,5678 : tidak bisa karena CH = 1 byte dan datanya 2 byte mov dl,ax : tidak bisa karena AX = 2 byte dan DL = 1 byte mov dx,al : tidak bisa karena AL = 1 byte dan DX = 2 byte
Contoh instruksi MOV untuk transfer Register ! Memory (3) dan transfer Memory ! Register (4) -a 0F6C:0100 0F6C:0103 0F6C:0105 0F6C:0107 0F6C:010A 0F6C:010C -d 0F6C:0000 0F6C:0010 0F6C:0020 0F6C:0030 0F6C:0040 0F6C:0050 0F6C:0060 0F6C:0070
mov mov mov mov mov
00 10 20 30 40 50 60 70
bx,0002 ah,[bx] ax,[bx] ax,[bx+1] [bx],ax
01 11 21 31 41 51 61 71
02 12 22 32 42 52 62 72
03 13 23 33 43 53 63 73
" " " " "
04 14 24 34 44 54 64 74
mengisi membaca membaca membaca menulis
05 15 25 35 45 55 65 75
06 16 26 36 46 56 66 76
reg. BX dgn memori pada memori pada memori pada isi reg. AX
07-08 17-18 27-28 37-38 47-48 57-58 67-68 77-78
09 19 29 39 49 59 69 79
0A 1A 2A 3A 4A 5A 6A 7A
0B 1B 2B 3B 4B 5B 6B 7B
data 0002H alamat BX sebanyak 1 byte (AH) alamat BX sebanyak 2 byte (AX) alamat BX+1 sbanyak 2 byte (AX) ke memori pada alamat BX
0C 1C 2C 3C 4C 5C 6C 7C
0D 1D 2D 3D 4D 5D 6D 7D
0E 1E 2E 3E 4E 5E 6E 7E
0F 1F 2F 3F 4F 5F 6F 7F
................ ................ !”#$%&’()*+,-./ 0123456789:;#? @ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_ `abcdefghijklmno pqrstuvwxyz{|}~.
-r AX=0000 BX=0000 DS=0F6C ES=0F6C 0F6C:0100 BB0200
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=0100 MOV BX,0002
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t AX=0000 BX=0002 DS=0F6C ES=0F6C 0F6C:0103 8A27
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=0103 MOV AH,[BX]
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:0002=02
-t AX=0200 BX=0002 DS=0F6C ES=0F6C 0F6C:0105 8B07
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=0105 MOV AX,[BX]
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:0002=0302
-t AX=0302 BX=0002 DS=0F6C ES=0F6C 0F6C:0107 8B4701
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=0107 MOV AX,[BX+01]
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:0003=0403
-t AX=0403 BX=0002 DS=0F6C ES=0F6C 0F6C:010A 8907
CX=0000 DX=0000 SP=FFEE SS=0F6C CS=0F6C IP=010A MOV [BX],AX
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:0002=0302
-t AX=00A0 BX=0002 DS=0F6C ES=0F6C 0F6C:010C 90
CX=0000 DX=0000 SS=0F6C CS=0F6C NOP
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-d 0F6C:0000 0F6C:0010 0F6C:0020 0F6C:0030
00 10 20 30
01 11 21 31
03 12 22 32
04 13 23 33
04 14 24 34
05 15 25 35
06 16 26 36
SP=FFEE IP=010C
07-08 17-18 27-28 37-38
09 19 29 39
0A 1A 2A 3A
0B 1B 2B 3B
0C 1C 2C 3C
0D 1D 2D 3D
0E 1E 2E 3E
0F 1F 2F 3F
................ ................ !”#$%&’()*+,-./ 0123456789:;#?
0F6C:0040 0F6C:0050 0F6C:0060 0F6C:0070
40 50 60 70
41 51 61 71
42 52 62 72
43 53 63 73
44 54 64 74
45 55 65 75
46 56 66 76
47-48 57-58 67-68 77-78
49 59 69 79
4A 5A 6A 7A
4B 5B 6B 7B
4C 5C 6C 7C
4D 5D 6D 7D
4E 5E 6E 7E
4F 5F 6F 7F
@ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_ `abcdefghijklmno pqrstuvwxyz{|}~.
Catatan: Instruksi berikut akan menimbulkan Error : mov [bx],[bx+1] : transfer data dari memori ke memori secara langsung mov [bx],12 : transfer data langsung ke memori kesimpulan : semua transfer yg melibatkan memori harus via register mov ah,[bl] mov [ax],bx mov [cx],bx mov [dx],bx
: : : :
register alamat harus digunakan dalam format 2 byte reg. AX bukan register alamat reg. CX bukan register alamat reg. DX bukan register alamat
Instruksi PUSH & POP Instruksi PUSH dan POP akan dipelajari lebih lanjut di bagian mengenai STACK (halaman berikutnya). Instruksi ADD dan SUB Contoh Penggunaan Instruksi Aritmatika (ADD dan SUB) -a 0DA0:0100 0DA0:0103 0DA0:0106 0DA0:0108 0DA0:010A
mov mov add sub
ax,1234 bx,5678 ax,bx ax,bx
-t " trace MOV AX,1234 AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE DS=0DA0 ES=0DA0 SS=0DA0 CS=0DA0 IP=0103 0DA0:0103 BB7856 MOV BX,5678
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t " trace MOV BX,5678 AX=1234 BX=5678 CX=0000 DX=0000 SP=FFEE DS=0DA0 ES=0DA0 SS=0DA0 CS=0DA0 IP=0106 0DA0:0106 01D8 ADD AX,BX
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t " trace ADD AX,BX AX=68AC BX=5678 CX=0000 DX=0000 SP=FFEE DS=0DA0 ES=0DA0 SS=0DA0 CS=0DA0 IP=0108 0DA0:0108 29D8 SUB AX,BX
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PE NC
-t " trace SUB AX,BX AX=1234 BX=5678 CX=0000 DS=0DA0 ES=0DA0 SS=0DA0
DX=0000 CS=0DA0
SP=FFEE IP=010A
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
Instruksi JMP dan JZ Contoh Penggunaan Instruksi Control (JMP dan JZ) -a 0F6C:0100 0F6C:0103 0F6C:0106 0F6C:0108 0F6C:010A 0F6C:010C 0F6C:010E
MOV MOV XOR JMP MOV JZ
AX,ABCD BX,DCBA AL,AL 010C AL,BH 010E
-t " trace MOV AX,ABCD AX=ABCD BX=0000 CX=0000 DX=0000 DS=0F6C ES=0F6C SS=0F6C CS=0F6C
SP=FFEE IP=0103
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t " trace MOV BX,DCBA AX=ABCD BX=DCBA CX=0000 DX=0000 DS=0F6C ES=0F6C SS=0F6C CS=0F6C
SP=FFEE IP=0106
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t " trace XOR AL,AL AX=AB00 BX=DCBA CX=0000 DS=0F6C ES=0F6C SS=0F6C
DX=0000 CS=0F6C
SP=FFEE IP=0108
BP=0000 SI=0000 DI=0000 NV UP EI PL ZR NA PE NC
-t " trace JMP 010C AX=AB00 BX=DCBA CX=0000 DS=0F6C ES=0F6C SS=0F6C
DX=0000 CS=0F6C
SP=FFEE IP=010C
BP=0000 SI=0000 DI=0000 NV UP EI PL ZR NA PE NC
-t " trace JZ 010E AX=AB00 BX=DCBA CX=0000 DS=0F6C ES=0F6C SS=0F6C
DX=0000 CS=0F6C
SP=FFEE IP=010E
BP=0000 SI=0000 DI=0000 NV UP EI PL ZR NA PE NC
Stack Karena jumlah register data terbatas (hanya 4 buah : AX, BX, CX, DX), maka diperlukan suatu lokasi penyimpanan data untuk sementara yang disebut stack. Kelebihan stack adalah dari kesederhanaannya didalam menyimpan dan mengembalikan kembali data yg telah tersimpan dibandingkan dengan penyimpanan ke memori. Dari arti katanya stack adalah tumpukan. Ini berarti jika kita akan menyimpan data di stack, data tersebut akan ditumpuk berdasarkan urutan siapa yang terakhir datang. Oleh karenanya, sistem akses data di stack disebut LIFO (Last In First Out) dimana data yang akan diambil adalah data yang ditumpuk terakhir. Penumpukan data di stack dilakukan dari bawah. FFFF FFFE
5E CD
! tumpukan terakhir
tumpukan baru Untuk mengidentifikasi tumpukan data terakhir (paling bawah), digunakan register SP (Stack Pointer). Jadi SP akan ‘menunjuk’ ke tumpukan terendah dari stack. Setiap kali ada data yang ditumpuk, isi SP akan berkurang (counting down). Instruksi yang digunakan untuk operasi stack adalah PUSH dan POP. PUSH akan ‘mendorong’ data ke stack dan POP akan ‘mengeluarkan’ data dari stack. -a 0EA0:0100 0EA0:0103 0EA0:0106 0EA0:0107 0EA0:0108 0EA0:0109 -d ffe0 0EA0:FFE0
mov ax,1234 mov bx,5678 push ax push bx pop ax pop bx SP=FFEE ↓ 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
! isi stack
-t AX=1234 BX=0000 DS=0EA0 ES=0EA0 0EA0:0103 BB7856
CX=0000 DX=0000 SP=FFEE SS=0EA0 CS=0EA0 IP=0103 MOV BX,5678
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t AX=1234 BX=5678 DS=0EA0 ES=0EA0 0EA0:0106 50
CX=0000 DX=0000 SS=0EA0 CS=0EA0 PUSH AX
SP=FFEE IP=0106
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t AX=1234 BX=5678 DS=0EA0 ES=0EA0 0EA0:0107 53
CX=0000 DX=0000 SS=0EA0 CS=0EA0 PUSH BX
SP=FFEC IP=0107
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-d ffe0
↓
0EA0:FFE0
00 00 00 00 00 00 00 00-00 00 00 00 34 12 00 00
-t AX=1234 BX=5678 DS=0EA0 ES=0EA0 0EA0:0108 58 -d ffe0 0EA0:FFE0
CX=0000 DX=0000 SS=0EA0 CS=0EA0 POP AX
SP=FFEA IP=0108
! AX ada di stack
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
↓ 00 00 00 00 00 00 00 00-00 00 78 56 34 12 00 00
! BX ada di stack
-t AX=5678 BX=5678 DS=0EA0 ES=0EA0 0EA0:0109 5B
CX=0000 DX=0000 SS=0EA0 CS=0EA0 POP BX
SP=FFEC IP=0109
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
-t AX=5678 DS=0EA0
CX=0000 SS=0EA0
SP=FFEE IP=010A
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
BX=1234 ES=0EA0
DX=0000 CS=0EA0
Bagan dasar µP Intel 8088 8 - bit Data Bus Internal
Flag
AH BH CH DH
Instruction reg
AL BL CL DL
ALU Stack Segment Stack Pointer
Instruction Decoder
Accumulator
Code Segment Instruction Pointer
Control Unit
Data bus buffer
Address buffer
Mem Mem Read Write
A0
A2
A4
A6
A8
A16 A12 A10 A14 A18
D6 D4 D2 D0 Memory Controller 1 0 1 1 1 0 1 0
1 1 0 1 0 1 0 0
0 0 0 1 0 0 0 0
8-bit Memory (max of 1 Mb)
1 0 1 1 1 0 1 0
1048576 cell
Elemen didalam mikroprosesor adalah : CU (Control Unit) adalah manajer dari semua unit. CU mengatur keselarasan kerja setiap unit. Apa yang harus dilakukan oleh suatu unit, semuanya diketahui oleh CU dengan bantuan microprogram yang ditanamkan padanya. Pengontrolan oleh CU dilakukan melalui Bus Kontrol (panah dari/ke Control Unit). Instruction Decoder bertugas untuk menerjemahkan suatu instruksi dengan cara membandingkannya dengan tabel instruksi yang dimilikinya. Hasil dekoding diberikan ke CU, dan CU akan membangkitkan sinyal-sinyal kontrol yang diperlukan untuk melaksanakan instruksi tersebut.
1 0 1 1 1 0 1 0
1 0 1 1 1 0 1 0
1 byte
Register adalah memori khusus di dalam uP. Untuk mengidentifikasikannya, register memiliki nama khusus yang juga sekaligus mencerminkan fungsi register tersebut. Berdasarkan isinya, register dapat dibedakan menjadi : Register Data memiliki lebar 16 bit namun dapat diakses dalam format 2x8 bit: Accumulator : AX = AH+AL Base Register : BX = BH+BL Counter Register : CX = CH+CL Data Register : DX = DH+DL Register Alamat memiliki lebar 16 bit : Code Segment : CS, menyimpan alamat segment dari program Instruction Pointer : IP, menyimpan alamat offset dari program Data Segment : DS, menyimpan alamat segment dari data Index Register : BI (Base Index), SI (Source Index), DI (Destination Index), Pointer Register : BP (Base pointer), Stack Segment : SS, menyimpan alamat segment dari stack Stack Pointer : SP, menyimpan alamat offset dari stack Base Register : BX Register status (Flag) berfungsi untuk menyimpan status dari suatu operasi Register instruksi menyimpan instruksi yang akan dikerjakan oleh CPU (Instruction Register) ALU (Arithmetic and Logic Unit) adalah mesin penghitung (kalkulator) dari CPU. CU akan menggunakan ALU jika instruksi yang dikerjakan membutuhkan perhitungan aritmetika (contoh: ADD, SUB) atau logika (contoh: AND, OR, XOR). Jika suatu instruksi aritmetika dan logika dieksekusi, maka hasil operasinya dapat mengubah salah satu bit di register status.
Proses Kerja (Bagaimana µP8088 mengerjakan instruksi) Didalam menjalankan suatu instruksi, uP 8088 melakukan 3 tahap pengerjaan sbb : 1. Penjemputan Instruksi (IF = Instruction Fetch) IR ! [CS+IP] • Proses kerja dimulai dengan penjemputan instruksi baru dari memori ke IR. • CU menerjemahkan isi register CS dan IP untuk menentukan letak dari instruksi • baru tersebut di memori. • Hasil terjemahan isi CS dan IP ini dikirim CU ke memori melalui bus alamat • CU mengirim sinyal MemREAD untuk memberitahukan memori bahwa CU ingin membaca data • Memori, setelah mendapat sinyal MemREAD, akan melihat isi dari bus alamat. • Kemudian isi dari cell memori yang sesuai dengan alamat tersebut diletakkan di bus data (selebar 1 byte) • Beberapa saat setelah mengirim sinyal MemREAD, CU membaca isi dari bus data dan meletakkannya di IR. 2. Dekoding Instruksi (ID = Instruction Decode) Isi baru dari IR tersebut kemudian diterjemahkan oleh CU untuk mengetahui apa saja yang diinginkan oleh instruksi baru tersebut. Untuk tugas penterjemahan ini, CU menggunakan bantuan tabel instruksi yang ada di Instruction Decoder untuk dapat memahami maksud dari instruksi tersebut. 3. Eksekusi Instruksi (EX = Execution) Tergantung dari hasil penterjemahan instruksi diatas, CU akan melaksanakan satu dari tiga fungsi, yaitu : • Operasi Aritmetika atau Logika • Data transfer • Control Arsitektur x86 (contoh: µP8088) menggunakan Variable Length Instruction (VLI) dimana instruksi yang berbeda memiliki panjang instruksi yang berbeda pula (bervariasi dari 1 byte sampai 4 byte). Karena pada saat IF yg dijemput hanya 1 byte, maka kemungkinan besar setelah proses ID, CU harus menjemput beberapa byte lagi dari memori agar instruksinya menjadi lengkap. Byte pertama dari instruksi yg dijemput disebut dgn op-code (operation code) karena dari penterjemahan op-code tersebut, didapatkan panjang isntruksi sebenarnya.
Contoh : untuk instruksi B8 34 12 (MOV AX,1234) CU pertama akan mengambil byte “B8” untuk mengetahui bahwa instruksi tsb adalah MOV AX,xx yy sehingga CU harus mengambil 2 byte setelahnya untuk dapat mengeksekusi instruksi tsb. VLI (Variable Length Instruction) Kelebihan : Hemat space, dimana jumlah byte yang dibutuhkan untuk merepresentasikan suatu instruksi merupakan jumlah byte minimumnya. Kekurangan : Lebih lambat, karena ada suatu tenggang waktu tertentu dimana uP harus menjemput instruksi selengkapnya dari memori setelah dekoding (kekurangan ini diperbaiki melalui Prefetching) Instruksi 1 byte (contoh: PUSH & POP) DE
EX
IF
proses: IF – DE – EX Instruksi >1 byte (contoh: MOV, ADD, JMP) DE
IF
EX
proses: IF – DE – IF – DE – EX
Encoding Instruksi Mesin Di dalam CPU (tepatnya pada blok Instruction Decoder), terdapat tabel instruksi yang memuat daftar semua instruksi yang dapat dimengerti oleh CPU tersebut. Daftar ini disebut sebagai microcode dan setiap kali CPU menerima sebuah instruksi, CPU akan memecah kode instruksi tersebut (tahap decoding) dan kemudian melihat arti dari masing-masing pecahan tersebut di microcode. Ini menunjukkan bahwa tidak semua CPU memiliki microcode yang sama. Beda arsitektur berarti berbeda juga microcode-nya. Sebagai contoh, program yang dapat dijalankan di IBM PC tidak akan jalan di Apple Macintosh, begitu pula sebaliknya. Hampir semua instruksi memerlukan data untuk dioperasikan. Berdasarkan Addressing Mode-nya (bagaimana uP mendapatkan data yg dibutuhkan oleh suatu instruksi), instruksi-instruksi uP 8088 dapat dibedakan menjadi : Addressing Mode Immediate Register Direct Register Indirect Displacement Direct atau Absolute
Contoh instruksi Add AX, 3F 5B Add AX, BX Add AX, [BX] Add AX, [BX+128] Add AX, [1001]
Arti AX ! AX + 3F 5B AX ! AX + BX AX ! Mem[BX] AX ! Mem[BX+128] AX ! Mem[1001]
-a 0EA0:0100 0EA0:0103 0EA0:0105 0EA0:0107 0EA0:010A
mov bx,000f ! Immediate mov ax,bx ! Register Direct mov ax,[bx] ! Register Indirect mov ax,[bx-1] ! Displacement mov ax,[000d] ! Direct/Absolute [0000] [000D] [000F] -d 0000 ↓ ↓ ↓ 0EA0:0000 CD 20 00 A0 00 9A EE FE - 1D F0 4F 03 27 08 8A 03 0EA0:0010 25 08 17 03 25 08 2A 07 - 01 01 01 00 02 FF FF FF ↑ [0010] -t AX=0000 BX=000F CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0103 NV UP EI PL NZ NA PO NC 0EA0:0103 89D8 MOV AX,BX -t AX=000F BX=000F DS=0EA0 ES=0EA0 0EA0:0105 8B07
CX=0000 DX=0000 SP=FFEE SS=0EA0 CS=0EA0 IP=0105 MOV AX,[BX]
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:000F=2503
-t AX=2503 BX=000F DS=0EA0 ES=0EA0 0EA0:0107 8B47FF
CX=0000 DX=0000 SP=FFEE SS=0EA0 CS=0EA0 IP=0107 MOV AX,[BX-01]
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:000E=038A
-t AX=038A BX=000F DS=0EA0 ES=0EA0 0EA0:010A A10D00
CX=0000 DX=0000 SP=FFEE SS=0EA0 CS=0EA0 IP=010A MOV AX,[000D]
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:000D=8A08
-t AX=8A08 DS=0EA0
CX=0000 SS=0EA0
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
BX=000F ES=0EA0
DX=0000 CS=0EA0
SP=FFEE IP=010D
Memory Klasifikasi ROM (Read Only Memory) merupakan media penyimpan data non-volatile (volatile = menguap) yang berarti datanya tidak akan hilang meskipun power supplynya diputuskan. Contoh: ROM BIOS (ROM Basic Input Output System) pada motherboard yang bertugas untuk memeriksa keberadaan dan kondisi semua peripheral yang terpasang, menghitung dan mengecek main memory, dan bootstrap loader (memanggil OS pada Hard Disk). RAM (Random Access Memory) merupakan media penyimpan data volatile yang berarti datanya akan hilang jika power supplynya diputuskan Contoh: SDRAM pada Main Memory komputer anda (yang mencapai 64 Mb, 256 Mb). RAM dibagi menjadi 2 jenis : SRAM (Static RAM) menggunakan hanya transistor digital (± 10 buah transistor) DRAM (Dynamic RAM) menggunakan ± 2 buah transistor dan kapasitor SRAM : Price = Rp 100.000 u/ Capacity 0,5 Mb, Size 50 mikron per cell, Speed 2 ns DRAM : Price = Rp 100.000 u/ Capacity 64 Mb, Size 20 mikron per cell, Speed 10 ns Hirarki Memory Seorang pengguna komputer akan membutuhkan memori yang cepat dalam jumlah yang tidak terbatas. Namun hal ini akan memakan biaya yang sangat mahal. Solusi ekonomis untuk keinginan tersebut adalah dengan menggunakan hirarki memori. Dengan hirarki memori, kita dapat menyeimbangkan antara Speed, Capacity, Size, dan Price. Tujuannya adalah untuk menyediakan sistem memori dengan harga serendah-rendahnya dan kecepatan setinggi mungkin. uP 8088 Price Capacity Cache memory Main memory Hard Disk
Size
Speed
Pengalamatan Memori Metode pengalamatan memori untuk tiap-tiap desain uP amat berbeda. Disini kita akan mempelajari metode pengalamatan yang dipakai oleh uP 8088. Logical Memory Memori logika adalah system memori yang dilihat dari sudut programmer. Memori logika biasanya diberikan nomor dalam format Hexadecimal. FFFFFF
4 GByte
FFFF - 386 DX - 80486 16 MByte 1 MByte - 8086 - 8088 - 80186
FFFF
- 80286, - 386 SX
000 Karena semua cell memori pada sistem uP 8088 memiliki lebar 8-bit (1 byte), maka jika uP hendak mengakses 16-bit (2 byte) data dari memori, 2 byte berturutan akan diambil. Peletakan data di memori diurutkan dari LSB (least significant byte) dengan alamat memori terendah sampai MSB (most significant byte) dengan alamat memori tertinggi. Sistem ini disebut Little Endian dan berlaku untuk semua keluarga uP x86 yang berarti alamat memori dari suatu data akan menunjuk ke LSB dari data. -a 11A8:0100 mov ax,[0005] [0000] -d 0000 ↓ 11A8:0000 CD 20 00 A0 [0005] = 9A (LSB ! AL) [0006] = EE (MSB ! AH) -t AX=EE9A DS=11A8
BX=0000 ES=11A8
CX=0000 SS=11A8
[0005] [0006] ↓ ↓ 00 9A EE FE - 1D
DX=0000 CS=11A8
SP=FFEE IP=0103
F0
4F
03
2D
0B
8A
BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC
Physical Memory Pada keluarga microprocessor Intel, perbedaan memori secara hardwarenya terletak pada lebarnya dimana 8088 : 8-bit, 8086-80386SX : 16-bit, dan 80386DX-80486 : 32-bit. Meskipun terdapat perbedaan lebar data pada tiap desain microprocessor di atas, seorang
03
programmer tetap mengaksesnya seakan-akan mereka adalah 8-bit. Perbedaan lebar data tersebut hanya menjadi masalah bagi hardware desainer.
Peta memori Peta memori adalah suatu peta yang menggambarkan lokasi dari data di memori. Peta memori digambarkan sebagai blok yang memiliki alamat dan 8-bit data. Cell memori dengan alamat terendah digambarkan paling bawah FFFF
8A
7777
E8
0000
FE
Untuk µP x86, sistem operasi MSDOS (Real Mode) membagi seluruh area memori menjadi 3 : unlimited depend on the uP
XMS (eXtended Memory System)
15 Mb for 80286 – 80386SX 4 Gb for 80386DX and up
EMS (Expanded Memory System)
384 Kb System Area
100000 FFFFF
A0000 9FFFF TPA 640 Kb Conventional Memory (Transient and Program Area) 00000 Microprocessor x86 dan sistem operasi produk Microsoft selalu mempertahankan kompatibilitasnya terhadap microprocessor dan sistem operasi pendahulunya. Oleh karenanya Intel Pentium® pun tetap mengacu pada peta memori uP i8088 dengan memori utamanya sebesar 1 Mb (Intel menyebutnya real memory). Memori sebesar 1 Mb ini dibagi menjadi 2 menurut fungsinya. 1. Daerah 640Kb pertama disebut TPA (Transient Program Area) atau conventional memory. Disini terdapat OS (Operating System), dan program aplikasi yg dijalankan (alamat fisik 00000 – 9FFFF) 2. Diatas TPA terdapat EMS (Expanded Memory System) yang pada dasarnya merupakan BIOS (Basic I/O System) system area untuk pengontrolan I/O (alamat fisik A0000 – FFFFF) Untuk microprocessor diatas i8088, penggunaan memori diatas 1 Mb dimungkinkan dan daerah ini disebut dengan XMS (Extended Memory System).
4164
4164
4164
4164
4164
4164
4164
4164
4164
4164
4164
4164
4164
4164
4164
4164
41256
41256
41256
41256
41256
8237
41256
41256
41256
41256
41256
ROM
41256
41256
41256
41256
41256
ROM
41256
41256
41256
ON
Keyboard
8088
8255
ROM
Power Supply
8288
8259
Crystal
8284
Dip Switch
8253 = Programmable Interval Timer 8237 = DMA Controller 8255 = Programmable Peripheral Interface
8-bit ISA bus
Main Memory = (256Kbyte x 2) + (64Kbyte x 2) = 640 Kbyte
4164
4164
PC-XT Personal Computer eXtended Technology
8087
8259 = Programmable Interrupt Controller 8088 = Microprocessor 8087 = Floating Point Numeric Processor 8288 = Bus Controller 8284 = Clock Generator Crystal = 14.318 MHz
8253
PC-XT adalah komputer komersial pertama yang dikeluarkan IBM. Dengan prosesor Intel 8088 dan DRAM 640KB, komputer ini dipasarkan sekitar tahun 1985. Motherboard komputer PC-XT memiliki beberapa komponen penting : 8088 8087
8237
8251
8253 8255 8259 8284
8288 4164
41256
(Microprocessor) adalah mikroprosesor yang bertugas mengontrol semua komponen (Arithmatic Co-Processor) adalah arithmatic co-prosesor yang bertugas untuk membantu 8088 dalam menangani kalkulasi atau perhitungan aritmetik yang melibatkan angka sangat besar (DMA Controller) adalah prosesor khusus untuk menangani proses DMA (Direct Memory Access) yaitu suatu proses dimana yang menulis / membaca data di memori bukan lagi mikroprosesor, melainkan peripheral (perangkat luar) (Serial Communication Controller) adalah prosesor khusus untuk transaksi data serial (misalnya untuk modem) (terpasang pada I/O card, tidak pada motherboard) (Programmable Interval Timer) adalah prosesor khusus untuk menangani timing (Programmable Peripheral Interface) adalah prosesor khusus untuk transaksi data paralel (misalnya untuk floppy disk) (Programmable Interrupt Controller) adalah prosesor khusus untuk mengontrol mekanisme interupsi (Clock Generator) adalah IC yg digunakan untuk menghasilkan : sinyal clock (4.77 MHz), sinyal Reset, dan sinyal Ready. (Bus Controller) adalah prosesor khusus untuk mengontrol penggunaan bus data dan bus alamat (Dynamic RAM) adalah memori DRAM dengan kapasitas 65536 x 1 bit (64 Kbit). Oleh karena DRAM ini hanya dapat menyimpan 1 bit, maka untuk dapat menyimpan 8 bit, digunakan 8 x 4164. Ditambah 1 x 4164 untuk menyimpan Parity Bit. (Dynamic RAM) adalah memori DRAM dengan kapasitas 262144 x 1 bit (256 Kbit). Oleh karena DRAM ini hanya dapat menyimpan 1 bit, maka untuk dapat menyimpan 8 bit, digunakan 8 x 41256. Ditambah 1 x 41256 untuk menyimpan Parity Bit.