• Tidak ada hasil yang ditemukan

A. Definisi metoda dalam kelas

3.3 Perancangan DOGIVM (DOGI Virtual Machine)

3.3.1 Instruksi-instruksi dasar DOGIVM

Instruksi-instruksi yang terdapat pada DOGIVM diperlihatkan pada Tabel 3.14. Panjang instruksi menyatakan panjang instruksi dalam satuan doubleword (32 bit), jumlah pop menyatakan banyaknya anggota stack yang diambil oleh instruksi tersebut, dan return menyatakan banyaknya objek yang didorong oleh instruksi tersebut ke dalam stack.

instruksi panjang (double

word)

jumlah

pop return deskripsi NOP 1 tidak ada operasi

PUSH o 2 1 dorong objek o ke dalam stack PUSHL l 2 1 dorong objek lokal l ke dalam stack PUSHA a 2 1 dorong objek argumen a ke dalam stack PUSHI i 2 1 dorong objek integer bernilai i ke dalam stack PUSHF f 2 1 dorong objek real bernilai f ke dalam stack PUSHB b 2 1 dorong objek boolean bernilai b ke dalam stack PUSHS s 2 1 dorong objek string bernilai s ke dalam stack

PUSHC a 2 1 dorong objek code yang menunjuk alamat a ke dalam stack

PUSHN 1 1 dorong objek null ke dalam stack

POP o 2 1 ambil objek dari stack dan asosiasikan ke objek o POPL l 2 1 ambil objek dari stack dan asosiasikan ke objek lokal

l

POPA a 2 1 ambil objek dari stack dan asosiasikan ke objek argumen a

POPCTX 1 1 ambil objek dari stack dan asosiasikan ke objek konteks

JMP a 2 lompat ke alamat a

IFENTRY 1 1 1 buat suatu instance _if berdasarkan kondisi yang diberikan objek pada puncak stack

IFT 1 2 1 jalankan kode pada puncak stack jika benar IFTE 1 2 1 pilih kode yang akan dijalankan dari array pada

puncak stack

LOOP 1 1 buat suatu instance _loop

LOOPW 1 1 1 buat suatu instance _loop berdasarkan yang diberikan objek pada puncak stack

LOOPI 1 1 1 buat suatu instance _loop berdasarkan jumlah yang diberikan objek pada puncak stack

LOOPA 1 2 1 buat suatu instance _loop berdasarkan array yang diberikan objek pada puncak stack, dan objek di bawahnya untuk menampung elemen array LOOPF 1 3 1 buat suatu instance _loop berdasarkan batas yang

diberikan objek pada puncak stack dan objek di bawahnya

LOOPDO 1 2 1 eksekusi kode yang ada pada puncak stack CALL c m 3 memanggil metoda m dari kelas c

CALLC a 2 mengeksekusi kode pada alamat a

NEW c m 3 1 membuat instance dari kelas c dengan konstruktor m KILL 1 1 1 mendealokasikan objek pada puncak stack

RET 1 kembali pada alamat pemanggil (CALL) RETC 1 kembail pada alamat pemanggil (CALLC) ENDX 1 menandai akhir dari kode

END 1 menandai akhir dari kode KEEP 1 1 menandai stack dengan pembatas

FLUSH 1 * menghapus isi stack dari puncak hingga pembatas yang dibuat dengan KEEP

DISCONST 1 1 1 mengembalikan #true jika objek pada puncak stack dibuat dari literal

pada puncak stack

SUB 1 2 1 mengembalikan hasil pengurangan dari dua objek pada puncak stack

MUL 1 2 1 mengembalikan hasil perkalian dari dua objek pada puncak stack

DIV 1 2 1 mengembalikan hasil pembagian dari dua objek pada puncak stack

NEG 1 1 1 mengembalikan negasi dari objek pada puncak stack (bilangan)

POS 1 1 1 tidak ada operasi

AND 1 2 1 mengembalikan hasil operasi and dari dua objek pada puncak stack

OR 1 2 1 mengembalikan hasil operasi or dari dua objek pada puncak stack

NOT 1 1 1 mengembalikan negasi dari objek pada puncak stack (boolean)

ASSIGN 1 2 1 mengkopi dua objek pada puncak stack REFTO 1 2 1 mereferensikan nama objek pada objek lain ADDREF 1 1 1 menambah reference count

RELEASE 1 1 1 mengurangi reference count REFCOUNT 1 1 1 mengembalikan reference count BASE 1 1 1 mendorong instance ke dalam stack SELF 1 1 1 mendorong instance ke dalam stack

ALTER 1 2 1 mendorong array berisi dua objek pada puncak stack CMPE 1 2 1 membandingkan dua objek pada puncak stack, dan

mengembalikan #true jika keduanya sama, dan #false jika sebaliknya

CMPNE 1 2 1 membandingkan dua objek pada puncak stack, dan mengembalikan #true jika keduanya tidak sama, dan #false jika sebaliknya

CMPG 1 2 1 membandingkan dua objek pada puncak stack, dan mengembalikan #true jika nilai objek pertama > nilai objek kedua, dan #false jika sebaliknya CMPL 1 2 1 membandingkan dua objek pada puncak stack, dan

mengembalikan #true jika nilai objek pertama < nilai objek kedua, dan #false jika sebaliknya CMPGE 1 2 1 membandingkan dua objek pada puncak stack, dan

mengembalikan #true jika nilai objek pertama ≥ nilai objek kedua, dan #false jika sebaliknya CMPLE 1 2 1 membandingkan dua objek pada puncak stack, dan

mengembalikan #true jika nilai objek pertama ≤ nilai objek kedua, dan #false jika sebaliknya SLEN 1 1 1 mengembalikan panjang string pada puncak stack ARRSCNT 1 2 1 mengeset jumlah elemen array pada puncak stack ARRGCNT 1 1 1 mengembalikan jumlah elemen array pada puncak

stack

ARRSITEM 1 3 1 mengeset elemen array pada puncak stack ARRGITEM 1 2 1 mengembalikan elemen array pada puncak stack CONOUT 1 1 1 mencetak representasi dari objek pada puncak stack CONIN 1 1 1 membaca representasi objek dari console dan

mendorongnya ke dalam stack

CONOUTN 1 1 1 mencetak representasi dari objek pada puncak stack (+newline)

CONINN 1 1 1 membaca representasi objek dari console dan mendorongnya ke dalam stack

CDEXEC 1 1 1 mengeksekusi kode yang terdapat pada puncak stack CDVAL 1 1 1 mengembalikan nilai yang dihasilkan oleh kode CDELSE 1 2 1 membentuk array berisi dua objek pada puncak stack CDQT 1 2 1 mengembalikan objek pada puncak stack jika

bernilai benar

CDQTE 1 2 1 mengembalikan objek pertama pada array pada puncak stack jika bernilai benar

Tabel 3.14 Daftar instruksi DOGIVM

3.3.2 Siklus eksekusi instruksi

Siklus eksekusi kode antara DOGI diperlihatkan dalam Gambar 3.21. Instruksi CALL

• Dorong state konteks ke dalam state stack • Kosongkan state konteks,

• Set posisi pada state konteks pada alamat metoda Instruksi RET

• Pop state konteks dari state stack 3.3.3 State

Suatu state dalam DOGIVM terdiri dari:

• Sebuah daftar semua objek yang diinstansiasikan sejak program berjalan, • Sebuah state konteks – yaitu informasi mengenai posisi eksekusi, instance

yang sedang aktif, semua field yang terdapat pada instance tersebut, argumen-argumen metoda yang sedang dieksekusi, dan objek-objek lokal metoda tersebut,

• Sebuah state stack yang menyimpan state konteks ketika ada pemanggilan suatu metoda,

• Sebuah stack evaluasi, yang berisi objek-objek untuk digunakan dalam evaluasi, dan objek hasil evaluasi suatu ekspresi.

Ambil instruksi Eksekusi instruksi Majukan posisi pembacaan Stack kosong? Tidak Ya Reset posisi &

kosongkan stack

start

selesai

Dokumen terkait