tugas 1 microprossesor by ari tornando zai

Upload: ari-tornando-zai

Post on 18-Jul-2015

91 views

Category:

Documents


0 download

TRANSCRIPT

LAPORAN PRATIKUM MICROPROCESSOR

JURUSAN TEKNOLOGI INFORMASI POLITEKNIK NEGERI PADANG 2012

3

BAB 1 PEMROGRAMAN ASSAMBLER 1

1.1 Tujuan: Setelah melakukan praktikum ini diharapkan mahasiswa mampu 1. Membuat program assambler dengan ekstensi .COM dengan menggunakan debug 2. Menampilkan dan membaca isi register 3. Menjelaskan fungsi-fungsi register sebagai pengalamatan data 4. Menjelaskan instruksi-instruksi dasar pada mikroprosesor X86 5. Menjelaskan mode alamat efektif dan alamat mutlak 1.2 Dasar Teori: 1.2.1 Bahasa Assambler

Dalam bahasa assembler mempunyai 3 instruksi dasar, yaitu mnemonic opcode), operan 1 dan operan2 serta komentar (jika diperlukan) Mnemonic atau opcode ialah kode yang akan melakukan aksi terhadap operand . Operand ialah data yang diproses oleh opcode. Sebuah opcode bisa membutuhkan 1 ,2 atau lebih operand, kadang juga tidak perlu operand. Sedangkan komentar dapat kita berikan dengan menggunakan tanda titik koma (;). Berikut contoh jumlah operand yang berbeda beda dalam suatu assembly.CJNE R0,#22H, Tasmi ;dibutuhkan 3 buah operand MOVX @DPTR, A ;dibutuhkan 2 buah operand RR A ;1 buah operand NOP ; tidak memerlukan operand

Semua instruksi tersebut dapat dibagi menjadi lima kelompok menurut fungsinya, yaitu: Instruksi Pemindahan Data Instruksi Aritmatika Instruksi Logika dan Manipulasi Bit Instruksi Percabangan Instruksi Stack, I/O, dan Kontrol

1.2.2 Debug dan Interupt A. Debug Debug adalah suatu utiliti dalam DOS yang digunakan untuk membuat pemrograman assambler dengan format ekstensi COM. Perintah-perintah debug antara lain : 1. Q (Quit) Mengembalikan ke dos promptC> Debug -Q A>

2. H (Hexa) Melaksanakan perintah penambahan dan pengurangan terhadap dua bilangan hexaC>Debug -H 2204 2012 4216 01F2

3. A (assambler) Perintah untuk menulis program assamblerC>Debug -a 17C0:0100 mov ax,12

4. R(Register) Digunakan untuk mengetahui isi masing-masing registerC>debug -rAX=0000 BX=0000 CX=0000 DX=0000 DS=17C0 ES=17C0 SS=17C0 CS=17C0 17C00:0100 B81200 mov ax,12 SP=FFEE IP=0100 BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC

Perintah ini juga bisa untuk mengetahui atau memperbaharui isi register tertentuC>Debug rCX CX 0000 :0100 C>Debug rCX CX 0100 :

5. N(Name)

5

Perintah untuk membuat atau merubah nama fileC>Debug -N D:Coba.com

6. W(Writing) Menulis program dan data ke dalam discC>Debug -w writing 0008 bytes

7. G (Go) Menjalankan program (misal program cetak huruf A)C>Debug -G A Program terminated normally

8. T(Trace) Menjalankan program perbaris dengan menampilkan register dipakaiC>Debug -TAX=0000 BX=0000 CX=0000 DX=0000 DS=17C0 ES=17C0 SS=17C0 CS=17C0 17C00:0100 B81200 mov ax,12 SP=FFEE IP=0100 BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC

9. U (Unsamble) Menampilkan list dari program yang sedang berjalan U[tempat awal program yang diinginkan]L[panjang program/1 byte akhir dari alamat akhir program]

B. Interupt (Int) Perintah ini merupakan pemanggilan subroutin yang sudah tersedia di memori komputer Subroutine yang dapat dipanggil menggunakan perintah int (Interup) terdiri dari dua jenis yaitu: 1. Bios Interrupt, yaitu Int yang disediakan oleh BIOS(Basic Input Output System). Int yang termasuk dalam Interrupt Bios adalah Int 0 hingga 1F hexa 2. DOS Interrupt yaitu Int yang disediakan oleh DOS (Disk Operation System). Yang termasuk dalam Interrupt ini adalah Interrupt diatas 1F hexa Interupt DOS yang sering digunakan adalah Int 20h dan Int 21h service 02h a. Int 20h

Int ini mempunyai tugas memberhentikan proses komputer terhadap suatu program COM. b. Int 21h service 21h Int 21h mempunyai banyak tugas sehingga dibagi menjadi berbagai macam service number. Service 02h merupakan bagian tugas Int 21h yang sering dipakai yaitu untuk mencetak sebuah huruf ke monitor. Untuk menjalankan fungsi Int 21h service 02h harus memenuh syarat sebagai berikut: 1. Register AH harus berisi service number dari Int 21h yang akan dijalankan (02h) 2. Register DL, harus berisi bilangan hexa dari karakter ASCII yang akan dicetak. C. Instruksi-Instruksi Dasar 1. Instruksi Pengalamatan MOV tujuan,asal (tujuan: register/memori, asal:angka/register/memori) Misal MOV AX,1234H (register AX diisi angka 1234 H) 2. Instruksi Penjumlahan INC tujuan Misal INC DX (DX = DX+1) ADD tujuan,asal Misal ADD AX,1234 (AX=AX+1234H) 3. Instruksi Pengurangan DEC tujuan Misal DEC AX (AX=AX-1) SUB tujuan,asal Misal SUB AX,1200H (AX = AX-1200H) 1.3 Alat dan Bahan Alat-alat yang digunakan adalah 1. PC 2. Utility Debug 1.4 Pengujian A. Kerja 1 Menggunakan Debug.com

7

Langkah Kerja: Berikut ini langkah membuat program untuk mencetak huruf A dengan utiliti DEBUG.COM 1. Klik start, dari tampilan menu pilih Run. Ditampilan menu Run, ketik command dan selanjutnya pilih OK 2. Dari layar DOS prompt yang muncul, tukar folder document and settings ke folder compiler untuk mikroprosessor 8088, seperti yang tampak pada gambar 1.1

Gambar 1 Tampilan Command Prompt 3. Ketik Debug (huruf besar atau kecil tidak berpengaruh)

Gambar 2 Tampilan Pemanggilan utiliti Debug 4. Ketik A/a

Gambar 3 Tampilan Perintah A (assambler) 5. Tulis program berikutMOV MOV INT INT AH,02, Kemudian tekan Enter DL,41, tekan Enter 21, tekan Enter 20, tekan Enter 2 kali

Maka tertampil sebagai berikut

Gambar 4 Tampilan Program Keterangan program:

-

Mov ah,02 adalah mengisi register ah dengan service number dari int 21 untuk mencetak 1 huruf pada layar.

-

Mov dl,41 mengisi register dl dengan 41 yang merupakan Kode ASCII dari huruf A Int 21 ; perintah mencetak Int 20 perintah untuk menghentikan program

6. Periksa panjang program dan memperbaharui isi register CX yang merupakan tempat penampungan panjang program yang aktif sebelum dijalankandengan mengetikkan rcx dan isi kursor dengan angka 8

Gambaran 5 Tampilan Perintah RCX 7. Beri nama program dengan mengetikkan N(nama file.COM) Misal : Ncoba.com

Gambar 6 Tampilan Pemberian Nama Program 8. Pastikan register IP menunjuk alamat awal program yang akan dijalankan, dengan cara mengetikkan rIP dan pastikan berisi 0100 (alamat offset), jika sudah terisi dengan benar Enter, kalau tidak ketik pada kursor 0100

. Gambar 7 Tampilan Cek Isi Register IP 9. Simpan program dengan mengetikkan perintah W

9

Gambar 8 Tampilan Perintah W 10. Jalankan program dengan mengetikkan perintah G

Gambar 9 Tampilan Output Program Hasil tercetak huruf A kemudian ada pemberitahuan bahwa program berhenti secara normal 11. Cek perbaris program dengan mengetikkan perintah T

Gambar 10 Tampilan Perintah Trace (T) Pada baris terakhir tertulis B241 yang merupakan opcode dari perintah mov dl,41 12. Kemudian ketik T 2 kali, maka akan terlihat sebagai berikut

Gambar 11 Tampilan Perintah Trace ke 2 dan ke 3 Pada baris terakhir tertulis opcode dari perintah int 21

13. Keluar dari utiliti Debug dengan ketik Q dan Panggil ulang program, dengan ketik coba.com

Gambar 12 Tampilan Pengujian Program B. Kerja 2 Melihat Isi Memori Langkah Kerja : 1. Jika sudah berada di debug.com ulangi langkah 4 dan ketik program berikut, beri namaMOV CX,05 -> terjadi perulangan 5 kali MOV AH,02 MOV DL,41 INT 21 LOOP 0103 INT 20 Enter 2 kali

2. Lihat hasil program dengan ketikkan g

Gambar 13 Tampilan program

3. Kemudian Ketik U 100 L 0d dan isi tabel berikut

Gambar 14 Tampilan list dari program yang sedang berjalan

11

Tabel 1 Tabel Instruksi ALAMAT SEGMEN 13DC 13DC 13DC 13DC 13DC 13DC INSTRUKSI OFFSET 0100 0103 0105 0107 0109 010B MOV CX, 0005 MOV AH, 02 MOV DL, 41 INT 21 LOOP 0103 INT 20 OPCODE B90500 B402 B241 CD21 E2F8 CD20 KETERANGAN Untuk Perulangan Mengisi register Mengisi register dengan 41 Mencetak program Looping ke AH Menghentikan program

4. Gunakan perintah Trace (T) dan isi tabel berikut

Gambar 15 Tampilan Reg per Intruksi Tabel 2 Isian Register ALAMAT SEGMEN 13DC 13DC 13DC 00A7 00A7 00A7 REGISTER AX BX 0000 0000 0200 0000 0200 0000 0200 0000 0200 0000 0200 0000

OFFSET 0103 0105 0107 107C 107D 107E

CX 0005 0005 0005 0005 0005 0005

DX 0000 0000 0041 0041 0041 0041

SP FFEE FFEE FFEE FFE8 FFE8 FFE8

IP 0103 0105 0107 107C 107D 107E

C . Operasi Aritmatika 1. Tulis program untuk menampilkan huruf A s/d Z berikut dan beri nama tambah1.comMOV CX,1A MOV DL,41 MOV AH,02 INT 21 INC DL LOOP 0105 INT 20

2. Buat tabel seperti tabel 1. dan 2

Gambar 16 tampilan list dari program Tabel 1 Tabel Instruksi ALAMAT SEGMEN 13DC 13DC 13DC 13DC 13DC INSTRUKSI OFFSET 0100 0103 0105 0107 0109 MOV CX,001A MOV DL,41 MOV AH,02 INT 21 INC DL 13DC 13DC 010B 010D LOOP 0105 INT 20 E2F8 CD20 OPCODE B91A00 B241 B402 CD21 FEC2 KETERANGAN Perulangan 16 kali Mengisi register dengan 41 Mengisi register Mencetak program Menambahkan perulangan dengan 1 tingkat Mengulang kembali ke offset 0105 / ah Menghentikan program

13

Tabel 2 Isian Register ALAMAT SEGMEN 13DC 13DC 13DC 00A7 00A7 00A7 REGISTER AX BX 0000 0000 0000 0000 0200 0000 0200 0000 0200 0000 0200 0000

OFFSET 0103 0105 0107 107C 107D 107E

CX 001A 001A 001A 001A 001A 001A

DX 0000 0041 0041 0041 0041 0041

SP FFEE FFEE FFEE FFE8 FFE8 FFE8

IP 0103 0105 0107 107C 107D 107E

3. Tulis program berikut dan beri nama kurang1.comMOV CX,1A MOV DL,5A MOV AH,02 INT 21 INC DL LOOP 0105 INT 20

Kemudian Ketik U 100 L (lihat bit awal dari alamat akhir program) dan buat tabel seperti tabel 1. dan 2

Gambar 17 Tabel 1 Tabel Instruksi ALAMAT SEGMEN 13DC 13DC 13DC 13DC 13DC 13DC INSTRUKSI OFFSET 0100 0103 0105 0107 0109 010B MOV CX,001A MOV DL, 5A MOV AH,02 INT 21 INC DL LOOP 0105 OPCODE B91A00 B25A B402 CD21 FEC2 E2F8 KETERANGAN Peulangan reg Mengisi reg dengn 5A Mengisi reg Mencetak program Menambahkan 1 pada program Mengulang pada offset 0105

13DC

010D

INT 20

CD20

Menfhentikan program

Tabel 2 Isian Register ALAMAT SEGMEN 13DC 13DC 13DC 00A7 00A7 00A7 REGISTER AX BX 0000 0000 0000 0000 0200 0000 0200 0000 0200 0000 0200 0000

OFFSET 0103 0105 0107 107C 107D 107E

CX 001A 001A 001A 001A 001A 001A

DX 0000 005A 005A 005A 005A 005A

SP FFEE FFEE FFEE FFE8 FFE8 FFE8

IP 0103 0105 0107 107C 107D 107E

D. Operasi Lompat dan perbandingan Tulis program berikutMOV BX,0000 MOV DL,41 MOV CX,0003 MOV AH,02 INT 21 LOOP 0108 INC DL CMP DL,5B JNE 0105 MOV DL,0D MOV AH,02 INT 21 MOV DL,0A INT 21 INC BX CMP BX,000B

15

JLE 0103 INT 20

Kemudian Ketik U 100 L (lihat bit awal dari alamat akhir program) dan buat tabel seperti tabel 1.dan 2

Tabel 1 Tabel Instruksi ALAMAT SEGMEN 13DC 13DC 13DC 13DC 13DC 13DC 13DC INSTRUKSI OFFSET 0100 0103 0105 0107 0109 010B 010D MOV CX,001A MOV DL, 5A MOV AH,02 INT 21 INC DL LOOP 0105 INT 20 OPCODE B91A00 B25A B402 CD21 FEC2 E2F8 CD20 KETERANGAN Peulangan reg Mengisi reg dengn 5A Mengisi register Mencetak program Menambahkan 1 pada program Mengulang pada offset 0105 Menfhentikan program

Tabel 2 Isian Register ALAMAT SEGMEN 13DC 13DC 13DC 00A7 00A7 00A7 REGISTER AX BX 0000 0000 0000 0000 0200 0000 0200 0000 0200 0000 0200 0000

OFFSET 0103 0105 0107 107C 107D 107E

CX 001A 001A 001A 001A 001A 001A

DX 0000 005A 005A 005A 005A 005A

SP FFEE FFEE FFEE FFE8 FFE8 FFE8

IP 0103 0105 0107 107C 107D 107E

E. Operasi Stack 1. Tulis program berikutMOV AH,02 MOV CX,1A MOV DL,41 INT 21 MOV BL,DL MOV DL,20 INT 21 MOV DL,BL INC DL LOOP 107 INT 20

Kemudian Ketik U 100 L (lihat bit awal dari alamat akhir program) dan buat tabel seperti tabel 1. Dan 2

17

2. Tulis program berikutMOV AH,02 MOV CX,1A MOV DL,41 INT 21 PUSH DX MOV DL,20 INT 21 POP DX INC DL LOOP 107 INT 20

Kemudian Ketik U 100 L (lihat bit awal dari alamat akhir program) dan buat tabel seperti tabel 1.dan 2

1.5. Pertanyaan 1. Dari program-program yang sudah ditulis dan diuji apa fungsi dari register AX merupakan register yang menyimpan code program untuk mengisi program. BX merupakan register yang digunakan untuk menyimpan code operasi lompat dan perbandingan. CX merupakan register yang menyimpan code perulangan dari program.

DX merupakan register yang menyimpan code object(karakter/kalimat) dari program. SP merupakan sebuah Segment IP,DS,SS,ES,CS merupakan sebuah offset.

2. Apa yang bisa disimpulkan dari tabel 1.1 sampai dengan tabel terakhir a. Pada tabel intruksipada alamat segmentnya akan bernilai sama sedangkan alamat offsetnya melakukan perulangan dimana ada penambahan 2 bit untuk code program berikutnya. b. Pada tabel register hampir sama dengan table isian tegister diamana alamatnya bernilai tetap selama masih belum NOP saat di tracekan(T). c. Jika sudah NOP setelah di tracekan maka untuk alamat segmentnya akan lebih kecil sedangkan alamat OFFsetnya akan bernilai besar. d. Titiap code program yang difunakan mempunyai OPCODE yang beda-beda pada masing-masing code program yang digunakan. 3. Buat program untuk menampilkan 1*1 = 1

2*1 = 2

19

4. Buat program untuk menampilkan 1:1 = 1

2:1 = 2

1.6 Referensi 1. Lukito, Ediman, 1982, Dasar-dasar Pemrograman Dengan Assambler 8088, PT Elex Media Komputindo, Jakarta

2. Mulyono, Heri, 2005, Diktat Kuliah Bahasa Rakitan, STMIK Jaya Nusa, Padang 3. Partoharsodjo, Hartono, 1991, Tuntunan Praktis Pemrograman Bahasa Assembly, PT Elex Media Komputindo, Jakarta 1.7 Kesimpulan Program assembler merupakan program yang mengguanakan perintah DEBUG yang bekerja pada DOS. Program assembler mengaplikasikan kerja pada SAP 3 Data yg di inputkan memakai kode ASCII Ketelitian kerja sangat dituntut untuk mendapatkan hasil yang maksimal Setiap mengawali penulisan program harus dia awali oleh Mov ah,02 dan di akhiri oleh Int DL,.. Int 21 digunakan untuk menyimpan data yang dimasukkan pada Mov DL,.. jadi harus dibuat, sebelum Int 20. INC = untuk melooping dalam penambahan sedangkan DEC = melooping untuk pengurangan. 20, yang berfungsi untuk menampilkan data yang di inputkan pada Mov