Laporan 1
Praktikum Mikroprosesor
Anggota Kelompok: 1. Rahmayezi Edwar
2.
Rani Novesari
Pemrograman
Assembler 8086 dengan Debug
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
2.
Dasar Teori
a. 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
b. Debug
dan Interrupt
1. Debug
Debug
adalah suatu utiliti dalam DOS yang digunakan untuk membuat pemrograman
assambler dengan format ekstensi COM.
2. Interrupt (Int)
Perintah
ini merupakan pemanggilan subroutin yang sudah tersedia di memori computer
Subroutine
yang dapat dipanggil menggunakan perintah int (Interrupt) 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
3. Instruksi-Instruksi Dasar
1.
Instruksi
Pengalamatan
2.
Instruksi Penjumlahan
3.
Instruksi
Pengurangan
3.
Alat dan Bahan
a. PC
b. Utility
Debug
4.
Pengujian
a. Kerja
1 Menggunakan Debug.com
Langkah Kerja:
1.
Mengklik start, dari tampilan menu pilih Run. Ditampilan menu Run, ketik command dan selanjutnya pilih OK
2.
Dari layar DOS prompt yang muncul, menukar folder “document and settings” ke folder compiler untuk mikroprosessor
8088
3.
Mengetik Debug (huruf
besar atau kecil tidak berpengaruh)
4.
Mengetik A/a
5.
Menuliskan program berikut:
MOV
AH,02, Kemudian tekan Enter
MOV
DL,41, tekan Enter
INT
21, tekan Enter
INT
20, tekan Enter 2 kali
6.
Memeriksa 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
7.
Memberi nama program
dengan mengetikkan N(nama file.COM)
Misal
: Ncoba.com
8.
Memastikan 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
9.
Menyimpan program dengan mengetikkan
perintah W
10. Menjalankan
program dengan mengetikkan perintah G
11. Mencek
perbaris program dengan mengetikkan perintah T
12. Kemudian
mengetik T 2 kali, maka akan terlihat sebagai berikut
13. Keluar
dari utiliti Debug dengan ketik Q dan Panggil ulang program, dengan ketik
coba.com
14. Tabel Instruksi
Alamat
|
Instruksi
|
Opcode
|
Keterangan
|
|
Segmen
|
Offset
|
|||
0B0B
|
0100
|
B402
|
Mov ah, 02
|
Mencetak karakter
|
0B0B
|
0102
|
BA4100
|
Mov dl, 0041
|
Huruf A
|
0B0B
|
0105
|
C021
|
Int 21
|
Mencetak
|
0B0B
|
0107
|
C020
|
Int20
|
Keluar
|
15. Tabel Isian Register
Alamat
|
Register
|
||||||
Segmen
|
Offset
|
AX
|
BX
|
CX
|
DX
|
SP
|
IP
|
0B0B
|
0100
|
0200
|
0000
|
0000
|
0000
|
FFEE
|
0102
|
0B0B
|
0102
|
0200
|
0000
|
0000
|
0041
|
FFEE
|
0105
|
0B0B
|
0105
|
0200
|
0000
|
0000
|
0041
|
FFE8
|
107C
|
0B0B
|
0107
|
0200
|
0000
|
0000
|
0041
|
FFE8
|
107D
|
b. Mencetak
huruf A—Z
1. Program
Mov cx, 1A
Mov dl, 41
Mov ah, 02
Int 21
Loop 0105
Int 20
2. Tabel Instruksi
Alamat
|
Instruksi
|
Opcode
|
Keterangan
|
|
Segmen
|
Offset
|
|||
0B0B
|
0100
|
B91A00
|
Mov cx, 001A
|
Mencetak 26 kali
|
0B0B
|
0103
|
B241
|
Mov dl, 0041
|
Mencetak karakter
|
0B0B
|
0105
|
B402
|
Mov ah, 02
|
Huruf A
|
0B0B
|
0107
|
CD21
|
Int 21
|
Mencetak
|
0B0B
|
0109
|
FEC2
|
Inc dl
|
Menambah dl satu kali
|
0B0B
|
010B
|
E2F8
|
Loop 0105
|
Mengulang register dl
|
0B0B
|
010D
|
CD20
|
Int20
|
Keluar
|
3. Tabel Isian Register
Alamat
|
Register
|
||||||
Segmen
|
Offset
|
AX
|
BX
|
CX
|
DX
|
SP
|
IP
|
0B0B
|
0100
|
0000
|
0000
|
001A
|
000
|
FFEE
|
0103
|
0B0B
|
0103
|
0000
|
0000
|
001A
|
0041
|
FFEE
|
0105
|
0B0B
|
0105
|
0200
|
0000
|
001A
|
0041
|
FFEE
|
0107
|
0B0B
|
0107
|
0200
|
0000
|
001A
|
0041
|
FFE8
|
107C
|
0B0B
|
0109
|
0200
|
0000
|
001A
|
0041
|
FFE8
|
107D
|
0B0B
|
010B
|
0200
|
0000
|
001A
|
0041
|
FFE8
|
107E
|
0B0B
|
010D
|
0200
|
0000
|
001A
|
0041
|
FFE6
|
1161
|
5.
Pertanyaan
a. Dari program-program yang sudah
ditulis dan diuji fungsi dari register:
AX,
BX, CX, DX, SP, IP, DS, SS, ES, CS.
Jawab:
- Accumulator Register (AX)
Fungsi: Sebagai akumulator dan berhubungan dengan jenis-jenis operasi khusus seperti Aritmetika, In/Out, Shift, Logic, Rotate, dan operasi desimal berkode biner.
Fungsi: Sebagai akumulator dan berhubungan dengan jenis-jenis operasi khusus seperti Aritmetika, In/Out, Shift, Logic, Rotate, dan operasi desimal berkode biner.
- Base Register (BX)
Fungsi: Sebagai register base untuk mereferensi alamat memori. Operasi yang dapat dilakukan adalah Rotate, Logic, Shift, dan Aritmetika.
Fungsi: Sebagai register base untuk mereferensi alamat memori. Operasi yang dapat dilakukan adalah Rotate, Logic, Shift, dan Aritmetika.
- Counter Register (CX)
Fungsi: Sebagai pencacah implisit dengan instruksi tertentu, misalnya terhadap perintah Loop dan operasi string. Counter naik jika direction flag bernilai 0, dan counter turun jika direction flag bernilai 1.
Fungsi: Sebagai pencacah implisit dengan instruksi tertentu, misalnya terhadap perintah Loop dan operasi string. Counter naik jika direction flag bernilai 0, dan counter turun jika direction flag bernilai 1.
- Data Register (DX)
Fungsi: Menyimpan alamat port I/O selama operasi I/O tertentu, baik alamat port 8 bit maupun 16 bit. Digunakan juga dalam operasi perkalian dan pembagian.
Fungsi: Menyimpan alamat port I/O selama operasi I/O tertentu, baik alamat port 8 bit maupun 16 bit. Digunakan juga dalam operasi perkalian dan pembagian.
- Register SP (Stack Pointer, 16 bit)
Fungsi: Digunakan untuk operasi stack seperti menyimpan alamat return saat memanggil subroutine. SP merupakan register yang secara implisit digunakan oleh perintah PUSH dan POP yaitu menyimpan dan mengambil kembali dari stack.
Fungsi: Digunakan untuk operasi stack seperti menyimpan alamat return saat memanggil subroutine. SP merupakan register yang secara implisit digunakan oleh perintah PUSH dan POP yaitu menyimpan dan mengambil kembali dari stack.
- Register IP (Instruction Pointer, 16 bit)
Fungsi: Register yang berpasangan dengan CS sebagai register utama untuk menunjukkan baris perintah program. Pada saat program dijalankan, IP akan langsung menunjuk pada awal program. Code Segment dan Instruction Pointer berfungsi sebagai program counter ditulis dengan format CS:IP. Secara umum, kode mesin diletakkan di Code Segment, semua data diletakkan di Data Segment, dan operasi PUSH dan POP dilakukan di Stack Segment.
Fungsi: Register yang berpasangan dengan CS sebagai register utama untuk menunjukkan baris perintah program. Pada saat program dijalankan, IP akan langsung menunjuk pada awal program. Code Segment dan Instruction Pointer berfungsi sebagai program counter ditulis dengan format CS:IP. Secara umum, kode mesin diletakkan di Code Segment, semua data diletakkan di Data Segment, dan operasi PUSH dan POP dilakukan di Stack Segment.
- Register CS (Code Segment)
Fungsi: Mencatat segment dari kode program atau instruksi, register CS berpasangan dengan register IP (Instruction Pointer) dalam format CS:IP.
Fungsi: Mencatat segment dari kode program atau instruksi, register CS berpasangan dengan register IP (Instruction Pointer) dalam format CS:IP.
- Register DS (Data Segment)
Fungsi: Menyimpan alamat dari segment dimana data terletak
Fungsi: Menyimpan alamat dari segment dimana data terletak
b. Membuat program untuk menampilkan:
1*1 = 1
Jawab: ProgramàMOV AH,02
MOV DL,31
INT 21
MOV BL,DL
MOV DL,2A
INT 21
MOV BL,DL
MOV DL,31
INT 21
MOV BL,DL
MOV DL,3D
INT 21
MOV BL,DL
MOV DL,31
INC DL
LOOP 107
INT 20
MOV DL,31
INT 21
MOV BL,DL
MOV DL,2A
INT 21
MOV BL,DL
MOV DL,31
INT 21
MOV BL,DL
MOV DL,3D
INT 21
MOV BL,DL
MOV DL,31
INC DL
LOOP 107
INT 20
2*1 = 2
Jawab: Programà MOV
AH,02
MOV DL,32
INT 21
MOV BL,DL
MOV DL,2A
INT 21
MOV BL,DL
MOV DL,31
INT 21
MOV BL,DL
MOV DL,3D
INT 21
MOV BL,DL
MOV DL,32
INC DL
LOOP 107
INT 20
6.
Kesimpulan
Dalam
penulisan Pemograman Assambler 1 ini kita terlebih dahulu dapat mengenal Bahasa
Assambler, ada 3 instruksi dasar pada Bahasa sssembler yaitu
Mnemonic atau Opcode, Operand1 dan Operand2.
Kita
dapat mengenal debug dan perintah-perintahnya. Debug yaitu suatu utiliti dalam
DOS yang digunakan untuk membuat pemrograman assambler dengan format ekstensi
COM.
Beberapa
perintah-perintah debug dan kegunaannya yaitu :
1. Q (Quit)
Mengembalikan ke dos prompt
2. H (Hexa)
Melaksanakan perintah penambahan dan
pengurangan terhadap dua bilangan hexa
3. A (assambler)
Perintah untuk menulis program
assembler
4. R(Register)
Digunakan untuk mengetahui isi
masing-masing register, perintah ini juga bias untuk mengetahui atau
memperbaruhi isi register tertentu
5. G (Go)
Untuk menjalankan program
6. T(Trace)
Menjalankan program perbaris dengan
menampilkan register dipakai
7. 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).
Kita juga dapat mengenal fungsi dan
kegunaan masing-masing instruksi yaitu :
- Instruksi Pengalamatan = MOV
- Instruksi Penjumlahan = INC,ADD
- Instruksi Pengurangan = DEC,SUB
- Instruksi untuk menentukan Larik =
BX
- Instruksi lompat jika tidak sama =
JNE
- Instruksi lompat jika masih kurang/ sama
dengan = JLE
Keterangan
dari program diatas :
MOV
CX, adalah : untuk perulangan yang akan di buat
AH,
02 adalah : untuk menunjukkan fungsi pada INT 21
0L,
41 adalah : menunujukkan kode asciinya
INT
21 adalah : fungsi yang di lakukan
LOOP,
0103 adalah : perulangan
INT
20 adalah : untuk keluar dari program
0 comments:
Post a Comment