20
LAPORAN PRAKTIKUM POK FINAL PROJECT OLEH : Nama : Andyta Permana Sari NIM : M0511006 JURUSAN INFORMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SEBELAS MARET

FP_M0511006_ANDYTA

  • Upload
    rizky12

  • View
    24

  • Download
    5

Embed Size (px)

Citation preview

Page 1: FP_M0511006_ANDYTA

LAPORAN PRAKTIKUM POK

FINAL PROJECT

OLEH :

Nama : Andyta Permana Sari

NIM : M0511006

JURUSAN INFORMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SEBELAS MARET

2012

Page 2: FP_M0511006_ANDYTA

I. TUJUAN:

Agar mahasiswa mampu mengimplementasikan materi – materi yang sudah

diberikan sebelumnya kedalam suatu program.

II. DASAR TEORI:

Dengan menggunakan bahasa Assembler, kita mampu membuat program

yang mampu mengubah huruf kecil menjadi huruf besar atau sebaliknya, dapat

pula mebuat program perulangan atau menuliskan string dengan pengaturan

kursor maupun atribut. Jika kita menginginkan untuk mengatur posisi kursor

digunakan INT 10h dengan servis 02 dengan syarat register sebagai berikut :

AH 02

BH nomor halaman layar

DH posisi baris

DL posisi kolom

Sebuah karakter disertai dengan warna tentunya akan lebih menarik. Untuk itu

anda bisa menggunakan interupsi ke 10h dengan aturan pemakaiannya :

AH = 09h

AL = Kode ASCII dari karakter yang akan dicetak

BH = Nomor halaman(0 untuk halaman 1)

BL = Atribut atau warna dari karakter yang akan dicetak

CX = Banyaknya karakter tersebut akan dicetak

Dapat juga melakukan operasi aritmatika yaitu penjumlahan dengan instruksi

ADD atau INC, operasi pengurangan dengan instruksi SUB atau DEC, operasi

perkalian dengan instruksi MUL dan operasi pembagian dengan instruksi DIV.

Selainitu kita juga dapat menggunakan prinsip stack. Berikut merupakan prinsip

stack :

- Sifat operasinya LIFO (Last In First Out), artinya data yang disimpan terakhir

ke dalam stack, akan diambil yang pertama kali.

- Ada operasi PUSH, yaitu mendorong isi register ke dalam STACK

- Ada operasi POP, yaitu operasi mengambil data dari STACK ke dalam register

Page 3: FP_M0511006_ANDYTA

- Adress memori yang menangani stack adalah SS:SP (Stack Segment dan Stack

Pointer)

Disamping itu, assembler juga menyediakan proses input keyboard dengan

ketentuan sebagai berikut :

INT 21H servis 01 : input 1 karakter dari keyboard dengan ECHO (apa yang

diinputkan ditampilkan di layar)

Syarat: AH 01

Hasil : kode ASCII karakter yang diinput disimpan di register AL

INT 21H servis 07 : input 1 karakter dari keyboard tanpa ECHO (apa yang

diinputkan tidak ditampilkan di layar) tanpa mengecek

ctrlbreak

Syarat : AH 07

Hasil : kode ASCII karakter yang diinput disimpan di register AL

INT 21H servis 08 : input 1 karakter dari keyboard tanpa ECHO (apa yang

diinputkan tidak ditampilkan di layar) dengan mengecek ctrl-

break (dapat dibreak dengan Ctrl-C)

Syarat : AH 08

Hasil : kode ASCII karakter yang diinput disimpan di register AL

INT 21H servis 06 : input 1 karakter dari keyboard tanpa menunggu

Syarat : AH 06

DL 0FFH

Hasil : kode ASCII karakter yang diinput disimpan di register AL

Page 4: FP_M0511006_ANDYTA

III. ANALISIS:

Page 5: FP_M0511006_ANDYTA
Page 6: FP_M0511006_ANDYTA

Run :

Page 7: FP_M0511006_ANDYTA

Untuk membuat program seperti yang terlihat diatas, pertama-tama

diawali dengan membuat project baru dengan COM file, sehingga secara

default akan tertulis ORG100h yang digunakan untuk memberitahu assembler

supaya program pada saat dijalankan ditaruh mulai dari offset ke 100h atau

256 byte.

Barulah dalam label start dibuat instruksi jmp mulai, yang meminta

program untuk langsung loncat menuju ke label mulai. Sebelumnya

dideklarasikan beberapa buah string antara lain : :

- Teks1 db “PROGRAM CAMPUR CAMPUR$”

- Teks2 db 10,13 “OLEH : Andyta PS / M0511006$”

- Teks 3 db 10,13 “Membuat kalimat menjadi tidak Alay$”

- Teks 4 db 10,13 “Masukkan kalimat (campuran huruf besar &

kecil) : $”

- Teks 5 db 10,13 “Dalam huruf kecil : $”

- Kal db 20,?,20 dup(?)

- Teks 6 db 10,13 “ $” => agar ada 1 baris yang kosong

- Teks 7 db 10,13 “PERULANGAN$”

- Teks 8 db 10,13 “Masukkan Angka untuk perulangan(1-9): $”

- Teks 9 db 10,13 “Diulang-ulang$”

- Teks 10 db 10,13 “Bukan bilangan Ulangi$”,10,13

- Teks 11 db 10,13 “OPERASI PEMBAGIAN$”

Page 8: FP_M0511006_ANDYTA

- Hasil db 0 (nilai hasil diinisiasi awal bernilai 0)

- Sisa db 0 (nilai sisa diinisiasi awal bernilai 0)

- Teks 12 db 10,13 “Akan dilakukan pembagian 66 dibagi 7 $”

- Teks 13 db 10,13 “Hasil bagi: $”

- Teks 14 db 10,13 “Sisa bagi: $”

- Teks 15 db 10,13 “STACK$”

Dalam beberapa buah string diatas, terdapat tanda $ yang selalu tertera

dalam akhir string, tanda tersebut digunakan sebagai tanda bahwa string telah

berakhir, atau dapat dikatakan sebagai pengakhir kalimat, sedangkan angka 10

disamping kalimat digunakan untuk pergantian baris dan angka 13 digunakan

untuk pengaturan rata kiri. Lanjut ke label mulai, didalamnya diberikan

berbagai perintah atau instruksi.

Dalam label mulai dibuatlah instruksi pengaturan kursor dengan

didahului perintah MOV AH, 02h merupakan servis untuk mengatur kursor.

Kemudian terdapat instruksi MOV BH, 00 yang dimaksudkan sebagai

pengatur nomor halaman layar. Sedangkan MOV DH, 01 dimaksudkan

sebagai pengatur posisi baris , dalam hal ini string pertama yaitu PROGRAM

CAMPUR CAMPUR dituliskan dalam baris ke 1 atau pertama. Instruksi MOV

DL,25 merupakan perintah untuk mengatur posisi kolom, sehingga string

tersebut dituliskan dalam kolom ke 25. Jadi jika dipandang sebagai matriks,

kalimat PROGRAM CAMPUR CAMPUR ini terdapat dalam (8,25). Perintah

INT 10 merupakan interupsi untuk mengakses layar agar dapat diatur posisi

kursornya. Kemudian diberikan perintah MOV AH,09H yang digunakan untuk

mencetak string, hampir sama dengan perintah MOV AH,02H saat kita hendak

mencetak sebuah karakter. Dan kemudian kalimate tersebut diberikan atribut

atau warna agar lebih menarik dengan instruksi MOV BL,0BH. Kita dapat

mengganti warna baground maupun warna dari tulisan itu sendiri. Untuk

memilih warna background, kita dapat mengganti angka 0 dalam intsruksi

tersebut dengan angka 1-9 sesuai keinginan kita, sedangkan untuk warna dasar

dari karakter dapat dilakukan dengan mengganti huruf b dalam instruksi

tersebut dengan angka 1-9 atau huruf a-f sesuai keinginan kita. Dalam hal ini

saya mengambil 0b untuk mendapatkan huruf dengan warna background hitam

Page 9: FP_M0511006_ANDYTA

(0) dan warna dasar karakter biru (b). Selanjutnya diberikan perintah MOV

DX, OFFSET teks1 yang artinya data berupa teks1 yang disimpan dalam

memori memiliki alamat offset dimana alamat offset tersebut akan dikirim ke

register DX. Setelah itu, dijalankan perintah INT 21H yang digunakan untuk

mengeksekusi program atau mencetak string yang dikehendaki. Dicetak

kembali teks 2 dan teks 6 dengan MOV DX, offset teks2 yang dilanjutkan

dengan INT 21h dan MOV DX, offset teks6 yang juga dilanjutkan dengan INT

21h untuk mencetak kalimat.

Selanjutnya, untuk program yang mengubah Huruf menjadi huruf kecil

semua, awalnya kita mencetak string dari teks3 dan teks4 dengan perinta

MOV DX, offset teks3 yang dilanjutkan dengan INT 21h dan MOV DX, offset

teks4 yang juga dilanjutkan dengan INT 21h untuk mencetak kalimat ke-3 dan

ke-4. Kemudian nilai dalam register BX di-Nolkan atau di XORkan.

Kemudian dibuat label baca yang didalamnya terdapat berbagai

instruksi. diawali dengan instruksi MOV AH,01h yang dimaksudkan agar user

dapat memasukkan input berupa sebuah karakter dari keyboard dengan ECHO

(apa yang diinputkan ditampilkan di layar). Perintah INT 21h merupakan

instruksi yang merupakan syarat yang digunakan agar servis 01 dari register

AH dapat dilaksanakan. Hasil inputan dari keyboard nantinya akan disimpan

dalam register AL. Kemudian CMP AL,0DH dimaksudkan untuk

membandingkan atau compare dengan desimal 0D yang dalam kode ascii

merupakan tanda enter, maksudnya nilai dalam register AL di bandingkan

apakah sama dengan 0D. Jika sama, maka instruksi JE jadi (jump if equal)

dilaksanakan, sedangkan jika nilai dalam register AL tidak sama dengan 0D,

JE jadi tidak dilaksanakan. Misalkan yang kita inputkan dalam program adalah

huruf A (besar), yang memiliki kode ascii 41, karena tidak sama dengan 0D

(enter) maka JE jadi dilewati. Perintah CMP AL ini hampir sama dengan

fungsi if condition dalam c++ maupun java. Kemudian nilai dalam register AL

tadi dipindahkan ke kal dalam indeks ke BX (awalnya BX bernilai 0, akibat

proses XOR BX). Kemudian nilai BX diincrement atau ditambah 1 dan

program kembali mengulang program dalam label baca sampai diinputkan

enter.

Page 10: FP_M0511006_ANDYTA

Lalu dalam label ubah, disini digunakan perintah MOV AH,02h yang

digunakan untuk mencetak karakter, kemudidan nilai dalam register DL

ditambah 20 heksa decimal dengan pernyataan ADD DL,20h. Kemudian nilai

DL yang baru dicetak dengan interup 21h dan nilai CX di decrement atau

dikurang 1 dan program loncat atau jump ke label cetak.

Dalam label jadi, diberikan perintah MOV AH,09H yang digunakan

untuk mencetak string, hampir sama dengan perintah MOV AH,02H saat kita

hendak mencetak sebuah karakter. Selanjutnya diberikan perintah MOV DX,

OFFSET teks5 yang artinya teks5 yang disimpan dalam memori memiliki

alamat offset dimana alamat offset tersebut akan dikirim ke register DX.

Setelah itu, dijalankan perintah INT 21H yang digunakan untuk mengeksekusi

program atau mencetak string dari teks5. Kemudian dijalankan MOV AH,02h

untuk servis mencetak karakter, setelah itu nilai dalam register BX dipindah ke

register CX. Kemudian diberikan instruksi XOR BX,BX yang digunakan

untuk meng-XOR-kan nilai dalam register BX, atau membuat nilai dalam

register BX sama dengan 0 (meng NOL kan register BX).

Dalam label cetak, di compare atau dibandingkan apakah nilai dalam

CX adalah 0 (CMP CX,0000), jika iya maka JE prog2 (Jump if Equal)

dijalankan, akan tetapi jika tidak, maka langsung ke MOV DL,kal[BX] yang

dimaksudkan bahwa nilai kal pada indeks ke BX dipindah ke register DL.

Stelah itu nilai BX diincrement atau ditambah 1. Lalu dibandingkan nilai

dalam register DL apakah kurang dari 40h, jika iya maka JLE (Jump if Lower

or Equal) cetak1 dijalankan, tapi jika lebih besar 40h, maka JLE cetak1

dilewati. Kemudian nilai register DL dibandingkan lagi apakah kurang dari

5AH, jika iya, maka program loncat ke label ubah (JLE ubah). Sedangkan

dalam label cetak1 program dieksekusi dengan INT 21h dan mengalami

pengulangan menuju ke label cetak.

Berikutnya adalah label prog2 yang didalamnya juga diberikan

berbagai instruksi. Pertama adalah pencetakan string dari teks ke 6, teks7

dan teks8 dengan instruksi MOV AH, offset teks6, INT 21h , MOV AH,

offset tek7, INT 21h dan MOV AH, offset teks8, INT 21h . Kemudian

diberikan instruksi MOV AH,01h dimaksudkan agar user dapat

Page 11: FP_M0511006_ANDYTA

memasukkan input berupa sebuah karakter dari keyboard dengan ECHO

(apa yang diinputkan ditampilkan di layar). Perintah INT 21h merupakan

instruksi yang merupakan syarat yang digunakan agar servis 01 dari

register AH dapat dilaksanakan. Hasil inputan dari keyboard nantinya akan

disimpan dalam register AL. Kemudian perintah CMP AL, 30h dan JLE

(Jump if Lower or Equal) salah maksudnya adalah nilai dalam register AL

(yang diinputkan dari keyboard) dibandingkan apakah bernilai kurang dari

atau sama dengan 30 heksadesimal atau angka 0 dari kode ascii , jika benar

maka program loncat atau jump ke label salah. Namun jika tidak atau

bernilai salah (lebih dari 30 heksadesimal ) maka perintah JLE dilewati

dan langsung ke instruksi CMP AL,3Ah dan JGE (Jump if Greater or

Equal) salah, perintah tersebut dimaksudkan bahwa jika nilai dalam

register AL lebih besar atau sama dengan 3A heksadesimal atau angka 10,

maka program langsung loncat ke label salah.

Kemudian diberikan instruksi XOR CX,CX yang digunakan untuk

meng-XOR-kan nilai dalam register CX, atau membuat nilai dalam

register CX sama dengan 0 (meng NOL kan register CX). Nilai dari

register CX ini nantinya digunakan sebagai perulangan. Setelah itu nilai

dalam register AL dimasukkan ke register CL (MOV CL,AL) dan

dikurangi 30 heksadesimal dengan istruksi SUB CL,30h. Setelah itu

diberikan perintah MOV AH,09H yang digunakan untuk mencetak string,

hampir sama dengan perintah MOV AH,02H saat kita hendak mencetak

sebuah karakter. Selanjutnya diberikan perintah MOV DX, OFFSET teks9

yang artinya teks9 yang disimpan dalam memori memiliki alamat offset

dimana alamat offset tersebut akan dikirim ke register DX.

Dalam label ulang dieksekusi atau dicetak data dari register DX yang

berisi string dari teks9. Kemudian dilakukan perulangan dengan instruksi

LOOP ulang dan mencetak kembali data teks9, dan proses ini akan terus

terulang sampai dengan nilai yang ada dalam register CX. Setelah selesai

melakukan perulangan di label ulang maka program loncat ke label prog3.

Untuk label salah diberikan perintah MOV AH,09H yang digunakan

untuk mencetak string. Selanjutnya diberikan perintah MOV DX, OFFSET

Page 12: FP_M0511006_ANDYTA

teks10 yang artinya teks10 yang disimpan dalam memori memiliki alamat

offset dimana alamat offset tersebut akan dikirim ke register DX. Setelah

itu, dijalankan perintah INT 21H yang digunakan untuk mengeksekusi

program atau mencetak string dari string tersebut. Kemudian program

kembali ke label prog2 dengan perintah JMP prog2.

Selanjutnya adalah label prog3, didalamnya diberika instruksi yang

digunakan untuk menghitung operasi aritmatika pembagian. Pertama

diberikan instruksi MOV AH,09h yang digunakan untuk mencetak string,

hampir sama dengan perintah MOV AH,02H saat kita hendak mencetak

sebuah karakter. Selanjutnya diberikan perintah untuk mencetak string

dalam teks6, teks11, dan teks12 dengan perintah MOV AH, offset teks6,

MOV AH, offset teks11 dan MOV AH, offset teks12 yang masing masing

disisipi INT 21h untuk eksekusi. Kemudian diberikan instuksi MOV

AX,66 dan MOV DL,7 yang berarti nilai dalam register AX diberikan

sama dengan 66 dan nilai dalam register DL adalah 7. Barulah diberikan

operasi pembagian terhadap register AX dan DL dengan perinta DIV DL,

yang artinya nilai dalam register AX di bagi dengan nilai dalam register

DL dan hasilnya akan disimpan dalam register AL dan sisanya akan

disimpan dalam register AH. Jadi setelah terjadi operasi pembagian AL

terhadap DL (66/7= 9 sisa 3), nilai AL yang merupakan hasil pembagian

yaitu 9, dipindah ke HASIL dengan MOV HASIL, AL dan nilai AH yang

merupakan sisa pembagian yaitu 3 dipindah ke SISA dengan MOV

SISA,AH. Setelah itu berikan kembali perintah MOV AH,09h untuk

mencetak string dan MOV DX, OFFSET teks13 yang artinya teks13 yang

disimpan dalam memori memiliki alamat offset dimana alamat offset

tersebut akan dikirim ke register DX. Setelah itu, dijalankan perintah INT

21H yang digunakan untuk mengeksekusi program atau mencetak string

dari teks13 tersebut.

Kemudian diberikan perintah MOV AH,02h yang merupakan servis

yang digunakan untuk mencetak karakter. Kemudian nilai HASIL yaitu 9

dipindah ke dalam register DL (MOV DL,HASIL), dan nilai DL tadi ditambah

dengan 30h (ADD DL,30h), sehingga nilai DL sekarang adalah 9+30h=39h

Page 13: FP_M0511006_ANDYTA

yang dalam kode ascii merupakan angka 9. Kemudian dicetak angka 9 tersebut

dengan interrupt 21h (INT 21h).

Setelah itu berikan kembali perintah MOV AH,09h untuk mencetak

string dan MOV DX, OFFSET teks14 yang artinya teks14 yang disimpan

dalam memori memiliki alamat offset dimana alamat offset tersebut akan

dikirim ke register DX. Setelah itu, dijalankan perintah INT 21H yang

digunakan untuk mengeksekusi program atau mencetak string dari teks14

tersebut.

Kemudian diberikan perintah MOV AH,02h yang merupakan servis

yang digunakan untuk mencetak karakter. Kemudian nilai SISA yaitu 3

dipindah ke dalam register DL (MOV DL,SISA), dan nilai DL tadi

ditambah dengan 30h (ADD DL,30h), sehingga nilai DL sekarang adalah

3+30h=33h yang dalam kode ascii merupakan angka 3. Kemudian dicetak

angka 3 tersebut dengan interrupt 21h (INT 21h).

Label berikutnya adalah label prog4 yang berisi berbagai instruksi

Stack. Awalnya diberikan instruksi instruksi MOV AH,09h yang digunakan

untuk mencetak string, hampir sama dengan perintah MOV AH,02H saat kita

hendak mencetak sebuah karakter. Selanjutnya diberikan perintah untuk

mencetak string dalam teks6, teks15, dan teks6 dengan perintah MOV AH,

offset teks6, MOV AH, offset teks15 dan MOV AH, offset teks6 yang masing

masing disisipi INT 21h untuk eksekusi. MOV AH, 02 H artinya program

tersebut diminta untuk memindahkan nilai 02H ke dalam register AH atau kita

menyuruh program untuk memanggil servis 02 agar dapat menuliskan huruf.

Dengan konsep stack, dituliskan satu persatu dulu nilai yang akan kita

munculkan dengan MOV DL. Setiap menuliskan nilai dalam register DL, DX

harus di PUSH dulu untuk memasukkannya kedalam stack dulu sebelum

digunakan nantinya. Dalam hal ini awalnya kita menuliskan nilai 70 yang

merupakan kode asciii dari huruf p (kecil) ke dalam register DL dengan MOV

DL, 70H. Kemudian DX di PUSH atau disimpan nilainya dalam stack.

Kemudian MOV DL,3aH yang berguna untuk menuliskan symbol : (titik dua),

register DX di PUSH lagi. Kemudian dituliskan MOV DL,20H untuk

menuliskan symbol spasi, lalu di PUSH ke stack. Begitu seterusnya mengisi

Page 14: FP_M0511006_ANDYTA

register DL dengan nilai 41H, 54H, 59H, dan 44H. Dan setiap kali kita

mengisikan register DX, harus dimasukkan dalam stack (PUSH) terlebih

dahulu. Lalu nilai yang ada dalam stack itu di POP atau diambil dari nilai

paling atas atau yang terakhir kali dimasukkan. Dengan instruksi POP DX

pertama, artinya kita mengambil nilai dari register DX yang terakhir kali

dimasukkan atau berada paling atas dalam stack yaitu nilai 44 yang

merupakan kode ascii dari huruf D. Huruf D tadi di eksekusi dengan perintah

INT 20H. Kemudian diberikan POP DX lagi yang akan mengambil nilai 59

dalam stack yang merupakan kode ascii dari huruf Y, lalu di POP DX yang

memiliki nilai 54 yang merupakan kode ascii dari T. Dan juga di POP DX

dengan nilai 41 yang merupakan huruf A dalam kode ascii. Begitu seterusnya

data dalam stack di POP sampai data yang terakhir dalam stack yaitu 70 yang

merupakan kode ascii dari p(kecil). Sehingga saat dieksekusi akan

menghasilkan string “DYTA :p”.

Terakhir kali, diberikan label selesai yang didalamnya diberikan

instruksi MOV AX,4C00H yang digunakan untuk mengakhiri program,

sebagai pengganti dari INT 20H, dan INT 21H digunakan untuk mengeksekusi

program yang telah kita buat.

IV. KESIMPULAN:

Dari program yang terlah dibuat dan dianalisa, dapat diambil kesimppulan

bahwa Assembler dapat digunakan untuk membuat program dengan berbagai

variasi seperti program mencetak kalimat dengan stack, program yang dapat

melakukan perulangan atau looping, program yang mampu menginputkan

karakter dari keyboard dan lain-lain. Dimana dalam program itu, kita dapat

memberikan atribut berupa wana background maupun warna dasar karakter sesuai

keinginan kita dan juga dapat memberikan pengaturan letak atau pengaturan posisi

kursor.