Anda di halaman 1dari 17

LAPORAN PRAKTIKUM

ORGANISASI KOMPUTER & BAHASA ASSEMBLY


BANDINGKAN DAN LOMPAT

Kelas

INF 2B Praktikum 1

Nama

Michael Julyus C. M.

NIM

J3C113038

PROGRAM KEAHLIAN MANAJEMEN INFORMATIKA


DIREKTORAT PROGRAM DIPLOMA
INSTITUT PERTANIAN BOGOR
BOGOR
2014

KATA PENGANTAR

Puji dan Syukur Penulis Panjatkan ke Hadirat Tuhan Yang Maha Esa karena berkat limpahan
Rahmat dan Karunia-Nya sehingga penulis dapat menyusun laporan ini tepat pada waktunya.
Laporan ini membahas mengenai Pointer.
Dalam penyusunan laporan ini, penulis banyak mendapat tantangan dan hambatan akan tetapi
dengan bantuan dari berbagai pihak tantangan itu bisa teratasi. Olehnya itu, penulis
mengucapkan terima kasih yang sebesar-besarnya kepada semua pihak yang telah membantu
dalam penyusunan makalah ini, semoga bantuannya mendapat balasan yang setimpal dari Tuhan
Yang Maha Esa.
Penulis menyadari bahwa laporan ini masih jauh dari kesempurnaan baik dari bentuk
penyusunan maupun materinya. Kritik konstruktif dari pembaca sangat penulis harapkan untuk
penyempurnaan makalah selanjutnya.
Akhir kata semoga laporan ini dapat memberikan manfaat kepada kita sekalian.

Bogor, 04 Desember 2014

Penulis

Michael Julyus C. M. | J3C113038

DAFRAR ISI

KATA PENGANTAR 2
DAFRAR ISI 3
I.

TUJUAN PERCOBAAN

II.

TEORI PENUNJANG

LOMPAT TANPA SYARAT 5

MEMBANDINGKAN DENGAN CMP

LOMPAT YANG MENGIKUTI CMP

LOMPAT BERSYARAT

III.

TUGAS PENDAHULUAN 11

IV.

LISTING PROGRAM

12

V.

ANALISA PROGRAM

13

VI.

PENUTUP

15

KESIMPULAN

SARAN

VII.

15

15

DAFTAR PUSTAKA 16

Michael Julyus C. M. | J3C113038

I.

TUJUAN PERCOBAAN

Tujuan dari praktikum ini adalah agar mahasiswa dapat:


1.
2.
3.
4.

Memahami serta mengetahui berbagai macam tipe data di dalam bahasa assembly,
Mengetahui bagaimana komputer menyimpan suatu nilai di dalam memori,
Mengetahui bagaimana cara untuk menggunakan pointer,
Mengetahui bagaimana cara memanipulasi data dengan menggunakan berbagai macam

gerbang logika.
5. Mengetahui bagaimana cara menggunakan addressing modes sesuai dengan kebutuhan.

II.

Michael Julyus C. M. | J3C113038

TEORI PENUNJANG

o LOMPAT TANPA SYARAT


Perintah JMP (Jump), sudah pernah kita gunakan, dimana perintah ini digunakan untuk
melompati daerah data program. Perintah JMP digunakan dengan syntax:
JMP Tujuan
Perintah JMP ini dikategorikan sebagai Unconditional Jump, karena perintah ini tidak
menyeleksi keadaan apapun untuk melakukan suatu lompatan. Setiap ditemui perintah ini maka
lompatan pasti dilakukan.
Selain dari perintah jump tanpa syarat, masih banyak perintah Jump yang menyeleksi
suatu keadaan tertentu sebelum dilakukan lompatan. Perintah jump dengan penyeleksian kondisi
terlebih dahulu biasanya diikuti dengan perintah untuk melihat kondisi, seperti membandingkan
dengan perintah "CMP"(Compare).

o MEMBANDINGKAN DENGAN CMP


Perintah CMP (Compare) digunakan untuk membandingkan 2 buah operand, dengan
syntax:
CMP Operand1,Operand2
CMP akan membandingkan operand1 dengan operand2 dengan cara mengurangkan
operand1 dengan operand2. CMP tidak mempengaruhi nilai Operand1 dan Operand2, perintah
CMP hanya akan mempengaruhi flags register sebagai hasil perbandingan. Adapun flag-flag
yang terpengaruh oleh perintah CMP ini adalah:
- OF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan bertanda
- SF akan 1, bila operand1 lebih kecil dari operand2, pada operasi bilangan bertanda
- ZF akan 1, jika operand1 nilainya sama dengan operand2
- CF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan tidak bertanda

Perlu anda ingat bahwa CMP tidak dapat membandingkan antar 2 lokasi memori.

Michael Julyus C. M. | J3C113038

o LOMPAT YANG MENGIKUTI CMP


Perintah CMP yang hanya mempengaruhi flag register, umumnya diikuti dengan perintah
lompat yang melihat keadaan pada flags register ini. Jenis perintah lompat yang biasanya
mengikuti perintah CMP, terdapat 12 buah seperti pada Tabel 13.1.
Pada Tabel 13.1. terlihat bahwa terdapat dua operasi yang berbeda, yaitu operasi bilangan
bertanda dan tidak bertanda. Bilangan bertanda adalah bilangan yang akan membedakan
bilangan negatif dan positif(Mis. 37 dan -37). Sedangkan bilangan tidak bertanda adalah
bilangan yang tidak akan membedakan positif dan negatif, jadi angka -1 untuk operasi bilangan
bertanda akan dianggap FFh pada bilangan tidak bertanda. Lebih jauh mengenai bilangan
bertanda dan tidak ini bisa anda lihat pada BAB I.

Tabel 13.1. Perintah Jump yang mengikuti CMP


NO
.

PERINTAH LOMPAT

KONDISI

JA <Jump If Above>

Lompat, jika Operand1 > Operand2 untuk bilangan tidak


bertanda

JG <Jump If Greater>

Lompat, jika Operand1 > Operand2 untuk bilangan


bertanda

JE <Jump If Equal>

Lompat, jika Operand1 = Operand2

JNE <Jump If Not Equal>

Lompat, jika Operand1 tidak sama dengan Operand2

JB <Jump If Below>

Lompat, jika Operand1 < Operand2 untuk bilangan tidak


bertanda

JL <Jump If Less>

Lompat, jika Operand1 < Operand2 untuk bilangan


bertanda

JBE <Jump If Below or Lompat, jika operand1 <= Operand2 untuk bilangan tidak
Equal>
bertanda

JLE <Jump If Less or Equal>

JAE <Jump If Above or Lompat, jika Operand1 >= Operand2 untuk bilangan tidak

Michael Julyus C. M. | J3C113038

Lompat, jika Operand1 <= Operand2 untuk bilangan


bertanda

Equal>
10

bertanda

JGE <Jump If Greater or Lompat, jika Operand1 >= Operand2 untuk bilangan
Equal>
bertanda

Menggunakan Perintah Lompat Bersyarat

Bila program 13.1. dijalankan, maka akan tampak pada layar:


Bilangan A lebih besar dari bilangan B
Anda bisa mengganti nilai pada variabel Bil A dan Bil B untuk melihat hasil yang akan
ditampilkan pada layar.

o LOMPAT BERSYARAT
Pada gambar 13.1. anda telah melihat sebagian dari perintah lompat bersyarat. Kini akan
Michael Julyus C. M. | J3C113038

kita lihat lompat bersyarat lainnya yang tersedia, seperti pada gambar 13.2. Tidak seperti lompat
tanpa syarat, Lompat bersyarat hanya dapat melompat menuju label yang berjarak -128 sampai
+127 byte dari tempat lompatan.

Tabel 13.2. Daftar Perintah Jump


NO
.

PERINTAH LOMPAT

KONDISI

JA <Jump If Above>

Lompat, jika Operand1 > Operand2, untuk bilangan tidak


bertanda

JG <Jump If Greater>

Lompat, jika Operand1 > Operand2, untuk bilangan


bertanda

JE <Jump If Equal>

Lompat, jika Operand1 = Operand2

JNE <Jump If Not Equal>

Lompat, jika Operand1 tidak sama dengan Operand2

JB <Jump If Below>

Lompat, jika Operand1 < Operand2, untuk bilangan tidak


bertanda

JL <Jump If Less>

Lompat, jika Operand1 < Operand2, untuk bilangan


bertanda

JBE <Jump If Below or Equal>

Lompat, jika operand1 <= Operand2, untuk bilangan


tidak bertanda

JLE <Jump If Less or Equal>

Lompat, jika Operand1 <= Operand2, untuk bilangan


bertanda

JAE <Jump If Above or Equal>

Lompat, jika Operand1 >= Operand2, untuk bilangan


tidak bertanda

10

JGE <Jump If Greater or Equal>

Lompat, jika Operand1 >= Operand2, untuk bilangan


bertanda

11

JC <Jump Carry>

Lompat, jika Carry flag=1

Michael Julyus C. M. | J3C113038

12

JCXZ <Jump If CX is Zero>

Lompat, jika CX=0

13

JNA <Jump If Not Above>

Lompat, jika Operand1 < Operand2 dengan CF=1 atau


ZF=1

14

JNAE <Jump If Not Above nor Lompat, jika Operand1 < Operand2 dengan CX=1
Equal>

15

JNB <Jump If Not Below>

16

JNBE <Jump If Not Below nor Lompat, jika Operand1 > Operand2 dengan CF=0 dan
Equal>
ZF=0

17

JNC <Jump If No Carry>

Lompat, jika CF=0

18

JNG <Jump If Not Greater>

Lompat, jika Operand1 <= Operand2 dengan ZF=1 atau


SF tidak sama OF

19

JNGE <Jump If Not Greater Nor Lompat, jika Operand1 <= Operand2 dengan SF tidak
Equal>
sama OF

20

JNL <Jump If Not Less>

21

JNLE <Jump If Not Less Nor Equal> Lompat, jika Operand1 > Operand2 dengan ZF=0 dan
SF=OF

22

JNO <Jump If No Overflow>

Lompat, jika tidak terjadi tidak terjadi Overflow

23

JNP <Jump If Not Parity>

Lompat, jika Ganjil

24

JNS <Jump If No Sign>

Lompat, jika SF=0

25

JNZ <Jump If Not Zero>

Lompat, jika tidak 0

26

JO <Jump On Overflow>

Lompat, jika OF=1

27

JP <Jump On Parity>

Lompat, jika Genap

28

JPE <Jump If Parity Even>

Lompat, jika PF=1

29

JPO <Jump If Parity Odd>

Lompat, jika PF=0

30

JS <Jump On Sign>

Lompat, jika SF=1

Michael Julyus C. M. | J3C113038

Lompat, jika Operand1 > Operand2 dengan CF=0

Lompat, jika Operand1 >= Operand2 dengan SF=OF

31

JZ <Jump Is zero>

Lompat, jika 0

Bila dilihat pada Tabel 13.2., perintah untuk lompat sebenarnya sangat mudah untuk
digunakan karena setiap huruf melambangkan suatu kata. Dengan demikian kita tidak perlu
untuk mengingat-ingat semua perintah diatas, kita hanya harus ingat bahwa huruf J=Jump,
E=Equal, N=Not, S=Sign, Z=Zero, P=Parity, O=Overflow, C=Carry, G=Greater Than, A=Above,
L=Less dan B=Below.

Catatan:
Huruf G dan L yang artinya Greater Than dan Less digunakan khusus untuk operasi
bilangan bertanda. Sedangkan Huruf A dan B yang artinya Above dan Below digunakan khusus
untuk operasi bilangan tidak bertanda.

Program 13.2. Perbandingan karakter

Bila program 13.2. dijalankan, maka pada layar akan ditampilkan:

Michael Julyus C. M. | J3C113038

10

Teknik Komputer IPB


The Best Diplome in IPB ....!!
Angka 7 pada akhir kalimat digunakan untuk menghasilkan suara beep. Bila anda masih
ingat pada addressing mode yang telah kita pelajari, maka program 13.2. tentunya tidak ada
masalah.

Michael Julyus C. M. | J3C113038

11

III.

TUGAS PENDAHULUAN

1. Buatlah program asssembly yang dapat mencetak kalimat


INFORMATIKA jika menekan tombol spasi pada keyboard

Jawab:

Michael Julyus C. M. | J3C113038

12

MANAJEMEN

IV.

LISTING PROGRAM

1.

Michael Julyus C. M. | J3C113038

13

V.

ANALISA PROGRAM

Model SMALL
Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk memory
yang digunakan oleh program kita.

.CODE
Tanda directive ini digunakan untuk memberitahukan kepada assembler bahwa kita akan
mulai menggunakan Code Segment-nya disini. Code segment ini digunakan untuk menyimpan
program yang nantinya akan dijalankan.

ORG 100h
Pada program COM perintah ini akan selalu digunakan. Perintah ini digunakan untuk
memberitahukan assembler supaya program pada saat dijalankan (diload ke memory) ditaruh
mulai pada offset ke 100h (256) byte. Dapat dikatakan juga bahwa kita menyediakan 100h byte
kosong pada saat program dijalankan. 100h byte kosong ini nantinya akan ditempati oleh PSP
(Program Segment Prefix) dari program tersebut. PSP ini digunakan oleh DOS untuk mengontrol
jalannya program tersebut.

INT 20h
Perintah INT adalah suatu perintah untuk menghasilkan suatu interupsi dengan syntax:
INT NoInt

Michael Julyus C. M. | J3C113038

14

Interupsi 20h berfungsi untuk mengakhiri program dan menyerahkan kendali sepenuhnya
kepada Dos. Pada program COM cara ini bukanlah satu-satunya tetapi cara inilah yang paling
efektif untuk digunakan. Bila anda lupa untuk mengakhiri sebuah program maka program anda
tidak akan tahu kapan harus selesai, hal ini akan menyebabkan komputer menjadi hang.
1.

Analisa:
Pada listing di atas, Kal bernilai MANAJEMEN INFORMATIKA, kemudian agar dapat
menginputkan karakter, digunakan interupsi INT 16h. Interupsi ini digunakan agar dapat
membaca karakter yang diinputkan oleh user. Kemudian setelah mendapatkan inputan dari user,
selanjutnya akan menghasilkan nilai hexadesimal di register AX atas karakter yang telah
diinputkan oleh user. Kemudian bandingkan nilai yang ada di register AX dengan nilai 3920h
dengan menggunakan syntax CMP AX, 3920h. Nilai 3920h digunakan sebagai nilai
perbandingan karena karakter spasi akan menghasilkan nilai 3920h di register AX. Selanjutnya
digunakan syntax JE yaitu proses yang akan melompat jika nilai di register AX juga bernilai
3920h dan digunakan syntax JNE yaitu proses yang akan melompat jika nilai di register AX
Michael Julyus C. M. | J3C113038

15

tidak bernilai 3920h. Jadi, jika ketika program dijalankan dan user menginputkan karakter selain
spasi, maka proses selanjutnya adalah lompat ke Exit, yaitu mengakhiri program dan
menyerahkan kendali sepenuhnya kepada Dos dengan menggunakan interupsi INT 20h lalu
akhiri program dengan perintah END Proses. Tetapi jika user menginputkan spasi (menekan
tombol spasi), maka proses berikutnya akan langsung lompat ke Lakukan, yaitu mendapatkan
nilai KAL yang bernilai MANAJEMEN INFORMATIKA dengan menggunakan syntax LEA
DX, KAL. Lalu gunakan nilai servis untuk mencetak kalimat dengan menggunakan syntax MOV
AH, 09h. Kemudian selanjutnya adalah mengakhiri program dan menyerahkan kendali
sepenuhnya kepada Dos dengan menggunakan interupsi INT 20h lalu akhiri program dengan
perintah END Proses.

VI.

PENUTUP

o KESIMPULAN
Dari program-program di atas, dapat disimpulkan bahwa dalam bahasa Assembly, kita dapat
melewati beberapa syntax dengan cara melompat langsung ke proses yang dituju dengan cara
menggunakan perintah JUMP. Perintah lompat yang kita gunakan di sini adalah perintah lompat
bersyarat. Contohnya yaitu perintah lompat yang mengiktuti CMP. Selain itu juga terdapat
perintah lompat bersyarat lainnya yang dapat kita gunakan, yaitu JA, JG, JE, JNE, JB, JL, JBE,
JLE, JAE, JGE, JC, JCXZ, JNA, JNAE, JNB, JNBE, JNC, JNG, JNGE, JNL, JNLE, JNO, JNP,
JNS, JNZ, JO, JP, JPE, JS, dan JZ dengan berbagai kondisi yang kita perlukan dan gunakan
sesuai dengan yang kita butuhkan.

Michael Julyus C. M. | J3C113038

16

o SARAN
Sebelum menggunakan perintah lompat, sebaiknya dianalisa telebih dahulu perintah
lompat yang mana yang merupakan perintah lompat yang benar yang kita butuhkan sehingga
proses lompat tersebut dapat berjalan dengan baik tanpa terjadi kesalahan.

VII.

DAFTAR PUSTAKA

Suheri, Asep, ST, MT. Modul Praktikum Organisasi Komputer & Bahasa Assembly. 2012.
Bogor: Program Diploma Institut Pertanian Bogor.

Michael Julyus C. M. | J3C113038

17