Mikroprosesor dan Antarmuka Diktat Kuliah – Instruksi dan Segmentasi
Nyoman Bogi Aditya Karna Sisfo – IMTelkom
[email protected] http://bogi.blog.imtelkom.ac.id
Institut Manajemen Telkom http://www.imtelkom.ac.id
Diktat Kuliah Mikro @ Institut Manajemen Telkom (http://www.imtelkom.ac.id)
Instruksi Mesin Instruksi mesin (machine instruction) adalah instruksi-instruksi yg dapat dikerjakan oleh suatu uP. Suatu program bahasa Pascal (*.PAS) tidak akan dapat dieksekusi secara langsung oleh uP. Agar komputer dapat mengerti isi program tersebut, terlebih dahulu kita harus meng-compile program tersebut agar menjadi instruksi mesin. Dalam bahasa PASCAL begin
Hasil Compile
0F9C:0000 9A00009E0F CALL 0F9E:0000 0F9C:0005 55 PUSH BP 0F9C:0006 89E5 MOV BP,SP 0F9C:0008 31C0 XOR AX,AX 0F9C:000A 9ACD029E0F CALL 0F9E:02CD
inline($90/ $90/ $90);
0F9C:000F 90 0F9C:0010 90 0F9C:0011 90
NOP NOP NOP
exit;
0F9C:0012 EB03
JMP
0017
inline($90/ $90/ $90); end.
0F9C:0014 90 0F9C:0015 90 0F9C:0016 90 0F9C:0017 5D
NOP NOP NOP POP
BP
Pada contoh diatas tampak bahwa hasil penterjemahan instruksi PASCAL “exit” adalah instruksi mesin “JMP”. Dilihat dari fungsi yg dilakukannya, instruksi mesin dapat dibedakan menjadi 1. 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 2. Aritmetika dan Logika digunakan untuk mengkalkulasi suatu perhitungan aritmetika (contoh: ADD, SUB) dan logika (AND, OR, SHL) 3. Kontrol digunakan untuk memindahkan kontrol instruksi ke suatu lokasi baru (tidak lagi secara sekuensial) contoh: JMP, JZ
Diktat Kuliah Mikro @ Institut Manajemen Telkom (http://www.imtelkom.ac.id)
Struktur Memori pada uP8088 Memori pada sistem uP8088 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 FFFF
1
0
0
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
data yg disimpan pada alamat tsb 0 1 0 1 0
= 8A
Alamat dari suatu cell memori direpresentasikan dalam format 2 byte (0000 H – FFFFH) yg disimpan dalam register alamat (yg lebarnya juga 2 byte). Karena kapasitas register alamat adalah 2 byte, maka jumlah cell 16 memori yg dapat disimpan alamatnya adalah 2 = 65536 cell memori. Dan karena suatu cell memori menyimpan data 1 byte (00H – FFH) maka suatu register alamat uP8088 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
0E C9 C8 AE 8B 00 89 F8
E8 C3 08 FC 46 00 46 FF
data (Hexa) DC FC 89 46 8B 46 F8 FF 00 00 C7 46 89 46 FA 89 F8 FF 5E FA C7 46 FE 00 FA 89 56 FC 5E FA 89 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
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
data (ASCII) .....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.
Diktat Kuliah Mikro @ Institut Manajemen Telkom (http://www.imtelkom.ac.id)
Segmentasi Microprocessor 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 20 berharga 00000H s.d FFFFFH. Ke-20 bit tersebut digunakan untuk mengakses memori dgn kapasitas 2 = 1048576 cell memori. Namun masalah timbul pada lebar register alamat. uP8088 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 Kb. 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
4 bit 0
DS = BX = DS+BX
4 bit F 0 F
0 FFFFF FFFFE FFFFD
FA 3B 43
4 bit 8 0 8
4 bit C 0 C
4 bit 5 5
Offset FFFF Offset FFFE Offset FFFD
64
Segment F000 F0001 F0000
20 15
Offset 0001 Offset 0000
1FFFF 1FFFE
55 CD
Offset FFFF Offset FFFE
Kb
1024 64
Segment 1000 10002 10001 10000 0FFFF 0FFFE
9A 2B 53 06 7A
Offset 0002 Offset 0001 Offset 0000 Offset FFFF Offset FFFE
Kb
64
Segment 0000 00002 00001 00000
80 DE 1F
Offset 0002 Offset 0001 Offset 0000
uP8088 menyediakan 4 segment untuk menjalankan suatu program. 1. 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
Kb
Kb
Diktat Kuliah Mikro @ Institut Manajemen Telkom (http://www.imtelkom.ac.id) 2.
3.
4.
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
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