laporan orkom pointer
Embed Size (px)
TRANSCRIPT
LAPORAN PRAKTIKUMORGANISASI KOMPUTER & BAHASA ASSEMBLYPOINTER
Kelas: INF 2B Praktikum 1Nama: Binar Rahma FauqiNIM : J3C112081
PROGRAM KEAHLIAN MANAJEMEN INFORMATIKADIREKTORAT PROGRAM DIPLOMAINSTITUT PERTANIAN BOGORBOGOR2013TUJUAN PERCOBAAN Tujuan dari percobaan ini adalah agar mahasiswa dapat memahami dan mengetahui berbagai macam tipe data didalam bahasa assembly, mengetahui bagaimana komputer menyimpan suatu nilai didalam memori, dan bagaimana cara untuk menggunakan pointer.
TEORI PENUNJANGPada program-program sebelumnya (pengurangan,perkalian dan pembagian) dapat anda lihat bahwa hasil dari operasi aritmatika disimpan dalam 2 variabel dimana 1 variabel untuk menampung hasil dari word tingginya dan 1 word untuk menampung word rendahnya. Hal tersebut tidak normal, karena bila kita ingin melihat nilai tersebut maka nilai tersebut harus disatukan barulah dapat dibaca. Apakah ada cara lain supaya hasilnya dapat disimpan pada satu 1 variabel saja ? YA!!, tetapi untuk itu anda harus menggunakan pointer untuk mengaksesnya. Bila anda tidak menggunakan pointer maka tipe data penampung harus sesuai dengan registernya. Tanpa pointer untuk memindahkan data dari suatu variabel ke register 8 bit, maka variabel tersebut haruslah 8 bit juga yang dapat didefinisikan dengan DB, demikian juga untuk register 16 bit dengan variabel yang didefinisikan dengan DW. Contoh:A DB 17 ; DB=8 bit jadi A=8 bitB DW 35 ; DW=16 bit jadi B=16 bitMOV AL,A ; 8 bit dengan 8 bit MOV AX,B ; 16 bit dengan 16 bitSeperti pada contoh diatas anda tidak bisa menggunakan perintah MOV AX,A karena kedua operand tidak mempunyai daya tampung yang sama (16 dan 8 bit). Bila anda melakukan pemindahan data dari operand yang berbeda tipe data penampungnya maka akan ditampikan "**Error** BAGI.ASM(20) Operand types do not match". Dengan menggunakan pointer hal ini bukanlah masalah. Sebelum itu marilah kita lihat dahulu berbagai tipe data yang terdapat pada assembler.TIPE DATADidalam assembler kita bisa menyimpan data dengan berbagai tipe data yang berbeda-beda. Kita dapat memberikan nama pada data tersebut, untuk memudahkan dalam pengaksesan data tersebut. Adapun tipe data yang terdapat pada assembler diperlihatkan pada Tabel 10.1.NamaUkuran
DB (Define Byte)1 Byte
DW (Define Word)2 Byte
DD (Define DoubleWord)4 Byte
DF (Define FarWords)6 Byte
DQ (Define QuadWord)8 Byte
DT (Define TenBytes)10 Byte
LISTING PROGRAM Program 10.1. Program Yang Mengeksekusi Daerah Data
Program 10.1. Program Yang Mengeksekusi Daerah Data
Hasil Program 10.1
Program 10.2 Mendefinisikan data
Program 10.2 Mendefinisikan data
Hasil Program 10.2
Program 10.3 Menggunakan Pointer
Program 10.3 Menggunakan Pointer
Hasil Program 10.3
Program 10.4 Menampung 2 nilai dalam 1 register
Program 10.4 Menampung 2 nilai dalam 1 register
Hasil Program 10.4ANALISA PROGRAM1. MODEL SMALLTanda directive ini digunakan untuk memberitahukan kepada assembler bentukmemory yang digunakan oleh program kita. Supaya lebih jelas model-model yang biasdigunakan adalah :- SMALLJika data dan code yang digunakan oleh program kurang dari ukuran 1 segmentatau 64 KB.
2. .CODETanda directive ini digunakan untuk memberitahukan kepada assembler bahwakita akan mulai menggunakan Code Segment-nya disini. Code segment inidigunakan untuk menyimpan program yang nantinya akan dijalankan.
3. . ORG 100hPada program COM perintah ini akan selalu digunakan. Perintah ini digunakanuntuk memberitahukan assembler supaya program pada saat dijalankan(diload kememory) ditaruh mulai pada offset ke 100h(256) byte. Dapat dikatakan juga bahwakita menyediakan 100h byte kosong pada saat program dijalankan. 100h bytekosong ini nantinya akan ditempati oleh PSP(Program Segment Prefix) dariprogram tersebut. PSP ini digunakan oleh DOS untuk mengontrol jalannya program tersebut.
4. INT 20hPerintahINTadalah suatu perintah untuk menghasilkan suatu interupsi
Program 10.1dapat kita lihat bahwa kita selalu melompati daerah data("TData:JMP Proses"), mengapa demikian ? Bila kita tidak melompati daerah data ini maka proses akan melalui daerah data ini. Data-data program akan dianggap oleh komputer sebagai suatu intruksi yang akan dijalankan sehingga apapun mungkin bisa terjadi disana. Sebagai contohnya akan kita buat sebuah program yang tidak melompati daerah data, sehingga data akan dieksekusi sebagai intruksi. Program ini telah diatur sedemikian rupa untuk membunyikan speaker anda, pada akhir data diberi nilai CD20 yang merupakan bahasa mesin dari intruksi INT 20h.
Program 10.2Ketiga byte pertama pada Gambar hasil program 9.2. adalah bahasa mesin dari perintah "JUMP PROSES" dan "NOP". Pada byte ke 4 dan ke 5 ini adalah data dari variabel "A", dapat kita lihat bahwa data dari variabel "A" (1234) yang didefinisikan dengan "DB" disimpan didalam memori komputer sesuai dengan yang didefinisikan. Dua byte selanjutnya (byte ke 6 dan 7), merupakan data dari variabel C yang telah kita definisikan dengan "DW(2 byte)". Ternyata kedua byte dari variabel "C" (ABCD) disimpan didalam memori dalam urutan yang terbalik (CDAB), mengapa demikian ?, hal ini dikarenakan penyimpanan pada memori yang menyimpan nilai tingginya pada alamat tinggi. Anda dapat lihat pada ke 4 byte selanjutnya, yaitu data dari variabel "D" juga disimpan dengan susunan yang terbalik (56789018 menjadi 18907856).
Program 10.3 dan program 10.4Pada awalnya kita mendefinisikan variabel "A" dan "B" dengan tipe data word (16 bit) yang mempunyai nilai awal 01EF dan 02FE, serta variabel "C" dengan tipe data DoubleWord (32 bit) yang tidak diinialisasi.MOV AL,BYTE PTR A MOV AH,BYTE PTR A+1Pada kedua perintah tersebut, kita memindahkan data dari variabel "A" ke register AX dengan byte per byte. Perhatikanlah bahwa kita harus menyesuaikan pemindahan data yang dilakukan dengan kemampuan daya tampungnya. Oleh sebab itu digunakan "BYTE" PTR untuk memindahkan data 1 byte menuju register 8 bit, dengan demikian untuk memindahkan data 16 bit harus digunakan "WORD" PTR. Pada baris pertama kita memindahkan byte rendah dari variabel "A" (EF) menuju register AL, kemudian pada baris kedua kita memindahkan byte tingginya (01) menuju register AH. Lihatlah kita menggunakan "BYTE PTR A" untuk nilai byte rendah dan "BYTE PTR+1" untuk byte tinggi dari variabel "A" dikarenakan penyimpanan data dalam memori komputer yang menyimpan byte tinggi terlebih dahulu (Lihat bagian 9.3.).MOV BX,B MOV WORD PTR D,AX MOV WORD PTR D+2,BXPada bagian ini akan kita coba untuk memindahkan data dari 2 register 16 bit menuju 1 variabel 32 bit. Pada baris pertama "MOV BX,B" tentunya tidak ada masalah karena kedua operand mempunyai daya tampung yang sama. Pada baris kedua "MOV WORD PTR D,AX" kita memindahkan nilai pada register AX untuk disimpan pada variabel "D" sebagai word rendahnya. Kemudian pada baris ketiga "MOV WORD PTR D+2,BX" kita masukkan nilai dari register BX pada variabel "D" untuk word tingginya sehingga nilainya sekarang adalah BX:AX=02FE01EF. Perhatikanlah pada baris ketiga kita melompati 2 byte (WORD PTR+2) dari variabel "D" untuk menyimpan word tingginya. Kini dengan menggunakan pointer ini kita bisa menyimpan hasil perkalian 16 bit didalam 1 variabel 32 bit.
KESIMPULANDari program-program diatas, dapat disimpulkan bahwa dalam bahasa Assembly kita dapat menyimpan data dengan berbagai tipe data yang berbeda-beda, berikut adalah tipe data yang ada dalam suatu bahasa assembly yaitu DB, DW, DD, DF, DQ dan DT dengan berbagai kapasitas yang bisa kita gunakan sesuai dengan yang kita butuhkan. Pointer juga dapat berfungsi untuk memindahkan data dari operan yang berbeda dan di tampung oleh satu variabel sehingga kita bisa menghemat kapasitas memori yang ada.
TUGAS DAN PERTANYAANSoal : 1. ((FEh*BCh)+7Dh)/2 2. ((AFEh*ABCh)+67Dh)/4Jawab :
1.
Lalu klik emulate , setelah itu lakukan single step maka akan ditampilkan hasil seperti dibawah ini:
2. Lalu klik emulate , setelah itu lakukan single step maka akan ditampilkan hasil seperti dibawah ini:
DAFTAR PUSTAKASuheri, Asep, ST, MT. Modul Praktikum Organisasi Komputer & Bahasa Assembly. 2012. Bogor: Program Diploma Institut Pertanian Bogor.
LAMPIRAN